E
egon123
Gast
Hallo zusammen,
ich habe folgendes Problem und weiß nicht mehr weiter:
Umgebung:
Ich habe eine J2EE-Anwendung mit Hibernate-Unterstützung auf einem JBOSS 4.0.1 und einer MaxDB laufen.
Die Transaktionen laufen Container-managed und das klappt alles soweit ganz gut.
Problem:
Jetzt habe ich eine Methode "performExport", die mittels Hibernate zu Beginn Daten aus der Datenbank ausliest,
anschließend lange Zeit (u.U. mehr als 30 Minuten) Berechnungen durchführt und am Ende wieder Daten in die
Datenbank hineinschreibt.
Das Problem ist, dass ich am Ende, wenn oben genannte Berechnungen etwa 10 Minuten oder länger dauern und ich
dann die Daten in die DB zurückschreiben möchte, ich diesen Timeout-Error bekomme (vollständiger Stacktrace unten):
Bisherige Lösungsversuche
Um den Timeout zu verändern habe ich bereits im JBOSS in der conf/jboss-service.xml den Timeout der
TransactionManagerService-MBean hochgesetzt (siehe folgenden Code). Ohne Erfolg.
In der jboss.xml meiner Anwendung habe ich den Transaction-Timeout der entsprechenden Methode geändert und den
Transaktionstypen dieser Methode auf "RequiresNew" gesetzt (siehe folgenden Code). Ebenfalls ohne Erfolg.
Ich hab mit Werten rumgespielt, dutzende verschiedene Einstellungen getestet, ohne den geringsten Erfolg.
Bitte helft, weil ich am Ende bin mit meinem Latein.
Ich bin für jeden Hinweis dankbar,
egon123
Kompletter Stacktrace des Fehlers
2007-07-12 15:29:35,187 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: -708, SQLState: 08000
2007-07-12 15:29:35,187 ERROR [org.hibernate.util.JDBCExceptionReporter] [-708] Timeout
2007-07-12 15:29:35,187 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.JDBCConnectionException: could not update: [package.meines.Tools.Klassenname#722]
at rg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at rg.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at rg.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2221)
at rg.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2117)
at rg.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2373)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:905)
at package.meines.Tools.dao.HB_DefaultDAO.update(HB_DefaultDAO.java:124)
at package.meines.Tools.ExportManager.performExport(ExportManager.java:251)
at package.meines.Tools.ejb.ExporterSessionFacadeBean.startExport(ExporterSessionFacadeBean.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:51)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:870)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
at sun.reflect.GeneratedMethodAccessor228.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: com.sap.dbtech.jdbc.exceptions.ConnectionException: [-708] Timeout
at com.sap.dbtech.jdbc.ConnectionSapDB.execute(ConnectionSapDB.java:472)
at com.sap.dbtech.jdbc.CallableStatementSapDB.sendCommand(CallableStatementSapDB.java:1646)
at com.sap.dbtech.jdbc.StatementSapDB.sendSQL(StatementSapDB.java:783)
at com.sap.dbtech.jdbc.CallableStatementSapDB.doParse(CallableStatementSapDB.java:234)
at com.sap.dbtech.jdbc.CallableStatementSapDB.constructor(CallableStatementSapDB.java:185)
at com.sap.dbtech.jdbc.CallableStatementSapDB.<init>(CallableStatementSapDB.java:87)
at com.sap.dbtech.jdbc.ConnectionSapDB.prepareStatement(ConnectionSapDB.java:721)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:355)
at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:205)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:431)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:169)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2162)
... 51 more
ich habe folgendes Problem und weiß nicht mehr weiter:
Umgebung:
Ich habe eine J2EE-Anwendung mit Hibernate-Unterstützung auf einem JBOSS 4.0.1 und einer MaxDB laufen.
Die Transaktionen laufen Container-managed und das klappt alles soweit ganz gut.
Problem:
Jetzt habe ich eine Methode "performExport", die mittels Hibernate zu Beginn Daten aus der Datenbank ausliest,
anschließend lange Zeit (u.U. mehr als 30 Minuten) Berechnungen durchführt und am Ende wieder Daten in die
Datenbank hineinschreibt.
Das Problem ist, dass ich am Ende, wenn oben genannte Berechnungen etwa 10 Minuten oder länger dauern und ich
dann die Daten in die DB zurückschreiben möchte, ich diesen Timeout-Error bekomme (vollständiger Stacktrace unten):
Code:
2007-07-12 15:29:35,187 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: -708, SQLState: 08000
2007-07-12 15:29:35,187 ERROR [org.hibernate.util.JDBCExceptionReporter] [-708] Timeout
Bisherige Lösungsversuche
Um den Timeout zu verändern habe ich bereits im JBOSS in der conf/jboss-service.xml den Timeout der
TransactionManagerService-MBean hochgesetzt (siehe folgenden Code). Ohne Erfolg.
Code:
<mbean code="org.jboss.tm.TransactionManagerService" name="jboss:service=TransactionManager" xmbean-dd="resource:xmdesc/TransactionManagerService-xmbean.xml">
<attribute name="TransactionTimeout">36000</attribute>
<attribute name="GlobalIdsEnabled">true</attribute>
<depends optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
</mbean>
In der jboss.xml meiner Anwendung habe ich den Transaction-Timeout der entsprechenden Methode geändert und den
Transaktionstypen dieser Methode auf "RequiresNew" gesetzt (siehe folgenden Code). Ebenfalls ohne Erfolg.
Code:
<session>
<ejb-name>ExporterSessionFacade</ejb-name>
<jndi-name>ejb/ExporterSessionFacade</jndi-name>
<method-attributes>
<method>
<method-name>performExport</method-name>
<transaction-timeout>36000</transaction-timeout>
</method>
</method-attributes>
</session>
Ich hab mit Werten rumgespielt, dutzende verschiedene Einstellungen getestet, ohne den geringsten Erfolg.
Bitte helft, weil ich am Ende bin mit meinem Latein.
Ich bin für jeden Hinweis dankbar,
egon123
Kompletter Stacktrace des Fehlers
2007-07-12 15:29:35,187 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: -708, SQLState: 08000
2007-07-12 15:29:35,187 ERROR [org.hibernate.util.JDBCExceptionReporter] [-708] Timeout
2007-07-12 15:29:35,187 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.JDBCConnectionException: could not update: [package.meines.Tools.Klassenname#722]
at rg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at rg.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at rg.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2221)
at rg.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2117)
at rg.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2373)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:905)
at package.meines.Tools.dao.HB_DefaultDAO.update(HB_DefaultDAO.java:124)
at package.meines.Tools.ExportManager.performExport(ExportManager.java:251)
at package.meines.Tools.ejb.ExporterSessionFacadeBean.startExport(ExporterSessionFacadeBean.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:51)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:870)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
at sun.reflect.GeneratedMethodAccessor228.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: com.sap.dbtech.jdbc.exceptions.ConnectionException: [-708] Timeout
at com.sap.dbtech.jdbc.ConnectionSapDB.execute(ConnectionSapDB.java:472)
at com.sap.dbtech.jdbc.CallableStatementSapDB.sendCommand(CallableStatementSapDB.java:1646)
at com.sap.dbtech.jdbc.StatementSapDB.sendSQL(StatementSapDB.java:783)
at com.sap.dbtech.jdbc.CallableStatementSapDB.doParse(CallableStatementSapDB.java:234)
at com.sap.dbtech.jdbc.CallableStatementSapDB.constructor(CallableStatementSapDB.java:185)
at com.sap.dbtech.jdbc.CallableStatementSapDB.<init>(CallableStatementSapDB.java:87)
at com.sap.dbtech.jdbc.ConnectionSapDB.prepareStatement(ConnectionSapDB.java:721)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:355)
at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:205)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:431)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:169)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2162)
... 51 more