Issue #841 has been reported by Harald Strack.
----------------------------------------
Feature #841: Running LSC/Ibatis with DBCP
http://tools.lsc-project.org/issues/841
Author: Harald Strack
Status: New
Priority: Normal
Assigned to: Clément OUDOT
Category: Documentation
Target version: 2.2
h2. Problem
* When running LSC in embedded mode, the @SIMPLE@ datasource of Ibatis causes
synchronisations to fail if the application idles too long or no syncs
happening for while (database servers tend to close connections after a while
and LSC/Ibatis does not recognize this)
<pre>
2016-03-03 06:43:21.922 - DEBUG [org.lsc.service.AbstractJdbcService:231] -
[Thread-59:] -
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Communications link failure during rollback(). Transaction resolution unknown.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Communications link failure during rollback(). Transaction resolution unknown.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) ~[na:1.6.0_29]
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
~[na:1.6.0_29]
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
~[na:1.6.0_29]
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
~[na:1.6.0_29]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.Util.getInstance(Util.java:360)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4606)
~[mysql-connector-java-5.1.34.jar:5.1.34]
at
com.ibatis.common.jdbc.SimpleDataSource.popConnection(SimpleDataSource.java:629)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.common.jdbc.SimpleDataSource.getConnection(SimpleDataSource.java:222)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.init(JdbcTransaction.java:48)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:89)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:94)
~[ibatis-sqlmap-2.3.4.726.jar:na]
at
org.lsc.service.AbstractJdbcService.getBean(AbstractJdbcService.java:204)
~[lsc-core-2.1trunk-SSYSTEMS.jar:na]
at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:694)
[lsc-core-2.1trunk-SSYSTEMS.jar:na]
at org.lsc.SimpleSynchronize.launchById(SimpleSynchronize.java:365)
[lsc-core-2.1trunk-SSYSTEMS.jar:na]
at de.ssystems.idm.LscServlet.syncById(LscServlet.java:266)
[loginhandler-2.4.4.jar:na]
at de.ssystems.idm.LscSync.run(LscSync.java:47)
[loginhandler-2.4.4.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_29]
</pre>
* Only the first synchronisation fails the subsequent synchronisations will
work again
* This seems to be a problem of the @com.ibatis.common.jdbc.SimpleDataSource@
h2. Solution
* Using DBCP as datasource for ibatis seems to resolve the issue
* Conifguration in @sql-map-config.xml@:
<pre>
<transactionManager type="JDBC">
<dataSource type="DBCP">
<property value="${driver}" name="JDBC.Driver" />
<property value="${url}" name="JDBC.ConnectionURL" />
<property value="${username}" name="JDBC.Username" />
<property value="${password}" name="JDBC.Password" />
<property value="150" name="Pool.MaximumActiveConnections" />
<property value="5" name="Pool.MaximumIdleConnections" />
<property value="2000" name="Pool.MaximumWait" />
<property name="Pool.ValidationQuery" value="SELECT 1" />
<!-- testOnBorrow ? -->
<property name="Pool.LogAbandoned" value="true" />
<property name="Pool.RemoveAbandonedTimeout" value="1000" />
<property name="Pool.RemoveAbandoned" value="true" />
</dataSource>
</transactionManager>
</pre>
* Additional maven dependency:
<pre>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
</pre>
* I propose to add the configuration to the example file with a small comment
regarding running LSC in an embedded mode
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://tools.lsc-project.org/my/account
_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org
lsc-dev mailing list
[email protected]
http://lists.lsc-project.org/listinfo/lsc-dev