JBoss Hibernate Datenbank-Timeout

  • Themenstarter Themenstarter egon123
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
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):

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
 
Ups, 'tschuldigung. Wusste halt nich so ganz genau, wohin mit meiner Frage.
 
Eventuell mal versuchen an die Datenbankadresse autoReconnect=true anhängen.

Also z.B.

jdbc:mysql://localhost:3306/MyDB?autoReconnect=true

In der hibernate.cfg.xml müsstest du auch irgendwo ein Timeout anpassen können. Musst mal die Hibernate-Docu durchstöbern..
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben