|
|
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:47 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
getHibernateTemplate() - это что такое?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:30 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
SteppenwulfgetHibernateTemplate() - это что такое?? Это в спринге фича такая. Пусть на его месте session будет: Iterator iterator = session.iterate(query); while (iterator .hasNext()){ Object o = iterator.next(); /*<--- ИСКЛЮЧЕНИЕ ЗДЕСЬ*/ } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:46 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
Тогда вопрос другой. Рассмотрим 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:59 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
2 Alexey Turn ясно посмотрите в исходном коде hibernate судя по exception, Вы используете hibernate 2 версии класс BatcherImpl, метод closeQueryStatement в нем видим, что вызываются методы интерфейса PreparedStatement, которые могут быть не реализованы в некоторых драйверах jdbc, например, если память мне не изменяет, ps.getMaxRows() не работает в jayBird ("not implemented yet"). Так что возможно, дело в jdbc-драйвере. Прописать эти параметры в xml нельзя. В любом случае этот exception не должен критически повлиять на работу приложения, просто добавляется запись об ошибке в лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 15:56 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
хм.. допустим у меня есть запрос "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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 16:29 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
почему бы не использовать session.createFilter? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 16:51 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
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 А можно поподробней как это может мне помочь? Пример можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2005, 08:04 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
Была такая же ошибка ... Ничего путнего кроме как воспользоваться getHibernateTemplate().find(query).iterator() в голову не пришло ... Зато так - все нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2005, 22:02 |
|
||
|
Hibernate, итератор, непонятное исключение.
|
|||
|---|---|---|---|
|
#18+
Я нашел ответ на этот вопрос вчера буквально. Почитал 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 08:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33049509&tid=2152441]: |
0ms |
get settings: |
16ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 334ms |

| 0 / 0 |
