Bazı garip bir sorun var.Bir bağlantı havuzu kullanarak bir süre sonra otomatik olarak değişiklik TRUE değişiklikleri
DB Bağlantıları oluşturmak ve yönetmek için bir Havuz kullanıyorum, DefaultAutocommit
seçeneğini FALSE
olarak ayarladım.
Fakat bir süre sonra
bir hata oluşur ve birrollback
İstisna atılır çağrıldığında:
Can't call rollback when autocommit=true
yeni DataSource oluşturulacaktır olarak JBoss sorunu çözecektir yeniden başlatılacaktır. İşte
benim Datasource oluşturmak nasıl:
protected DataSource getDataSource(String driverClassName, String dbUrl, String dbUser, String dbPwd) {
PoolProperties poolProperties = new PoolProperties();
poolProperties.setUrl(dbUrl);
poolProperties.setDriverClassName(driverClassName);
poolProperties.setUsername(dbUser);
poolProperties.setPassword(dbPwd);
poolProperties.setDefaultAutoCommit(false);
poolProperties.setTestWhileIdle(false);
poolProperties.setTestOnBorrow(true);
poolProperties.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
poolProperties.setValidationQuery("SELECT 1");
poolProperties.setTestOnReturn(false);
poolProperties.setLogAbandoned(false);
poolProperties.setRemoveAbandoned(true);
poolProperties.setRemoveAbandonedTimeout(20);
poolProperties.setMaxActive(100);
poolProperties.setInitialSize(10);
poolProperties.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
return new DataSource(poolProperties);
}
Ve bağlantıları olsun nasıl:
xxx.getDataSource().getConnection();
Henüz deneyin vermedi
ama benim ilk çağrı özdevinimli doğrudan zorlamak olacaktır setAutoCommit(false)
kullanarak bağlantı.
poolProperties.setDefaultAutoCommit(false);
'un neden işi durdurduğunu anlamıyorum.
Yığın izleme: Yani burada
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Can't call rollback when autocommit=true
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:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4805)
at sun.reflect.GeneratedMethodAccessor302.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:125)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94)
at org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94)
at org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:140)
at $Proxy333.rollback(Unknown Source)
sen verebilir misiniz hata yığın izleme? –
Büyük olasılıkla bağlantı havuzunda veya MySQL JDBC sürücüsündeki bir hata. Bunun dışında, bu sorunun cevapsız olduğunu düşünüyorum. –
@MarkRotteveel Peki, böyle bir hatanın izini bulamadım. Ancak, özniteliği doğrudan bağlantıya zorlamaya çalışacağız. Bu işe yararsa başkalarına yardımcı olabilir. –