You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by se...@apache.org on 2009/03/26 22:54:09 UTC

svn commit: r758880 - in /ode/branches/APACHE_ODE_1.X: ./ axis2-war/src/test/java/org/apache/ode/axis2/management/ bpel-epr/src/main/java/org/apache/ode/il/config/ bpel-store/src/main/java/org/apache/ode/store/ bpel-store/src/main/java/org/apache/ode/s...

Author: seanahn
Date: Thu Mar 26 21:54:08 2009
New Revision: 758880

URL: http://svn.apache.org/viewvc?rev=758880&view=rev
Log:
ode-564, Make the process store JTA compatible

Added:
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreTransactionProvider.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaTxMgrProvider.java
Modified:
    ode/branches/APACHE_ODE_1.X/Rakefile
    ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java
    ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnection.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnectionFactory.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java
    ode/branches/APACHE_ODE_1.X/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/DataSourceConnectionProvider.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
    ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java

Modified: ode/branches/APACHE_ODE_1.X/Rakefile
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/Rakefile?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/Rakefile (original)
+++ ode/branches/APACHE_ODE_1.X/Rakefile Thu Mar 26 21:54:08 2009
@@ -315,8 +315,8 @@
   desc "ODE Process Store"
   define "bpel-store" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
-      "dao-hibernate", "utils"),
-      COMMONS.logging, JAVAX.persistence, JAVAX.stream, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J
+      "dao-hibernate", "dao-jpa", "utils"),
+      COMMONS.logging, JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
 

Modified: ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java Thu Mar 26 21:54:08 2009
@@ -210,7 +210,7 @@
     }
 
     private void undeploy(String pakage) throws Exception {
-        // Prepare undeploy message
+    	// Prepare undeploy message
         OMNamespace depns = _factory.createOMNamespace(Namespaces.ODE_PMAPI, "deployapi");
         OMElement root = _factory.createOMElement("undeploy", depns);
         OMElement part = _factory.createOMElement("packageName", null);

Modified: ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java Thu Mar 26 21:54:08 2009
@@ -35,7 +35,6 @@
  * @author mszefler
  */
 public class OdeConfigProperties {
-
     private static final long serialVersionUID = 1L;
 
     private static final Log __log = LogFactory.getLog(OdeConfigProperties.class);
@@ -87,6 +86,8 @@
     public static final String PROP_PROCESS_HYDRATION = "process.hydration";
     
     public static final String PROP_DAOCF = "dao.factory";
+    
+    public static final String DEFAULT_TX_FACTORY_CLASS_NAME = "org.apache.ode.il.EmbeddedGeronimoFactory";
 
     private File _cfgFile;
 
@@ -229,7 +230,7 @@
     }
 
     public String getTxFactoryClass() {
-        return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, "org.apache.ode.il.EmbeddedGeronimoFactory");
+        return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, DEFAULT_TX_FACTORY_CLASS_NAME);
     }
 
     public String getEventListeners() {

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnection.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnection.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnection.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnection.java Thu Mar 26 21:54:08 2009
@@ -24,10 +24,6 @@
 /**
  */
 public interface ConfStoreConnection {
-    void begin();
-    void commit();
-    void rollback();
-    
     DeploymentUnitDAO createDeploymentUnit(String name);
 
     DeploymentUnitDAO getDeploymentUnit(String name);
@@ -39,5 +35,4 @@
     long getNextVersion();
 
     void setVersion(long version);
-    
 }

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnectionFactory.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnectionFactory.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnectionFactory.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ConfStoreConnectionFactory.java Thu Mar 26 21:54:08 2009
@@ -22,8 +22,6 @@
  * Connection factory for DB store. 
  * @author mszefler
   */
-public interface ConfStoreConnectionFactory {
-
-
+public interface ConfStoreConnectionFactory extends ProcessStoreTransactionProvider {
     ConfStoreConnection getConnection();
 }

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java Thu Mar 26 21:54:08 2009
@@ -114,23 +114,24 @@
     public ProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel) {
         this.eprContext = eprContext;
         if (ds != null) {
-            // ugly hack
-            if (persistenceType.toLowerCase().indexOf("hib") != -1)
-                _cf = new org.apache.ode.store.hib.DbConfStoreConnectionFactory(ds, props.getProperties(), createDatamodel);
-            else
-                _cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(ds, createDatamodel);
-        } else {
-            // If the datasource is not provided, then we create a HSQL-based in-memory
-            // database. Makes testing a bit simpler.
-            DataSource hsqlds = createInternalDS(new GUID().toString());
-            if ("hibernate".equalsIgnoreCase(persistenceType))
-                _cf = new org.apache.ode.store.hib.DbConfStoreConnectionFactory(hsqlds, props.getProperties(), createDatamodel);
-            else
-                _cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(hsqlds, createDatamodel);
-            _inMemDs = hsqlds;
-        }
-
-    }
+			// ugly hack
+			if (persistenceType.toLowerCase().indexOf("hib") != -1) {
+				_cf = new org.apache.ode.store.hib.DbConfStoreConnectionFactory(ds, props.getProperties(), createDatamodel, props.getTxFactoryClass());
+			} else {
+				_cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(ds, createDatamodel, props.getTxFactoryClass());
+			}
+		} else {
+			// If the datasource is not provided, then we create a HSQL-based
+			// in-memory database. Makes testing a bit simpler.
+			DataSource hsqlds = createInternalDS(new GUID().toString());
+			if ("hibernate".equalsIgnoreCase(persistenceType)) {
+				_cf = new org.apache.ode.store.hib.DbConfStoreConnectionFactory(hsqlds, props.getProperties(), createDatamodel, props.getTxFactoryClass());
+			} else {
+				_cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(hsqlds, createDatamodel, props.getTxFactoryClass());
+			}
+			_inMemDs = hsqlds;
+		}
+	}
 
     /**
      * Constructor that hardwires OpenJPA on a new in-memory database. Suitable for tests.
@@ -139,7 +140,7 @@
         this.eprContext = eprContext;
         DataSource hsqlds = createInternalDS(new GUID().toString());
         //when in memory we always create the model as we are starting from scratch
-        _cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(hsqlds, true);
+        _cf = new org.apache.ode.store.jpa.DbConfStoreConnectionFactory(hsqlds, true, OdeConfigProperties.DEFAULT_TX_FACTORY_CLASS_NAME);
         _inMemDs = hsqlds;
     }
 
@@ -704,27 +705,23 @@
     abstract class Callable<V> implements java.util.concurrent.Callable<V> {
         public V call() {
             boolean success = false;
+            // in JTA, transaction is bigger than the session
+            _cf.beginTransaction();
             ConfStoreConnection conn = getConnection();
             try {
-                conn.begin();
                 V r = call(conn);
-                conn.commit();
+                _cf.commitTransaction();
                 success = true;
                 return r;
             } finally {
                 if (!success)
                     try {
-                        conn.rollback();
+			            _cf.rollbackTransaction();
                     } catch (Exception ex) {
                         __log.error("DbError", ex);
                     }
-                try {
-                    conn.close();
-                } catch (Exception ex) {
-                    __log.error("DbError", ex);
-                }
             }
-
+         // session is closed automatically when committed or rolled back under JTA
         }
 
         abstract V call(ConfStoreConnection conn);

Added: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreTransactionProvider.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreTransactionProvider.java?rev=758880&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreTransactionProvider.java (added)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreTransactionProvider.java Thu Mar 26 21:54:08 2009
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.store;
+
+public interface ProcessStoreTransactionProvider {
+    void beginTransaction();
+    void commitTransaction();
+    void rollbackTransaction();
+}
\ No newline at end of file

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java Thu Mar 26 21:54:08 2009
@@ -26,7 +26,6 @@
 import org.hibernate.Criteria;
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
-import org.hibernate.Transaction;
 
 import javax.xml.namespace.QName;
 import java.util.Collection;
@@ -41,7 +40,6 @@
 
     private static final Log __log = LogFactory.getLog(ConfStoreConnectionHib.class);
     private Session _session;
-    private Transaction _tx;
 
     static final ThreadLocal<Session> _current = new ThreadLocal<Session>();
 
@@ -105,17 +103,4 @@
     public void close() {
         _session.close();
     }
-
-    public void begin() {
-        _tx=_session.beginTransaction();
-    }
-
-    public void commit() {
-        _tx.commit();
-    }
-
-    public void rollback() {
-        _tx.rollback();
-    }
-
 }

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java Thu Mar 26 21:54:08 2009
@@ -21,6 +21,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.daohib.HibernateTransactionManagerLookup;
+import org.apache.ode.daohib.SessionManager;
 import org.apache.ode.store.ConfStoreConnectionFactory;
 import org.apache.ode.store.Messages;
 import org.apache.ode.utils.GUID;
@@ -35,6 +37,8 @@
 import org.hibernate.dialect.DialectFactory;
 
 import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
@@ -74,11 +78,13 @@
         HIBERNATE_DIALECTS.put("Apache Derby", new DialectFactory.VersionInsensitiveMapper(DEFAULT_HIBERNATE_DIALECT));
     }
 
+    private TransactionManager _txMgr;
+
     private final DataSource _ds;
 
     final SessionFactory _sessionFactory;
 
-    public DbConfStoreConnectionFactory(DataSource ds, Properties initialProps, boolean createDatamodel) {
+    public DbConfStoreConnectionFactory(DataSource ds, Properties initialProps, boolean createDatamodel, String txFactoryClassName) {
         _ds = ds;
 
         // Don't want to pollute original properties
@@ -89,8 +95,6 @@
 
         __log.debug("using data source: " + ds);
         _dataSources.put(_guid, ds);
-        properties.put("guid", _guid);
-        properties.put(Environment.CONNECTION_PROVIDER, DataSourceConnectionProvider.class.getName());
 
         if (properties.get(Environment.DIALECT) == null) {
             try {
@@ -106,14 +110,46 @@
             properties.put(Environment.HBM2DDL_AUTO, "create-drop");
         }
 
-        _sessionFactory = getDefaultConfiguration().setProperties(properties).buildSessionFactory();
+        
+        // Note that we don't allow the following properties to be overriden by the client.
+        if (properties.containsKey(Environment.CONNECTION_PROVIDER))
+            __log.warn("Ignoring user-specified Hibernate property: " + Environment.CONNECTION_PROVIDER);
+        if (properties.containsKey(Environment.TRANSACTION_MANAGER_STRATEGY))
+            __log.warn("Ignoring user-specified Hibernate property: " + Environment.TRANSACTION_MANAGER_STRATEGY);
+        if (properties.containsKey(Environment.SESSION_FACTORY_NAME))
+            __log.warn("Ignoring user-specified Hibernate property: " + Environment.SESSION_FACTORY_NAME);
+
+        properties.put(SessionManager.PROP_GUID, _guid);
+        properties.put(Environment.CONNECTION_PROVIDER, DataSourceConnectionProvider.class.getName());
+        properties.put(Environment.TRANSACTION_MANAGER_STRATEGY, HibernateTransactionManagerLookup.class.getName());
+        properties.put(Environment.TRANSACTION_STRATEGY, "org.hibernate.transaction.JTATransactionFactory");
+        properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "jta");
 
+        if(__log.isDebugEnabled()) __log.debug("Store connection properties: " + properties );
+
+        initTxMgr(txFactoryClassName);
+        SessionManager.registerTransactionManager(_guid, _txMgr);
+
+        _sessionFactory = getDefaultConfiguration().setProperties(properties).buildSessionFactory();
     }
 
     public ConfStoreConnectionHib getConnection() {
-        return new ConfStoreConnectionHib(_sessionFactory.openSession());
+        return new ConfStoreConnectionHib(_sessionFactory.getCurrentSession());
     }
 
+	@SuppressWarnings("unchecked")
+	private void initTxMgr(String txFactoryClassName) {
+		__log.info("ProcessStore initializing transaction manager using " + txFactoryClassName);
+		try {
+			Class txFactClass = getClass().getClassLoader().loadClass(txFactoryClassName);
+			Object txFact = txFactClass.newInstance();
+			_txMgr = (TransactionManager) txFactClass.getMethod("getTransactionManager", (Class[]) null).invoke(txFact);
+		} catch (Exception e) {
+			__log.fatal("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+			throw new RuntimeException("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+		}
+	}
+
     private String guessDialect(DataSource dataSource) throws Exception {
 
         String dialect = null;
@@ -149,6 +185,30 @@
 
     }
 
+    public void beginTransaction() {
+		try {
+			_txMgr.begin();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void commitTransaction() {
+		try {
+			_txMgr.commit();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void rollbackTransaction() {
+		try {
+			_txMgr.rollback();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
     static Configuration getDefaultConfiguration() throws MappingException {
         return new Configuration().addClass(ProcessConfDaoImpl.class).addClass(DeploymentUnitDaoImpl.class)
                 .addClass(VersionTrackerDAOImpl.class);
@@ -161,7 +221,7 @@
         }
 
         public void configure(Properties props) throws HibernateException {
-            _guid = props.getProperty("guid");
+        	_guid = props.getProperty(SessionManager.PROP_GUID);
         }
 
         public Connection getConnection() throws SQLException {

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java Thu Mar 26 21:54:08 2009
@@ -19,6 +19,8 @@
 
 package org.apache.ode.store.jpa;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.DeploymentUnitDAO;
 
@@ -31,7 +33,8 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class ConfStoreConnectionJpa implements ConfStoreConnection {
-
+	private static Log LOG = LogFactory.getLog(ConfStoreConnectionJpa.class);
+	
     private EntityManager _em;
     static final ThreadLocal<EntityManager> _current = new ThreadLocal<EntityManager>();
 
@@ -41,17 +44,9 @@
         _current.set(em);
     }
 
-    public void begin() {
-        _em.getTransaction().begin();
-    }
-
     public void close() {
     }
 
-    public void commit() {
-        _em.getTransaction().commit();
-    }
-
     public DeploymentUnitDAO createDeploymentUnit(String name) {
         DeploymentUnitDaoImpl du = new DeploymentUnitDaoImpl();
         du.setName(name);
@@ -68,10 +63,6 @@
         return _em.createQuery("SELECT du from org.apache.ode.store.jpa.DeploymentUnitDaoImpl du").getResultList();
     }
 
-    public void rollback() {
-        _em.getTransaction().rollback();
-    }
-
     public long getNextVersion() {
         List<VersionTrackerDAOImpl> res = _em.createQuery("select v from VersionTrackerDAOImpl v").getResultList();
         if (res.size() == 0) return 1;

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java Thu Mar 26 21:54:08 2009
@@ -19,33 +19,93 @@
 
 package org.apache.ode.store.jpa;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.dao.jpa.JpaTxMgrProvider;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.ConfStoreConnectionFactory;
 
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+
 import java.util.HashMap;
 
 /**
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class DbConfStoreConnectionFactory implements ConfStoreConnectionFactory {
-
+	private static final Log __log = LogFactory.getLog(DbConfStoreConnectionFactory.class);
+	
     private DataSource _ds;
     private EntityManagerFactory _emf;
 
-    public DbConfStoreConnectionFactory(DataSource ds, boolean createDatamodel) {
+    private TransactionManager _txMgr;
+    
+    @SuppressWarnings("unchecked")
+	public DbConfStoreConnectionFactory(DataSource ds, boolean createDatamodel, String txFactoryClassName) {
         _ds = ds;
-        HashMap propMap = new HashMap();
-        propMap.put("javax.persistence.nonJtaDataSource", ds);
+        initTxMgr(txFactoryClassName);
+
+        HashMap<String, Object> propMap = new HashMap<String,Object>();
         propMap.put("openjpa.Log", "log4j");
-//        propMap.put("openjpa.jdbc.DBDictionary", "org.apache.openjpa.jdbc.sql.DerbyDictionary");
+        propMap.put("openjpa.ManagedRuntime", new JpaTxMgrProvider(_txMgr));
+        propMap.put("openjpa.ConnectionFactory", _ds);
+        propMap.put("openjpa.ConnectionFactoryMode", "managed");
+        propMap.put("openjpa.FlushBeforeQueries", "false");
+        propMap.put("openjpa.FetchBatchSize", 1000);
+        propMap.put("openjpa.jdbc.TransactionIsolation", "read-committed");
+
         if (createDatamodel) propMap.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+
         _emf = Persistence.createEntityManagerFactory("ode-store", propMap);
     }
 
-    public ConfStoreConnection getConnection() {
-        return new ConfStoreConnectionJpa(_emf.createEntityManager());
+    @SuppressWarnings("unchecked")
+	public ConfStoreConnection getConnection() {
+    	HashMap propMap2 = new HashMap();
+    	propMap2.put("openjpa.TransactionMode", "managed");
+        return new ConfStoreConnectionJpa(_emf.createEntityManager(propMap2));
     }
-}
+
+    public void beginTransaction() {
+		try {
+			if(__log.isDebugEnabled()) __log.debug("begin transaction on " + _txMgr);
+			_txMgr.begin();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void commitTransaction() {
+		try {
+			if(__log.isDebugEnabled()) __log.debug("commit transaction on " + _txMgr);
+			_txMgr.commit();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void rollbackTransaction() {
+		try {
+			if(__log.isDebugEnabled()) __log.debug("rollback transaction on " + _txMgr);
+			_txMgr.rollback();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private void initTxMgr(String txFactoryClassName) {
+		__log.info("ProcessStore initializing transaction manager using " + txFactoryClassName);
+		try {
+			Class txFactClass = getClass().getClassLoader().loadClass(txFactoryClassName);
+			Object txFact = txFactClass.newInstance();
+			_txMgr = (TransactionManager) txFactClass.getMethod("getTransactionManager", (Class[]) null).invoke(txFact);
+		} catch (Exception e) {
+			__log.fatal("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+			throw new RuntimeException("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+		}
+	}	
+}
\ No newline at end of file

Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java Thu Mar 26 21:54:08 2009
@@ -19,6 +19,8 @@
 package org.apache.ode.store.hib;
 
 import junit.framework.TestCase;
+
+import org.apache.ode.il.config.OdeConfigProperties;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.ConfStoreConnectionFactory;
 import org.apache.ode.store.DeploymentUnitDAO;
@@ -38,7 +40,7 @@
         hsqlds.setUser("sa");
         hsqlds.setPassword("");
 
-        cf = new DbConfStoreConnectionFactory(hsqlds, new Properties(), true);
+        cf = new DbConfStoreConnectionFactory(hsqlds, new Properties(), true, OdeConfigProperties.DEFAULT_TX_FACTORY_CLASS_NAME);
     }
 
     public void tearDown() throws Exception {
@@ -47,76 +49,76 @@
 
     public void testEmpty() {
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         assertEquals(0, conn.getDeploymentUnits().size());
         assertNull(conn.getDeploymentUnit("foobar"));
-        conn.commit();
+        cf.commitTransaction();
         conn.close();
     }
 
     public void testCreateDU() {
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.createDeploymentUnit("foo");
             assertNotNull(du);
             assertEquals("foo", du.getName());
             assertNotNull(du.getDeployDate());
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
 
         conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.getDeploymentUnit("foo");
             assertNotNull(du);
             assertEquals("foo", du.getName());
         } finally {
-            conn.commit();
+            cf.commitTransaction();
         }
 
     }
 
     public void testRollback() {
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.createDeploymentUnit("foo");
             assertNotNull(du);
             assertEquals("foo", du.getName());
             assertNotNull(du.getDeployDate());
         } finally {
-            conn.rollback();
+            cf.rollbackTransaction();
             conn.close();
         }
 
         conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.getDeploymentUnit("foo");
             assertNull(du);
         } finally {
-            conn.commit();
+            cf.commitTransaction();
         }
 
     }
     
     public void testGetDeploymentUnits() {
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             conn.createDeploymentUnit("foo1");
             conn.createDeploymentUnit("foo2");
             conn.createDeploymentUnit("foo3");
             conn.createDeploymentUnit("foo4");
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
         conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             assertNotNull(conn.getDeploymentUnit("foo1"));
             assertNotNull(conn.getDeploymentUnit("foo2"));
@@ -124,7 +126,7 @@
             assertNotNull(conn.getDeploymentUnit("foo4"));
             assertNull(conn.getDeploymentUnit("foo5"));
         } finally {
-            conn.commit();
+            cf.commitTransaction();
         }
     }
     
@@ -132,7 +134,7 @@
     public void testCreateProcess() {
         QName foobar = new QName("foo","bar");
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.createDeploymentUnit("foo1");
             ProcessConfDAO p = du.createProcess(foobar,foobar,1);
@@ -141,12 +143,12 @@
             assertNotNull(p.getDeploymentUnit());
             assertEquals("foo1", p.getDeploymentUnit().getName());
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
         
         conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.getDeploymentUnit("foo1");
             ProcessConfDAO p = du.getProcess(foobar);
@@ -157,7 +159,7 @@
             assertEquals(foobar,p.getType());
 
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
         
@@ -166,18 +168,18 @@
     public void testProcessProperties() {
         QName foobar = new QName("foo","bar");
         ConfStoreConnection conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.createDeploymentUnit("foo1");
             ProcessConfDAO p = du.createProcess(foobar,foobar,1);
             p.setProperty(foobar,"baz");
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
         
         conn = cf.getConnection();
-        conn.begin();
+        cf.beginTransaction();
         try {
             DeploymentUnitDAO du = conn.getDeploymentUnit("foo1");
             ProcessConfDAO p = du.getProcess(foobar);
@@ -186,7 +188,7 @@
             assertNotNull(p.getPropertyNames());
             assertTrue(p.getPropertyNames().contains(foobar));
         } finally {
-            conn.commit();
+            cf.commitTransaction();
             conn.close();
         }
         

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=758880&r1=758879&r2=758880&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 Thu Mar 26 21:54:08 2009
@@ -41,7 +41,7 @@
 
   public Connection getConnection() throws SQLException {
     Connection c = SessionManager.getConnection(_props);
-    if (_isolationLevel != 0) {
+    if (_isolationLevel != 0 && c.getTransactionIsolation() != _isolationLevel) {
         c.setTransactionIsolation(_isolationLevel);
     }
     return c;

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java Thu Mar 26 21:54:08 2009
@@ -18,6 +18,8 @@
  */
 package org.apache.ode.daohib;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.daohib.bpel.hobj.*;
 import org.apache.ode.utils.uuid.UUID;
 import org.hibernate.HibernateException;
@@ -41,7 +43,9 @@
  * managing sessions.
  */
 public class SessionManager {
-  private static final String PROP_GUID = "ode.hibernate.guid";
+	private static final Log __log = LogFactory.getLog(SessionManager.class);
+	
+	public static final String PROP_GUID = "ode.hibernate.guid";
   
   private static final Map<String, TransactionManager> _txManagers =
     Collections.synchronizedMap(new HashMap<String, TransactionManager>());
@@ -71,6 +75,10 @@
     return _txManager;
   }
 
+  public static void registerTransactionManager(String uuid, TransactionManager txm) {
+	_txManagers.put(uuid, txm);
+  }
+	  
   /**
    * Get the current Hibernate Session.
    */

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java Thu Mar 26 21:54:08 2009
@@ -51,7 +51,6 @@
 import org.apache.ode.daohib.bpel.hobj.HCorrelationSet;
 import org.apache.ode.daohib.bpel.hobj.HLargeData;
 import org.apache.ode.daohib.bpel.hobj.HMessageExchange;
-import org.apache.ode.daohib.bpel.hobj.HObject;
 import org.apache.ode.daohib.bpel.hobj.HProcess;
 import org.apache.ode.daohib.bpel.hobj.HProcessInstance;
 import org.apache.ode.daohib.bpel.hobj.HScope;
@@ -74,27 +73,27 @@
  * Hibernate-based {@link BpelDAOConnection} implementation.
  */
 public class BpelDAOConnectionImpl implements BpelDAOConnection {
-
     private static final Log __log = LogFactory.getLog(BpelDAOConnectionImpl.class);
 
-    private Session _session;
-
     protected SessionManager _sm;
 
     public BpelDAOConnectionImpl(SessionManager sm) {
         _sm = sm;
-        _session = _sm.getSession();
+    }
+
+    protected Session getSession(){
+    	return _sm.getSession();
     }
 
     public MessageExchangeDAO createMessageExchange(char dir) {
         HMessageExchange mex = new HMessageExchange();
         mex.setDirection(dir);
-        _session.save(mex);
+        getSession().save(mex);
         return new MessageExchangeDaoImpl(_sm, mex);
     }
 
     public MessageExchangeDAO getMessageExchange(String mexid) {
-        HMessageExchange mex = (HMessageExchange) _session.get(HMessageExchange.class, new Long(mexid));
+        HMessageExchange mex = (HMessageExchange) getSession().get(HMessageExchange.class, new Long(mexid));
         return mex == null ? null : new MessageExchangeDaoImpl(_sm, mex);
     }
 
@@ -106,14 +105,14 @@
         process.setDeployDate(new Date());
         process.setGuid(guid);
         process.setVersion(version);
-        _session.save(process);
+        getSession().save(process);
         return new ProcessDaoImpl(_sm, process);
     }
 
     public ProcessDAO getProcess(QName processId) {
 
         try {
-            Criteria criteria = _session.createCriteria(HProcess.class);
+            Criteria criteria = getSession().createCriteria(HProcess.class);
             criteria.add(Expression.eq("processId", processId.toString()));
             // For the moment we are expecting only one result.
             HProcess hprocess = (HProcess) criteria.uniqueResult();
@@ -132,11 +131,11 @@
      * @see org.apache.ode.bpel.dao.ProcessDAO#getInstance(java.lang.Long)
      */
     public ProcessInstanceDAO getInstance(Long instanceId) {
-        return _getInstance(_sm, _session, instanceId);
+        return _getInstance(_sm, getSession(), instanceId);
     }
 
     public ScopeDAO getScope(Long siidl) {
-        return _getScope(_sm, _session, siidl);
+        return _getScope(_sm, getSession(), siidl);
     }
 
     public Collection<ProcessInstanceDAO> instanceQuery(InstanceFilter criteria) {
@@ -145,7 +144,7 @@
         }
         List<ProcessInstanceDAO> daos = new ArrayList<ProcessInstanceDAO>();
 
-        Iterator<HProcessInstance> iter = _instanceQuery(_session, false, criteria);
+        Iterator<HProcessInstance> iter = _instanceQuery(getSession(), false, criteria);
         while (iter.hasNext()) {
             daos.add(new ProcessInstanceDaoImpl(_sm, iter.next()));
         }
@@ -213,7 +212,7 @@
     @SuppressWarnings( { "unchecked", "deprecation" })
     public List<Date> bpelEventTimelineQuery(InstanceFilter ifilter, BpelEventFilter efilter) {
         CriteriaBuilder cb = new CriteriaBuilder();
-        Criteria crit = _session.createCriteria(HBpelEvent.class);
+        Criteria crit = getSession().createCriteria(HBpelEvent.class);
         if (ifilter != null)
             cb.buildCriteria(crit, efilter);
         if (ifilter != null)
@@ -226,7 +225,7 @@
     @SuppressWarnings("unchecked")
     public List<BpelEvent> bpelEventQuery(InstanceFilter ifilter, BpelEventFilter efilter) {
         CriteriaBuilder cb = new CriteriaBuilder();
-        Criteria crit = _session.createCriteria(HBpelEvent.class);
+        Criteria crit = getSession().createCriteria(HBpelEvent.class);
         if (efilter != null)
             cb.buildCriteria(crit, efilter);
         if (ifilter != null)
@@ -259,7 +258,7 @@
         HibernateInstancesQueryCompiler compiler = new HibernateInstancesQueryCompiler();
 
         CommandEvaluator<List, Session> eval = compiler.compile((Query) rootNode);
-        List<HProcessInstance> instancesList = (List<HProcessInstance>) eval.evaluate(_session);
+        List<HProcessInstance> instancesList = (List<HProcessInstance>) eval.evaluate(getSession());
 
         Collection<ProcessInstanceDAO> result = new ArrayList<ProcessInstanceDAO>(instancesList.size());
         for (HProcessInstance instance : instancesList) {
@@ -279,7 +278,7 @@
             iids[i] = dao.getInstanceId();
             i++;
         }
-        Collection<HCorrelationSet> csets = _session.getNamedQuery(HCorrelationSet.SELECT_CORSETS_BY_INSTANCES).setParameterList("instances", iids).list();
+        Collection<HCorrelationSet> csets = getSession().getNamedQuery(HCorrelationSet.SELECT_CORSETS_BY_INSTANCES).setParameterList("instances", iids).list();
         Map<Long, Collection<CorrelationSetDAO>> map = new HashMap<Long, Collection<CorrelationSetDAO>>();
         for (HCorrelationSet cset: csets) {
             Long id = cset.getInstance().getId();
@@ -293,9 +292,10 @@
         return map;
     }
 
-    public Collection<CorrelationSetDAO> getActiveCorrelationSets() {
+    @SuppressWarnings("unchecked")
+	public Collection<CorrelationSetDAO> getActiveCorrelationSets() {
         ArrayList<CorrelationSetDAO> csetDaos = new ArrayList<CorrelationSetDAO>();
-        Collection<HCorrelationSet> csets = _session.getNamedQuery(HCorrelationSet.SELECT_ACTIVE_CORSETS).setParameter("state", ProcessState.STATE_ACTIVE).list();
+        Collection<HCorrelationSet> csets = getSession().getNamedQuery(HCorrelationSet.SELECT_ACTIVE_CORSETS).setParameter("state", ProcessState.STATE_ACTIVE).list();
         for (HCorrelationSet cset : csets)
             csetDaos.add(new CorrelationSetDaoImpl(_sm, cset));
         return csetDaos;

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java Thu Mar 26 21:54:08 2009
@@ -25,7 +25,6 @@
 import org.apache.ode.bpel.dao.CorrelatorDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
-import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.daohib.SessionManager;
 import org.apache.ode.daohib.bpel.hobj.HActivityRecovery;
 import org.apache.ode.daohib.bpel.hobj.HBpelEvent;
@@ -33,7 +32,6 @@
 import org.apache.ode.daohib.bpel.hobj.HCorrelationSet;
 import org.apache.ode.daohib.bpel.hobj.HCorrelator;
 import org.apache.ode.daohib.bpel.hobj.HCorrelatorMessage;
-import org.apache.ode.daohib.bpel.hobj.HCorrelatorMessageKey;
 import org.apache.ode.daohib.bpel.hobj.HFaultData;
 import org.apache.ode.daohib.bpel.hobj.HLargeData;
 import org.apache.ode.daohib.bpel.hobj.HMessage;
@@ -86,8 +84,8 @@
         return instance;
     }
 
-
-    public CorrelatorDAO getCorrelator(String  corrId) {
+    @SuppressWarnings("unchecked")
+	public CorrelatorDAO getCorrelator(String  corrId) {
         entering("ProcessDaoImpl.getCorrelator");
         Iterator results;
         Query q = getSession().createFilter(_process.getCorrelators(),
@@ -154,6 +152,10 @@
 		deleteProcessInstances();
 
 		getSession().delete(_process); // this deletes HCorrelator -> HCorrelatorSelector
+		
+		// after this delete, we have a use case that creates the process with the same procid.
+		// for hibernate to work without the database deferred constraint check, let's just flush the session.
+		getSession().flush();
     }
 
     private void deleteProcessInstances() {
@@ -219,7 +221,8 @@
         return new CorrelatorDaoImpl(_sm, correlator);
     }
 
-    public Collection<ProcessInstanceDAO> getActiveInstances() {
+    @SuppressWarnings("unchecked")
+	public Collection<ProcessInstanceDAO> getActiveInstances() {
         ArrayList<ProcessInstanceDAO> instDaos = new ArrayList<ProcessInstanceDAO>();
         Collection<HProcessInstance> insts = getSession().getNamedQuery(HProcessInstance.SELECT_ACTIVE_INSTANCES)
                 .setParameter("processId", _process.getId()).setParameter("state", ProcessState.STATE_ACTIVE).list();

Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java Thu Mar 26 21:54:08 2009
@@ -96,7 +96,7 @@
         propMap.put("openjpa.Log", "log4j");
 //        propMap.put("openjpa.jdbc.DBDictionary", "org.apache.openjpa.jdbc.sql.DerbyDictionary");
 
-        propMap.put("openjpa.ManagedRuntime", new TxMgrProvider());
+        propMap.put("openjpa.ManagedRuntime", new JpaTxMgrProvider(_tm));
         propMap.put("openjpa.ConnectionFactory", _ds);
         propMap.put("openjpa.ConnectionFactoryMode", "managed");
         propMap.put("openjpa.FlushBeforeQueries", "false");
@@ -141,59 +141,4 @@
     public DataSource getDataSource() {
         return _ds;
     }
-
-    private class TxMgrProvider implements ManagedRuntime {
-        public TxMgrProvider() {
-        }
-        
-        public TransactionManager getTransactionManager() throws Exception {
-            return _tm;
-        }
-        
-        public void setRollbackOnly(Throwable cause) throws Exception {
-            // there is no generic support for setting the rollback cause
-            getTransactionManager().getTransaction().setRollbackOnly();
-        }
-        
-        public Throwable getRollbackCause() throws Exception {
-            // there is no generic support for setting the rollback cause
-            return null;
-        }
-        
-        public Object getTransactionKey() throws Exception, SystemException {
-            return _tm.getTransaction();
-        }
-        
-        public void doNonTransactionalWork(java.lang.Runnable runnable) throws NotSupportedException {
-            TransactionManager tm = null;
-            Transaction transaction = null;
-            
-            try { 
-                tm = getTransactionManager(); 
-                transaction = tm.suspend();
-            } catch (Exception e) {
-                NotSupportedException nse =
-                    new NotSupportedException(e.getMessage());
-                nse.initCause(e);
-                throw nse;
-            }
-            
-            runnable.run();
-            
-            try {
-                tm.resume(transaction);
-            } catch (Exception e) {
-                try {
-                    transaction.setRollbackOnly();
-                }
-                catch(SystemException se2) {
-                    throw new GeneralException(se2);
-                }
-                NotSupportedException nse =
-                    new NotSupportedException(e.getMessage());
-                nse.initCause(e);
-                throw nse;
-            } 
-        }
-    }
-}
+}
\ No newline at end of file

Added: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaTxMgrProvider.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaTxMgrProvider.java?rev=758880&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaTxMgrProvider.java (added)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaTxMgrProvider.java Thu Mar 26 21:54:08 2009
@@ -0,0 +1,67 @@
+package org.apache.ode.dao.jpa;
+
+import javax.transaction.NotSupportedException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.apache.openjpa.ee.ManagedRuntime;
+import org.apache.openjpa.util.GeneralException;
+
+public class JpaTxMgrProvider implements ManagedRuntime {
+	private TransactionManager _txMgr;
+	
+    public JpaTxMgrProvider(TransactionManager txMgr) {
+    	_txMgr = txMgr;
+    }
+    
+    public TransactionManager getTransactionManager() throws Exception {
+        return _txMgr;
+    }
+    
+    public void setRollbackOnly(Throwable cause) throws Exception {
+        // there is no generic support for setting the rollback cause
+        getTransactionManager().getTransaction().setRollbackOnly();
+    }
+    
+    public Throwable getRollbackCause() throws Exception {
+        // there is no generic support for setting the rollback cause
+        return null;
+    }
+    
+    public Object getTransactionKey() throws Exception, SystemException {
+        return _txMgr.getTransaction();
+    }
+    
+    public void doNonTransactionalWork(java.lang.Runnable runnable) throws NotSupportedException {
+        TransactionManager tm = null;
+        Transaction transaction = null;
+        
+        try { 
+            tm = getTransactionManager(); 
+            transaction = tm.suspend();
+        } catch (Exception e) {
+            NotSupportedException nse =
+                new NotSupportedException(e.getMessage());
+            nse.initCause(e);
+            throw nse;
+        }
+        
+        runnable.run();
+        
+        try {
+            tm.resume(transaction);
+        } catch (Exception e) {
+            try {
+                transaction.setRollbackOnly();
+            }
+            catch(SystemException se2) {
+                throw new GeneralException(se2);
+            }
+            NotSupportedException nse =
+                new NotSupportedException(e.getMessage());
+            nse.initCause(e);
+            throw nse;
+        } 
+    }
+}
\ No newline at end of file

Modified: ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java?rev=758880&r1=758879&r2=758880&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java (original)
+++ ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java Thu Mar 26 21:54:08 2009
@@ -111,9 +111,6 @@
     /** Time for next upgrade. */
     private AtomicLong _nextUpgrade = new AtomicLong();
 
-    /** Time for next job load */
-    private AtomicLong _nextScheduleImmediate = new AtomicLong();
-
     private Random _random = new Random();
 
     public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf) {