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

Reply via email to