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)