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):
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.
36000
true
jboss:service=XidFactory
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.
ExporterSessionFacade
ejb/ExporterSessionFacadeperformExport
36000
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,
victor
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 :org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at :org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at :org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2221)
at :org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2117)
at :org.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.(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