Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, итератор, непонятное исключение. / 10 сообщений из 10, страница 1 из 1
03.05.2005, 13:47
    #33046097
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
Iterator iterator = getHibernateTemplate().iterate(query);
while (iterator .hasNext()){
Object o = iterator.next(); /*<--- ИСКЛЮЧЕНИЕ ЗДЕСЬ*/
}


что сделать чтоб от него избавиться


2005-05-03 16:35:34,072 WARN [net.sf.hibernate.impl.BatcherImpl] - exception clearing maxRows/queryTimeout
java.sql.SQLException: PreparedStatement is closed.
at org.apache.commons.dbcp.DelegatingPreparedStatement.checkOpen(DelegatingPreparedStatement.java:271)
at org.apache.commons.dbcp.DelegatingPreparedStatement.getMaxRows(DelegatingPreparedStatement.java:211)
at net.sf.hibernate.impl.BatcherImpl.closeQueryStatement(BatcherImpl.java:149)
at net.sf.hibernate.impl.BatcherImpl.closeQueryStatement(BatcherImpl.java:105)
at net.sf.hibernate.impl.IteratorImpl.close(IteratorImpl.java:72)
at net.sf.hibernate.impl.IteratorImpl.postNext(IteratorImpl.java:88)
at net.sf.hibernate.impl.IteratorImpl.next(IteratorImpl.java:127)
at hiberdata.LinkcheckerImp1.createComboboxEditionsByWhereExpression(LinkcheckerImp1.java:234)
at processing.configuraton.ConfigurationModelCreater.create(ConfigurationModelCreater.java:46)
at controller.ConfigurationDefinitionController.handleRequest(ConfigurationDefinitionController.java:69)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:675)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:623)
at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:384)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
...
Рейтинг: 0 / 0
03.05.2005, 14:30
    #33046229
Steppenwulf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
getHibernateTemplate() - это что такое??
...
Рейтинг: 0 / 0
03.05.2005, 14:46
    #33046269
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
SteppenwulfgetHibernateTemplate() - это что такое??

Это в спринге фича такая.

Пусть на его месте session будет:

Iterator iterator = session.iterate(query);
while (iterator .hasNext()){
Object o = iterator.next(); /*<--- ИСКЛЮЧЕНИЕ ЗДЕСЬ*/
}
...
Рейтинг: 0 / 0
03.05.2005, 14:59
    #33046300
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
Тогда вопрос другой.

Рассмотрим DBCP томката.

http://]http://jakarta.apache.org/commons/dbcp/apidocs/index.html

Есть класс:

DelegatingPreparedStatement

с методами:

void setMaxRows(int max)

void setQueryTimeout(int seconds)

Можно ли прописать значения max, и seconds в xml - конфиге (web-xml томката или в server.xml)
...
Рейтинг: 0 / 0
03.05.2005, 15:56
    #33046436
Steppenwulf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
2 Alexey Turn

ясно
посмотрите в исходном коде hibernate
судя по exception, Вы используете hibernate 2 версии
класс BatcherImpl, метод closeQueryStatement
в нем видим, что вызываются методы интерфейса PreparedStatement, которые могут быть не реализованы в некоторых драйверах jdbc, например, если память мне не изменяет, ps.getMaxRows() не работает в jayBird ("not implemented yet"). Так что возможно, дело в jdbc-драйвере.

Прописать эти параметры в xml нельзя.

В любом случае этот exception не должен критически повлиять на работу приложения, просто добавляется запись об ошибке в лог.
...
Рейтинг: 0 / 0
03.05.2005, 16:29
    #33046547
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
хм.. допустим у меня есть запрос "select cat from Cat as cat"
И мне нужно результаты этого запроса доставить на уровень представления.
то есть отобразить в List особым способом.

Я пишу класс Combobox, который обертывает List и в котором есть метод addOption(String id, String value, String selected);

Теперь у меня есть 2 способа отобразить в Combobox:

1)
Combobox c = new Combobox();

List listCats = session.find("select cat from Cat as cat");

for (int i=0;i<listCats.size();i++){
Cat cat = (Cat) listCats.get(i);
c.addOption(new Option(cat.getId(),cat.getValue,cat.getSelected()));
}
2)

Combobox c = new Combobox();

Iterator listCats = session.iterate("select cat from Cat as cat");

while (listCats.hasNext()){
Cat cat = (Cat) listCats.next();
c.addOption(new Option(cat.getId(),cat.getValue,cat.getSelected()));
}

Второй способ у меня не получается.
А первый работает медленно, потому что мы формируем листы дважды.

Какие есть выходы в этом случае? Использовать Native sql?
...
Рейтинг: 0 / 0
03.05.2005, 16:51
    #33046618
Steppenwulf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
почему бы не использовать session.createFilter?
...
Рейтинг: 0 / 0
04.05.2005, 08:04
    #33047224
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
createFilter
public Query createFilter(Object collection,
String queryString)
throws HibernateException

Create a new instance of Query for the given collection and filter string.
(Создает новый экземпляр запроса для данной коллекции и строки фильтра)

Parameters:
collection - a persistent collection
queryString - a Hibernate query
Returns:
Query
Throws:
HibernateException

А можно поподробней как это может мне помочь?
Пример можно?
...
Рейтинг: 0 / 0
04.05.2005, 22:02
    #33049228
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
Была такая же ошибка ... Ничего путнего кроме как воспользоваться
getHibernateTemplate().find(query).iterator()
в голову не пришло ...
Зато так - все нормально
...
Рейтинг: 0 / 0
05.05.2005, 08:58
    #33049509
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, итератор, непонятное исключение.
Я нашел ответ на этот вопрос вчера буквально.
Почитал spring API:
И вот что там написано:

public class HibernateTemplate
extends HibernateAccessor
implements HibernateOperations

Note that operations that return an Iterator (i.e. iterate) are supposed to be used within Spring-driven or JTA-driven transactions (with HibernateTransactionManager, JtaTransactionManager, or EJB CMT). Else, the Iterator won't be able to read results from its ResultSet anymore, as the underlying Hibernate Session will already have been closed.

Lazy loading will also just work with an open Hibernate Session, either within a transaction or within OpenSessionInViewFilter/Interceptor. Furthermore, some operations just make sense within transactions, for example: contains, evict, lock, flush, clear.

Впринципе понятно, несмотря на мой англиский, но был бы благодарен тому, кто это прокомментирует.

А действие find(query).iterator() для меня смысла не имеет, так как по листу я могу тем же for пробежать.. да чем угодно.

Главной проблемой стояла производительность, т.е. я не хотел переколбасивать один лист в другой.

Я решил это следующим образом: просто оборачиваю полученный find(query) List в value object, который будет отображаться на jsp.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, итератор, непонятное исключение. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]