Search the FirstSpirit Knowledge Base
In unserem Projekt existiert eine MySQL-DB, die von unserem Frontend gefüttert wird. DIese soll rein zur Ansicht (Auswertung der Inhalte) im CMS eingebunden werden. Die Einbindung erfolgt analog zur Dokumentation und funktioniert soweit prima.
Leider bekommen wir beim Zugriff regelmässig eine Runtime Exception
cannot shutdown, close on connection failed - error code: 0, message: Communications link failure during rollback(). Transaction resolution unknown
Diese tritt anscheined beim Ablauf des server-seitigen Timeouts von 60s (vorgegeben durch die Haus-IT) auf.
Ein einfaches Reload behebt das Problem sofort. Nach der nächsten abgelaufenen Minute steht der Benutzer allerdings wieder vor der Fehlermeldung.
Wir verwenden derzeit doe folgende Konfiguration (mit Experiment des autoReconnect-URL-Parameters, der anscheinend nix bringt):
jdbc.CONNECTIONTIMEOUT=55
jdbc.DRIVER=com.mysql.jdbc.Driver
jdbc.PASSWORD=---------------
jdbc.POOLTIMEOUT=55
jdbc.SCHEMA=mysql_db
jdbc.URL=jdbc:mysql://mysqlhost:3306/mysql_db?autoReconnect=true
jdbc.USER=mysql_user
jdbc.layerclass=de.espirit.or.impl.mysql.MySQLLayer
Hier noch der komplette Stacktrace der Fehlermeldung:
java.lang.RuntimeException: cannot shutdown, close on connection failed - error code: 0, message: Communications link failure during rollback(). Transaction resolution unknown.
at de.espirit.or.impl.connection.ConnectionInvocationHandler.shutdown(ConnectionInvocationHandler.java:94)
at de.espirit.or.impl.connection.ConnectionInvocationHandler.invoke(ConnectionInvocationHandler.java:43)
at $Proxy15.shutdown(Unknown Source)
at de.espirit.or.impl.connection.DBConnectionManager.getConnection(DBConnectionManager.java:300)
at de.espirit.or.impl.connection.DBConnectionManager.getConnection(DBConnectionManager.java:209)
at de.espirit.or.impl.AbstractSessionHandler.executeQuery(AbstractSessionHandler.java:236)
at de.espirit.firstspirit.content.ContentManagerImpl.executeQuery(ContentManagerImpl.java:535)
at sun.reflect.GeneratedMethodAccessor252.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:67)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4757)
at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4352)
at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1601)
at de.espirit.or.impl.connection.ConnectionInvocationHandler.shutdown(ConnectionInvocationHandler.java:92)
at de.espirit.or.impl.connection.ConnectionInvocationHandler.invoke(ConnectionInvocationHandler.java:43)
at $Proxy15.shutdown(Unknown Source)
at de.espirit.or.impl.connection.DBConnectionManager.getConnection(DBConnectionManager.java:300)
at de.espirit.or.impl.connection.DBConnectionManager.getConnection(DBConnectionManager.java:209)
at de.espirit.or.impl.AbstractSessionHandler.executeQuery(AbstractSessionHandler.java:236)
at de.espirit.firstspirit.content.ContentManagerImpl.executeQuery(ContentManagerImpl.java:535)
at sun.reflect.GeneratedMethodAccessor252.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:67)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)
at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)
at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)
at de.espirit.firstspirit.server.$Proxy33.executeQuery(Unknown Source)
at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.executeQuery(SessionHandlerImpl.java:73)
at de.espirit.or.impl.AbstractSession.executeQuery(AbstractSession.java:248)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentTable.execute(ContentTable.java:719)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentTable.execute(ContentTable.java:711)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentTable.refresh(ContentTable.java:615)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentViewComponent.refreshTable(ContentViewComponent.java:356)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentViewComponent.<init>(ContentViewComponent.java:191)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentViewComponent.<init>(ContentViewComponent.java:136)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.CSContentView$3.<init>(CSContentView.java:349)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.CSContentView.getCurrentViewComponent(CSContentView.java:338)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.CSContentView.constructComponent(CSContentView.java:230)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getViewableComponent(AbstractAccessTabbedView.java:338)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getComponent(AbstractAccessTabbedView.java:193)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.access$100(AbstractAccessTabbedView.java:50)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$1.tabSelected(AbstractAccessTabbedView.java:152)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel$2.invoke(AbstractAccessTabbedView.java:617)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel$2.invoke(AbstractAccessTabbedView.java:616)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.notifyListeners(AbstractAccessTabbedView.java:669)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.notifyTabSelected(AbstractAccessTabbedView.java:615)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.selectTab(AbstractAccessTabbedView.java:605)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView$SubTabModel.select(AbstractAccessTabbedView.java:558)
at de.espirit.firstspirit.client.gui.tree.store.AbstractAccessTabbedView.getComponent(AbstractAccessTabbedView.java:232)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.CSContentView.getComponent(CSContentView.java:631)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.getView(AbstractGuiStoreElement.java:1071)
at de.espirit.firstspirit.client.gui.tabbing.ElementTabConfiguration$ElementView.getViewComponent(ElementTabConfiguration.java:261)
at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.getRealComponent(TabContentView.java:398)
at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.call(TabContentView.java:371)
at de.espirit.firstspirit.client.gui.tabbing.TabContentView$ComponentFactory.call(TabContentView.java:251)
at de.espirit.firstspirit.client.gui.util.GuiUtil$CallableWrapper.call(GuiUtil.java:1508)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
Hallo,
ich habe gerade dieses offene Posting entdeckt und möchte nachfragen, ob meine letzte Antwort in dem entsprechenden Helpdesk-Ticket evtl. doch das Problem doch gelöst hat?
Das würde den anderen Community-Usern zukünftig evtl. auch helfen.
Gruß,
Walter.
############################################
Bitte fügen Sie in den Layereigenschaften noch folgende Zeilen hinzu:
--------------------
jdbc.CHECKSTATEMENT=select * from TABLE_NAME
jdbc.CONNECTIONRETRY=3
jdbc.CONNECTIONRETRYCYCLE=500
--------------------
wobei Sie TABLE_NAME durch einen gültigen Tabellennamen (ggf. mit dem Schemanamen davor, also p111_222.mytablename) ersetzen, z.B. durch "transaction_counter".
Spätestens nach einem FS-Serverneustart müsste die obere Abfrage Ihre DB "warmhalten", so dass die Verbindung zum FS-Server von der DB nicht geschlossen wird.
############################################
Leider hat der vielversprechende Ansatz nicht geholfen und ich hatte nicht die Zeit gefunden, dass Ticket zu reaktivieren (wir hatten einen Launch und die dabei nie zu vermeidende Anstrengung).
Kann es sein, dass der Workaround vielleicht einfach nicht mit der etwas älteren FS4.2-Version (468) funktioniert? Ich hoffe, das Problem demnächst auf unserem FS5-System gegentesten zu können.
Hallo Stefan,
habt ihr das Problem immer noch?
Falls ja, versuch doch mal die beiden Parameter jdbc.POOLTIMEOUT und jdbc.CONNECTIONTIMEOUT etwas runter, vielleicht auf 30.
Viele Grüße
Thorsten
Hallo,
da es hier keine weitere Antwort auf Thorstens Frage gab, vermute ich, dass sich die Frage inzwischen gelöst hat und markiere sie daher als beantwortet.
Sollten dennoch weitere Fragen bestehen, bitte noch einmal melden.
Viele Grüße
Michaela
Hi zusammen,
das Problem besteht weiterhin, die angesprochenen Parameter wurden bereits in Zusammenarbeit mit dem Helpdesk diverse Male ausprobiert.
Im Moment werden Reloads als Workaround akzeptiert. Die Redakteure haben halt die Minute, um die richtige Umfrage auszuwählen.
Der Thread kann gerne geschlossen werden oder so, aber bitte nicht als beantwortet.
Viele Grüße
Stefan