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