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