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);


Reply via email to