JBOSS Hibernate Datenbank-Timeout

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/ExporterSessionFacade

performExport
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

Hi Victor,

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

sieht für mich danach aus, als wenn MaxDB dicht gemacht hätte und Hibernate vor verschlossenen Türen steht. Feierabend. Guck mal in MaxDB, wielange die so offen haben (Timeout für Transaktionen).

Alles Gute wünscht
… Michael