Author: boisvert
Date: Fri Mar 27 23:12:49 2009
New Revision: 759388

URL: http://svn.apache.org/viewvc?rev=759388&view=rev
Log:
Refactored database isolation-setting code; SimpleScheduler JdbcDelegate now 
sets isolation too

Added:
    ode/trunk/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
Modified:
    
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
    
ode/trunk/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java

Modified: 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java?rev=759388&r1=759387&r2=759388&view=diff
==============================================================================
--- 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
 (original)
+++ 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
 Fri Mar 27 23:12:49 2009
@@ -23,27 +23,25 @@
 import java.sql.SQLException;
 import java.util.Properties;
 
+import org.apache.ode.utils.DbIsolation;                                       
                                                                                
          
+
 import org.hibernate.HibernateException;
 import org.hibernate.connection.ConnectionProvider;
 
 public class DataSourceConnectionProvider implements ConnectionProvider {
 
   private Properties _props;
-  private int _isolationLevel;
   
   public DataSourceConnectionProvider() {
   }
   
   public void configure(Properties props) throws HibernateException {
     _props = props;
-    _isolationLevel = 
Integer.parseInt(System.getProperty("ode.connection.isolation", "0"));
   }
 
   public Connection getConnection() throws SQLException {
     Connection c = SessionManager.getConnection(_props);
-    if (_isolationLevel != 0) {
-        c.setTransactionIsolation(_isolationLevel);
-    }
+    DbIsolation.setIsolationLevel(c);                                          
                                                                                
          
     return c;
   }
 

Modified: 
ode/trunk/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java?rev=759388&r1=759387&r2=759388&view=diff
==============================================================================
--- 
ode/trunk/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
 (original)
+++ 
ode/trunk/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
 Fri Mar 27 23:12:49 2009
@@ -33,6 +33,8 @@
 
 import javax.sql.DataSource;
 
+import org.apache.ode.utils.DbIsolation;                                       
                                                                                
          
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.utils.StreamUtils;
@@ -250,9 +252,11 @@
         }
     }
 
-    private Connection getConnection() throws SQLException {
-        return _ds.getConnection();
-    }
+    private Connection getConnection() throws SQLException {                   
                                                                                
          
+        Connection c = _ds.getConnection();                                    
                                                                                
          
+        DbIsolation.setIsolationLevel(c);                                      
                                                                                
          
+        return c;                                                              
                                                                                
          
+    }                                                                          
                                                                                
          
 
     private int asInteger(boolean value) {
         return (value ? 1 : 0);

Added: ode/trunk/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/DbIsolation.java?rev=759388&view=auto
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/DbIsolation.java (added)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/DbIsolation.java Fri Mar 
27 23:12:49 2009
@@ -0,0 +1,49 @@
+package org.apache.ode.utils;                                                  
                                                                                
          
+                                                                               
                                                                                
          
+import java.sql.Connection;                                                    
                                                                                
          
+import java.sql.SQLException;                                                  
                                                                                
          
+import javax.sql.DataSource;                                                   
                                                                                
          
+                                                                               
                                                                                
          
+import org.apache.commons.logging.Log;                                         
                                                                                
          
+import org.apache.commons.logging.LogFactory;                                  
                                                                                
          
+                                                                               
                                                                                
          
+/**                                                                            
                                                                                
          
+ * Utility to set Ode-specific isolation level on DataSource connections.
+ */
+public class DbIsolation {
+    private static final Log __log = LogFactory.getLog(DbIsolation.class);
+    private static int _isolationLevel;
+
+    // Read Ode-specific isolation level configuration
+    static {
+        try {
+            _isolationLevel = 
Integer.parseInt(System.getProperty("ode.connection.isolation", "2"));
+        } catch (Throwable t) {
+            __log.error("Error while reading 'ode.connnection.isolation' 
property", t);
+        }
+    }
+
+    public static int getOdeIsolationLevel() {
+        return _isolationLevel;
+    }
+
+    public static void setOdeIsolationLevel(int isolationLevel) {
+        _isolationLevel = isolationLevel;
+    }
+
+    /**
+     * Set Ode-specific isolation level on the connection, if needed.
+     */
+    public static void setIsolationLevel(Connection c) throws SQLException {
+        try {
+            if (_isolationLevel != 0 && c.getTransactionIsolation() != 
_isolationLevel) {
+                if (__log.isDebugEnabled()) __log.debug("Set isolation level 
to "+_isolationLevel);
+                c.setTransactionIsolation(_isolationLevel);
+            }
+        } catch (Exception e) {
+            if (__log.isDebugEnabled())
+                __log.debug("Error while setting isolation level to 
"+_isolationLevel, e);
+        }
+    }
+
+}


Reply via email to