You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2007/03/06 20:11:49 UTC

svn commit: r515255 - in /incubator/ode/trunk: bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ dao-jpa/src/main/java/org/apache/ode/dao/jpa/

Author: mriou
Date: Tue Mar  6 11:11:48 2007
New Revision: 515255

URL: http://svn.apache.org/viewvc?view=rev&rev=515255
Log:
JPA works! Our 3 main scenarios execute properly. Still need more tests for JBI and our test suite but it's a real step forward!

Added:
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java
Modified:
    incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
    incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java

Modified: incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Tue Mar  6 11:11:48 2007
@@ -742,7 +742,7 @@
             Message odeRequest = myRoleMex.createMessage(operation.getInput().getMessage().getQName());
             odeRequest.setMessage(outgoingMessage);
 
-            __log.debug("Setting session ids for p2p interaction, mySession "
+            __log.debug("Setting myRoleMex session ids for p2p interaction, mySession "
                     + partnerSessionId + " - partnerSess " + mySessionId);
             if ( partnerSessionId != null )
                    myRoleMex.setProperty(MessageExchange.PROPERTY_SEP_MYROLE_SESSIONID, partnerSessionId);

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java Tue Mar  6 11:11:48 2007
@@ -24,6 +24,9 @@
 import java.util.Map;
 import java.util.Properties;
 
+/**
+ * @author Matthieu Riou <mriou at apache dot org>
+ */
 public class BPELDAOConnectionFactoryImpl implements BpelDAOConnectionFactoryJDBC {
     static final Log __log = LogFactory.getLog(BPELDAOConnectionFactoryImpl.class);
 
@@ -31,9 +34,8 @@
     private TransactionManager _tm;
     private DataSource _ds;
     private Object _dbdictionary;
-    private DataSource _unmanagedDS;
 
-    private ThreadLocal _emTL = new ThreadLocal();
+    static ThreadLocal<BPELDAOConnectionImpl> _connections = new ThreadLocal<BPELDAOConnectionImpl>();
 
     public BPELDAOConnectionFactoryImpl() {
     }
@@ -41,32 +43,34 @@
     public BpelDAOConnection getConnection() {
         try {
             _tm.getTransaction().registerSynchronization(new Synchronization() {
+                // OpenJPA allows cross-transaction entity managers, which we don't want
                 public void afterCompletion(int i) {
-                    _emTL.set(null);
+                    if (_connections.get() != null)
+                        _connections.get().getEntityManager().close();
+                    _connections.set(null);
                 }
                 public void beforeCompletion() { }
             });
         } catch (RollbackException e) {
             throw new RuntimeException("Coulnd't register synchronizer!");
         } catch (SystemException e) {
-            throw new RuntimeException("Coulnd't register synchronizer!");            
+            throw new RuntimeException("Coulnd't register synchronizer!");
         }
-        if (_emTL.get() != null) {
-            return new BPELDAOConnectionImpl((EntityManager) _emTL.get());
+        if (_connections.get() != null) {
+            return _connections.get();
         } else {
             HashMap propMap2 = new HashMap();
             propMap2.put("openjpa.TransactionMode", "managed");
             EntityManager em = _emf.createEntityManager(propMap2);
-            _emTL.set(em);
-            return new BPELDAOConnectionImpl(em);
+            BPELDAOConnectionImpl conn = new BPELDAOConnectionImpl(em);
+            _connections.set(conn);
+            return conn;
         }
     }
 
     public void init(Properties properties) {
         HashMap<String, Object> propMap = new HashMap<String,Object>();
 
-//        propMap.put("javax.persistence.nonJtaDataSource", _unmanagedDS == null ? _ds : _unmanagedDS);
-
         propMap.put("openjpa.Log", "DefaultLevel=TRACE");
 //        propMap.put("openjpa.Log", "log4j");
         propMap.put("openjpa.jdbc.DBDictionary", "org.apache.openjpa.jdbc.sql.DerbyDictionary");
@@ -74,7 +78,7 @@
         propMap.put("openjpa.ManagedRuntime", new TxMgrProvider());
         propMap.put("openjpa.ConnectionFactory", _ds);
         propMap.put("openjpa.ConnectionFactoryMode", "managed");
-        propMap.put("openjpa.Log", "DefaultLevel=TRACE");
+        propMap.put("openjpa.FlushBeforeQueries", "false");
 
         if (_dbdictionary != null)
             propMap.put("openjpa.jdbc.DBDictionary", _dbdictionary);
@@ -105,7 +109,6 @@
     }
 
     public void setUnmanagedDataSource(DataSource ds) {
-        _unmanagedDS = ds;
     }
 
     public void shutdown() {

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java Tue Mar  6 11:11:48 2007
@@ -36,6 +36,9 @@
 import java.util.Date;
 import java.util.List;
 
+/**
+ * @author Matthieu Riou <mriou at apache dot org>
+ */
 public class BPELDAOConnectionImpl implements BpelDAOConnection {
 	
 	EntityManager _em;
@@ -58,7 +61,6 @@
 	
 	public ProcessInstanceDAO getInstance(Long iid) {
         ProcessInstanceDAOImpl instance = _em.find(ProcessInstanceDAOImpl.class, iid);
-        instance.setConnection(this);
         return instance;
     }
 
@@ -73,7 +75,7 @@
     }
 
     public ProcessDAO createProcess(QName pid, QName type, String guid, long version) {
-        ProcessDAOImpl ret = new ProcessDAOImpl(pid,type,guid,this,version);
+        ProcessDAOImpl ret = new ProcessDAOImpl(pid,type,guid,version);
         _em.persist(ret);
         return ret;
     }
@@ -83,7 +85,6 @@
                 .setParameter(1, processId.toString()).getResultList();
         if (l.size() == 0) return null;
         ProcessDAOImpl p = (ProcessDAOImpl) l.get(0);
-        p.setConnection(this);
         return p;
     }
 
@@ -122,13 +123,6 @@
 		_em = em;
 	}
 	
-	void removeProcess(ProcessDAOImpl p) {
-		if ( _em != null ) {
-			_em.remove(p);
-			_em.flush();
-		}
-	}
-
     public MessageExchangeDAO getMessageExchange(String mexid) {
         return _em.find(MessageExchangeDAOImpl.class, mexid);
     }

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -51,7 +51,7 @@
     private String _correlatorKey;
     @OneToMany(targetEntity=MessageRouteDAOImpl.class,mappedBy="_correlator",fetch=FetchType.EAGER,cascade={CascadeType.ALL})
     private Collection<MessageRouteDAOImpl> _routes = new ArrayList<MessageRouteDAOImpl>();
-    @OneToMany(targetEntity=MessageExchangeDAOImpl.class,mappedBy="_correlator",fetch=FetchType.EAGER,cascade={CascadeType.ALL})
+    @OneToMany(targetEntity=MessageExchangeDAOImpl.class,mappedBy="_correlator",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
     private Collection<MessageExchangeDAOImpl> _exchanges = new ArrayList<MessageExchangeDAOImpl>();
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST}) @Column(name="PROC_ID")
     private ProcessDAOImpl _process;
@@ -61,10 +61,9 @@
         _correlatorKey = correlatorKey;
     }
 
-    public void addRoute(String routeGroupId, ProcessInstanceDAO target,
-                         int index, CorrelationKey correlationKey) {
-        MessageRouteDAOImpl mr = new MessageRouteDAOImpl(correlationKey,routeGroupId,index,(ProcessInstanceDAOImpl)target);
-
+    public void addRoute(String routeGroupId, ProcessInstanceDAO target, int index, CorrelationKey correlationKey) {
+        MessageRouteDAOImpl mr = new MessageRouteDAOImpl(correlationKey,
+                routeGroupId, index, (ProcessInstanceDAOImpl) target, this);
         _routes.add(mr);
     }
 

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -285,7 +285,7 @@
 	}
 
 	public void setProperty(String key, String value) {
-        _props.add(new MexProperty(key, value));
+        _props.add(new MexProperty(key, value, this));
 	}
 
 	public void setRequest(MessageDAO msg) {

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -46,7 +46,7 @@
 	@Basic @Column(name="INDEX")
     private int _index;
 	@Basic @Column(name="CORRELATION_KEY")
-    private CorrelationKey _correlationKey;
+    private String _correlationKey;
 
     @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) @Column(name="PROCESS_INSTANCE_ID")
     private ProcessInstanceDAOImpl _processInst;
@@ -54,15 +54,17 @@
     private CorrelatorDAOImpl _correlator;
 
     public MessageRouteDAOImpl() {}
-	public MessageRouteDAOImpl(CorrelationKey key, String groupId, int index, ProcessInstanceDAOImpl processInst) {
-		_correlationKey = key;
+	public MessageRouteDAOImpl(CorrelationKey key, String groupId, int index,
+                               ProcessInstanceDAOImpl processInst, CorrelatorDAOImpl correlator) {
+		_correlationKey = key.toCanonicalString();
 		_groupId = groupId;
 		_index = index;
 		_processInst = processInst;
-	}
+        _correlator = correlator;
+    }
 	
 	public CorrelationKey getCorrelationKey() {
-		return _correlationKey;
+		return new CorrelationKey(_correlationKey);
 	}
 	
 	public String getGroupId() {

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java Tue Mar  6 11:11:48 2007
@@ -50,9 +50,10 @@
 
     public MexProperty() {
     }
-    public MexProperty(String propertyKey, String propertyValue) {
+    public MexProperty(String propertyKey, String propertyValue, MessageExchangeDAOImpl mex) {
         this.propertyKey = propertyKey;
         this.propertyValue = propertyValue;
+        this._mex = mex;
     }
 
     public String getPropertyKey() {

Added: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java?view=auto&rev=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java (added)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java Tue Mar  6 11:11:48 2007
@@ -0,0 +1,35 @@
+package org.apache.ode.dao.jpa;
+
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.List;
+
+/**
+ * @author Matthieu Riou <mriou at apache dot org>
+ */
+public class OpenJPADAO {
+
+    protected BPELDAOConnectionImpl getConn() {
+        return BPELDAOConnectionFactoryImpl._connections.get();
+    }
+
+    protected EntityManager getEM() {
+        return OpenJPAPersistence.getEntityManager(this);
+    }
+
+    /**
+     * javax.persistence.Query either let you query for a collection or a single
+     * value throwing an exception if nothing is found. Just a convenient shortcut
+     * for single results allowing null values
+     * @param qry query to execute
+     * @return whatever you assign it to
+     */
+    protected <T> T getSingleResult(Query qry) {
+        List res = qry.getResultList();
+        if (res.size() == 0) return null;
+        return (T) res.get(0);
+
+    }
+}

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -28,7 +28,6 @@
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.EntityManager;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
@@ -36,25 +35,23 @@
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
-import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
 import javax.persistence.Table;
-import javax.persistence.Transient;
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+/**
+ * @author Matthieu Riou <mriou at apache dot org>
+ */
 @Entity
 @Table(name="ODE_PROCESS")
 @NamedQueries({
     @NamedQuery(name="InstanceByCKey", query="SELECT cs._scope._instance FROM CorrelationSetDAOImpl as cs WHERE cs._correlationKey = :ckey"),
     @NamedQuery(name="CorrelatorByKey", query="SELECT c FROM CorrelatorDAOImpl as c WHERE c._correlatorKey = :ckey")
 })
-public class ProcessDAOImpl implements ProcessDAO {
-
-    @PersistenceContext
-    private EntityManager _em;
+public class ProcessDAOImpl extends OpenJPADAO implements ProcessDAO {
 
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
@@ -74,14 +71,10 @@
 	@OneToMany(targetEntity=CorrelatorDAOImpl.class,mappedBy="_process",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
     private Collection<CorrelatorDAOImpl> _correlators = new ArrayList<CorrelatorDAOImpl>();
 
-    @Transient
-    transient private BPELDAOConnectionImpl _connection;
-
 	public ProcessDAOImpl() {}
-	public ProcessDAOImpl(QName pid, QName type, String guid, BPELDAOConnectionImpl connection, long version) {
+	public ProcessDAOImpl(QName pid, QName type, String guid, long version) {
         _processId = pid.toString();
 		_processType = type.toString();
-		_connection = connection;
 		_guid = guid;
         _version = version;
     }
@@ -92,7 +85,7 @@
 	}
 
     public CorrelatorDAO getCorrelator(String correlatorId) {
-        Query qry = _connection.getEntityManager().createNamedQuery("CorrelatorByKey");
+        Query qry = getEM().createNamedQuery("CorrelatorByKey");
         qry.setParameter("ckey", correlatorId);
         List res = qry.getResultList();
         if (res.size() == 0) return null;
@@ -101,21 +94,21 @@
 
     public ProcessInstanceDAO createInstance(
 			CorrelatorDAO instantiatingCorrelator) {
-		ProcessInstanceDAOImpl inst = new ProcessInstanceDAOImpl((CorrelatorDAOImpl)instantiatingCorrelator, this,_connection);
-		_connection.getEntityManager().persist(inst);
+		ProcessInstanceDAOImpl inst = new ProcessInstanceDAOImpl((CorrelatorDAOImpl)instantiatingCorrelator, this);
+		getEM().persist(inst);
 		_numInstances++;
 		return inst;
 	}
 
 	@SuppressWarnings("unchecked")
     public Collection<ProcessInstanceDAO> findInstance(CorrelationKey ckey) {
-		Query qry = _connection.getEntityManager().createNamedQuery("InstanceByCKey");
+		Query qry = getEM().createNamedQuery("InstanceByCKey");
         qry.setParameter("ckey", ckey.toCanonicalString());
         return qry.getResultList();
 	}
 
 	public ProcessInstanceDAO getInstance(Long iid) {
-		return _connection.getInstance(iid);
+		return getEM().find(ProcessInstanceDAOImpl.class, iid);
 	}
 
 	public QName getProcessId() {
@@ -127,7 +120,7 @@
 	}
 
     public void delete() {
-        _connection.removeProcess(this);
+        getEM().remove(this);
     }
 
     public int getNumInstances() {
@@ -152,7 +145,4 @@
         return _guid;
     }
 
-    void setConnection(BPELDAOConnectionImpl connection) {
-        _connection = connection;
-    }
 }

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -49,7 +49,6 @@
 import javax.persistence.OneToOne;
 import javax.persistence.Query;
 import javax.persistence.Table;
-import javax.persistence.Transient;
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -64,12 +63,9 @@
 @NamedQueries({
     @NamedQuery(name="ScopeById", query="SELECT s FROM ScopeDAOImpl as s WHERE s._scopeInstanceId = :sid and s._processInstance = :instance")
         })
-public class ProcessInstanceDAOImpl implements ProcessInstanceDAO {
+public class ProcessInstanceDAOImpl extends OpenJPADAO implements ProcessInstanceDAO {
 
-    @Transient
-    private BPELDAOConnectionImpl _connection;
-
-	@Id @Column(name="PROCESS_INSTANCE_ID")
+    @Id @Column(name="PROCESS_INSTANCE_ID")
 	@GeneratedValue(strategy=GenerationType.AUTO)
 	private Long _instanceId;
 	@Basic @Column(name="LAST_RECOVERY_DATE")
@@ -101,9 +97,8 @@
 	private CorrelatorDAOImpl _instantiatingCorrelator;
 	
 	public ProcessInstanceDAOImpl() {}
-	public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator, ProcessDAOImpl process, BPELDAOConnectionImpl connection) {
+	public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator, ProcessDAOImpl process) {
 		_instantiatingCorrelator = correlator;
-		_connection = connection;
 		_process = process;
 	}
 	
@@ -116,30 +111,24 @@
 		_lastRecovery = dateTime;
 	}
 
-	public ScopeDAO createScope(ScopeDAO parentScope, String name,
-			int scopeModelId) {
-		ScopeDAOImpl ret = new ScopeDAOImpl((ScopeDAOImpl)parentScope,name,scopeModelId,this, _connection);
+	public ScopeDAO createScope(ScopeDAO parentScope, String name, int scopeModelId) {
+		ScopeDAOImpl ret = new ScopeDAOImpl((ScopeDAOImpl)parentScope,name,scopeModelId,this);
         ret.setState(ScopeStateEnum.ACTIVE);
-
         _scopes.add(ret);
-		
 		_rootScope = (parentScope == null)?ret:_rootScope;
 		
 		// Must persist the scope to generate a scope ID
-		_connection.getEntityManager().persist(ret);
-		
+		getEM().persist(ret);
 		return ret;
 	}
 
 	public void delete() {
-		if ( _connection.getEntityManager() != null ) {
-			_connection.getEntityManager().remove(this);
+		if (getEM() != null ) {
+			getEM().remove(this);
 		}
-
 	}
 
 	public void deleteActivityRecovery(String channel) {
-		
 		for (Iterator itr=_recoveries.iterator(); itr.hasNext(); ) {
 			ActivityRecoveryDAO arElement = (ActivityRecoveryDAO)itr.next();
 			if ( arElement.getChannel().equals(channel)) {
@@ -171,10 +160,6 @@
 		return _recoveries;
 	}
 
-	public BpelDAOConnection getConnection() {
-		return _connection;
-	}
-
 	public CorrelationSetDAO getCorrelationSet(String name) {
 		//	TODO: should this method be deprecated?
 		
@@ -235,14 +220,10 @@
 	}
 
 	public ScopeDAO getScope(Long scopeInstanceId) {
-        Query qry = _connection.getEntityManager().createNamedQuery("ScopeById");
+        Query qry = getEM().createNamedQuery("ScopeById");
         qry.setParameter("sid", scopeInstanceId);
         qry.setParameter("instance", this);
-        List res = qry.getResultList();
-        if (res.size() == 0) return null;
-        ScopeDAOImpl s = (ScopeDAOImpl) res.get(0);
-        s.setConnection(_connection);
-        return s;
+        return getSingleResult(qry);
 	}
 
 	public Collection<ScopeDAO> getScopes(String scopeName) {
@@ -278,7 +259,7 @@
 	}
 
 	public void insertBpelEvent(ProcessInstanceEvent event) {
-		_connection.insertBpelEvent(event, getProcess(), this);
+        getConn().insertBpelEvent(event, getProcess(), this);
 	}
 
 	public void setExecutionState(byte[] execState) {
@@ -287,18 +268,15 @@
 
 	public void setFault(FaultDAO fault) {
 		_fault = (FaultDAOImpl)fault;
-
 	}
 
 	public void setFault(QName faultName, String explanation, int faultLineNo,
 			int activityId, Element faultMessage) {
 		_fault = new FaultDAOImpl(faultName,explanation,faultLineNo,activityId,faultMessage);
-		
 	}
 
 	public void setLastActiveTime(Date dt) {
 		_lastActive = dt;
-
 	}
 
 	public void setState(short state) {
@@ -310,7 +288,7 @@
 		_process.removeRoutes(routeGroupId, this);
 	}
 
-    void setConnection(BPELDAOConnectionImpl connection) {
-        _connection = connection;
+    public BpelDAOConnection getConnection() {
+        return new BPELDAOConnectionImpl(getEM());
     }
 }

Modified: incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java?view=diff&rev=515255&r1=515254&r2=515255
==============================================================================
--- incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java (original)
+++ incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java Tue Mar  6 11:11:48 2007
@@ -42,7 +42,6 @@
 import javax.persistence.OneToMany;
 import javax.persistence.Query;
 import javax.persistence.Table;
-import javax.persistence.Transient;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -52,10 +51,7 @@
 @NamedQueries({
     @NamedQuery(name="PLinkByModelId", query="SELECT pl FROM PartnerLinkDAOImpl as pl WHERE pl._partnerLinkModelId = :mid")
         })
-public class ScopeDAOImpl implements ScopeDAO {
-
-    @Transient
-    private BPELDAOConnectionImpl _connection;
+public class ScopeDAOImpl extends OpenJPADAO implements ScopeDAO {
 
     @Id @Column(name="SCOPE_ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
@@ -84,13 +80,11 @@
 	private ProcessInstanceDAOImpl _processInstance;
 
 	public ScopeDAOImpl() {}
-	public ScopeDAOImpl(ScopeDAOImpl parentScope, String name, int scopeModelId,
-                        ProcessInstanceDAOImpl pi, BPELDAOConnectionImpl connection) {
+	public ScopeDAOImpl(ScopeDAOImpl parentScope, String name, int scopeModelId, ProcessInstanceDAOImpl pi) {
 		_parentScope = parentScope;
 		_name = name;
 		_modelId = scopeModelId;
 		_processInstance = pi;
-        _connection = connection;
     }
 	
 	public PartnerLinkDAO createPartnerLink(int plinkModelId, String pLinkName,
@@ -119,7 +113,7 @@
 			// PartnerLink creation )
 			ret = new CorrelationSetDAOImpl(this,corrSetName);
 			// Persist the new correlation set to generate an ID
-			_connection.getEntityManager().persist(ret);
+			getEM().persist(ret);
 			_correlationSets.add(ret);
 		}
 		
@@ -143,11 +137,9 @@
 	}
 
 	public PartnerLinkDAO getPartnerLink(int plinkModelId) {
-        Query qry = _connection.getEntityManager().createNamedQuery("PLinkByModelId");
-        qry.setParameter("mid", plinkModelId);
-        List res = qry.getResultList();
-        if (res.size() == 0) return null;
-        return (PartnerLinkDAO) res.get(0);
+        Query qry = getEM().createNamedQuery("PLinkByModelId");
+        qry.setParameter("mid", plinkModelId);        
+        return getSingleResult(qry);
 	}
 
 	public Collection<PartnerLinkDAO> getPartnerLinks() {
@@ -192,7 +184,4 @@
 		_scopeState = state.toString();
 	}
 
-    void setConnection(BPELDAOConnectionImpl connection) {
-        _connection = connection;
-    }
 }