Author: boisvert
Date: Fri Mar 27 23:06:08 2009
New Revision: 759384

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

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

Modified: 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java?rev=759384&r1=759383&r2=759384&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
 Fri Mar 27 23:06:08 2009
@@ -23,27 +23,26 @@
 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", "2"));
   }
 
   public Connection getConnection() throws SQLException {
     Connection c = SessionManager.getConnection(_props);
-    if (_isolationLevel != 0 && c.getTransactionIsolation() != 
_isolationLevel) {
-        c.setTransactionIsolation(_isolationLevel);
-    }
+    DbIsolation.setIsolationLevel(c);
     return c;
   }
 

Modified: 
ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java?rev=759384&r1=759383&r2=759384&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
 Fri Mar 27 23:06:08 2009
@@ -35,6 +35,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.utils.DbIsolation;
 import org.apache.ode.utils.StreamUtils;
 
 /**
@@ -244,7 +245,9 @@
     }
 
     private Connection getConnection() throws SQLException {
-        return _ds.getConnection();
+        Connection c = _ds.getConnection();
+        DbIsolation.setIsolationLevel(c);
+        return c;
     }
 
     private int asInteger(boolean value) {

Added: 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DbIsolation.java?rev=759384&view=auto
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
 (added)
+++ 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
 Fri Mar 27 23:06:08 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