Author: cmueller
Date: Wed Apr 27 20:49:06 2011
New Revision: 1097232
URL: http://svn.apache.org/viewvc?rev=1097232&view=rev
Log:
CAMEL-3803: Component camel-jdbc does not support Transactions
Modified:
camel/trunk/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
Modified:
camel/trunk/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java?rev=1097232&r1=1097231&r2=1097232&view=diff
==============================================================================
---
camel/trunk/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
(original)
+++
camel/trunk/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
Wed Apr 27 20:49:06 2011
@@ -62,9 +62,11 @@ public class JdbcProducer extends Defaul
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
+ Boolean autoCommit = null;
try {
conn = dataSource.getConnection();
+ autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
stmt = conn.createStatement();
@@ -95,6 +97,7 @@ public class JdbcProducer extends Defaul
} finally {
closeQuietly(rs);
closeQuietly(stmt);
+ resetAutoCommit(conn, autoCommit);
closeQuietly(conn);
}
@@ -122,6 +125,16 @@ public class JdbcProducer extends Defaul
}
}
+ private void resetAutoCommit(Connection con, Boolean autoCommit) {
+ if (con != null && autoCommit != null) {
+ try{
+ con.setAutoCommit(autoCommit);
+ } catch (SQLException sqle){
+ LOG.warn("Error by resetting auto commit to its original
value: " + sqle, sqle);
+ }
+ }
+ }
+
private void closeQuietly(Connection con) {
if (con != null) {
try{
Modified:
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java?rev=1097232&r1=1097231&r2=1097232&view=diff
==============================================================================
---
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
(original)
+++
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
Wed Apr 27 20:49:06 2011
@@ -16,8 +16,10 @@
*/
package org.apache.camel.component.jdbc;
+import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
+import java.util.Properties;
import javax.sql.DataSource;
@@ -32,6 +34,7 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.jdbc.datasource.SingleConnectionDataSource;
public class JdbcOptionsTest extends CamelTestSupport {
private String driverClass = "org.hsqldb.jdbcDriver";
@@ -56,7 +59,7 @@ public class JdbcOptionsTest extends Cam
@SuppressWarnings("rawtypes")
@Test
- public void testInsertCommitO() throws Exception {
+ public void testInsertCommit() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:resultTx");
mock.expectedMessageCount(1);
// insert 2 recs into table
@@ -116,6 +119,19 @@ public class JdbcOptionsTest extends Cam
e.getCause().getMessage());
}
}
+
+ @Test
+ public void testResettingAutoCommitOption() throws Exception {
+ Connection connection = ds.getConnection();
+ assertTrue(connection.getAutoCommit());
+ connection.close();
+
+ template.sendBody("direct:retrieve", "select * from customer");
+
+ connection = ds.getConnection();
+ assertTrue(connection.getAutoCommit());
+ connection.close();
+ }
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry reg = super.createRegistry();
@@ -135,8 +151,12 @@ public class JdbcOptionsTest extends Cam
@Before
public void setUp() throws Exception {
- DriverManagerDataSource dataSource = new DriverManagerDataSource(url,
user, password);
+ Properties connectionProperties = new Properties();
+ connectionProperties.put("autoCommit", Boolean.TRUE);
+
+ DriverManagerDataSource dataSource = new
SingleConnectionDataSource(url, user, password, true);
dataSource.setDriverClassName(driverClass);
+ dataSource.setConnectionProperties(connectionProperties);
ds = dataSource;
JdbcTemplate jdbc = new JdbcTemplate(ds);