Author: gnodet
Date: Tue Jan 20 14:39:42 2015
New Revision: 1653259

URL: http://svn.apache.org/r1653259
Log:
[ARIES-1287] Forcing auto-commit on Oracle JDBC connection that is still part 
of a transaction breaks transactional behavior

Modified:
    
aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADataSourceMCFFactory.java

Modified: 
aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADataSourceMCFFactory.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADataSourceMCFFactory.java?rev=1653259&r1=1653258&r2=1653259&view=diff
==============================================================================
--- 
aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADataSourceMCFFactory.java
 (original)
+++ 
aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADataSourceMCFFactory.java
 Tue Jan 20 14:39:42 2015
@@ -25,11 +25,15 @@ import org.tranql.connector.NoExceptions
 import org.tranql.connector.jdbc.AbstractXADataSourceMCF;
 import org.tranql.connector.jdbc.ConfigurableSQLStateExceptionSorter;
 import org.tranql.connector.jdbc.KnownSQLStateExceptionSorter;
+import org.tranql.connector.jdbc.ManagedXAConnection;
 
 import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.ManagedConnection;
 import javax.resource.spi.ManagedConnectionFactory;
 import javax.resource.spi.ResourceAdapterInternalException;
 import javax.resource.spi.TransactionSupport;
+import javax.security.auth.Subject;
 import javax.sql.XAConnection;
 import javax.sql.XADataSource;
 
@@ -64,6 +68,26 @@ public class XADataSourceMCFFactory exte
         }
 
         @Override
+        public ManagedConnection createManagedConnection(Subject subject, 
ConnectionRequestInfo connectionRequestInfo) throws ResourceException {
+            CredentialExtractor credentialExtractor = new 
CredentialExtractor(subject, connectionRequestInfo, this);
+
+            XAConnection sqlConnection = 
getPhysicalConnection(credentialExtractor);
+            try {
+                return new ManagedXAConnection(this, sqlConnection, 
credentialExtractor, exceptionSorter) {
+                    @Override
+                    public void cleanup() throws ResourceException {
+                        // ARIES-1279 - Transaction does not work on error 
SQLException
+                        // that's why we don't call super.cleanup() which 
calls con.setAutocommit(true)
+                        // super.cleanup();
+                        dissociateConnections();
+                    }
+                };
+            } catch (SQLException e) {
+                throw new ResourceAdapterInternalException("Could not set up 
ManagedXAConnection", e);
+            }
+        }
+
+        @Override
         protected XAConnection getPhysicalConnection(CredentialExtractor 
credentialExtractor) throws ResourceException {
             try {
                 String userName = credentialExtractor.getUserName();


Reply via email to