Modified: 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HScope.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HScope.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HScope.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HScope.java
 Fri Oct 31 16:49:23 2008
@@ -25,8 +25,13 @@
 /**
  * Hibernate table representing a BPEL scope instance. 
  * @hibernate.class table="BPEL_SCOPE"
+ * @hibernate.query name="DELETE_SCOPES_BY_INSTANCE" query="delete from HScope 
as s where s.instance = :instance"
+ * @hibernate.query name="DELETE_SCOPES_BY_PROCESS" query="delete from HScope 
as s where s.instance in (select i from HProcessInstance as i where i.process = 
:process)"
  */
 public class HScope extends HObject{
+       public final static String DELETE_SCOPES_BY_INSTANCE = 
"DELETE_SCOPES_BY_INSTANCE";
+       public final static String DELETE_SCOPES_BY_PROCESS = 
"DELETE_SCOPES_BY_PROCESS";
+
   /** Process instance to which this scope belongs. */
   private HProcessInstance _instance;
 
@@ -58,7 +63,7 @@
    *  inverse="true"
    *  cascade="delete"
    * @hibernate.collection-key
-   *  column="SCOPE_ID"
+   *  column="SCOPE_ID" foreign-key="none"
    * @hibernate.collection-one-to-many
    *  class="org.apache.ode.daohib.bpel.hobj.HCorrelationSet"
    */
@@ -73,7 +78,7 @@
   /**
    * Get the [EMAIL PROTECTED] HProcessInstance} to which this scope object 
belongs.
    * @hibernate.many-to-one
-   *  column="PIID"
+   *  column="PIID" foreign-key="none"
    */
        public HProcessInstance getInstance() {
                return _instance;
@@ -86,7 +91,7 @@
 
   /**
    * Get the "parent" [EMAIL PROTECTED] HScope} of this scope.
-   * @hibernate.many-to-one column="PARENT_SCOPE_ID"
+   * @hibernate.many-to-one column="PARENT_SCOPE_ID" foreign-key="none"
    */
        public HScope getParentScope() {
                return _parentScope;
@@ -128,7 +133,7 @@
    *
    * @return [EMAIL PROTECTED] Set}<[EMAIL PROTECTED] HXmlData}> with 
variable values
    * @hibernate.set lazy="true" inverse="true" cascade="delete"
-   * @hibernate.collection-key column="SCOPE_ID"
+   * @hibernate.collection-key column="SCOPE_ID" foreign-key="none"
    * @hibernate.collection-one-to-many 
class="org.apache.ode.daohib.bpel.hobj.HXmlData"
    */
   public Set<HXmlData> getVariables() {
@@ -144,7 +149,7 @@
    *
    * @return [EMAIL PROTECTED] Set}&lt;[EMAIL PROTECTED] HPartnerLink}&gt; 
with variable values
    * @hibernate.set lazy="true" inverse="true" cascade="delete"
-   * @hibernate.collection-key column="SCOPE"
+   * @hibernate.collection-key column="SCOPE" foreign-key="none"
    * @hibernate.collection-one-to-many 
class="org.apache.ode.daohib.bpel.hobj.HPartnerLink"
    */
   public Set<HPartnerLink> getPartnerLinks() {

Modified: 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HVariableProperty.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HVariableProperty.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HVariableProperty.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HVariableProperty.java
 Fri Oct 31 16:49:23 2008
@@ -24,11 +24,14 @@
  * Useful for identification of process instances based
  * on indexed lookup of property values.
  * 
- * @hibernate.class
- *  table="VAR_PROPERTY"
+ * @hibernate.class table="VAR_PROPERTY"
+ * @hibernate.query name="DELETE_VARIABLE_PROPERITES_BY_PROCESS" query="delete 
from HVariableProperty as p where p.xmlData in(select x.id from HXmlData x 
where x.instance.process = :process)"
+ * @hibernate.query name="DELETE_VARIABLE_PROPERITES_BY_INSTANCE" 
query="delete from HVariableProperty as p where p.xmlData in(select x.id from 
HXmlData x where x.instance = :instance)"
  */
 public class HVariableProperty extends HObject{
- 
+  public final static String DELETE_VARIABLE_PROPERITES_BY_PROCESS = 
"DELETE_VARIABLE_PROPERITES_BY_PROCESS";
+  public final static String DELETE_VARIABLE_PROPERITES_BY_INSTANCE = 
"DELETE_VARIABLE_PROPERITES_BY_INSTANCE";
+       
   private String _propertyValue;
   private String _propertyName;
   private HXmlData _variable;
@@ -47,7 +50,7 @@
   }
   /**
    * @hibernate.many-to-one
-   *  column="XML_DATA_ID"
+   *  column="XML_DATA_ID" foreign-key="none"
    */
   public HXmlData getXmlData(){
        return _variable;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HXmlData.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HXmlData.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HXmlData.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HXmlData.java
 Fri Oct 31 16:49:23 2008
@@ -23,12 +23,15 @@
 import java.util.HashSet;
 
 /**
- * @hibernate.class
- *  table="BPEL_XML_DATA"
+ * @hibernate.class table="BPEL_XML_DATA"
+ * @hibernate.query name="DELETE_XMLDATA_BY_PROCESS" query="delete from 
HXmlData as x where x.instance in(select i from HProcessInstance as i where 
i.process = :process)"
+ * @hibernate.query name="DELETE_XMLDATA_BY_INSTANCE" query="delete from 
HXmlData as x where x.instance = :instance"
  */
 public class HXmlData extends HObject{
-  
-       private boolean _simpleType;
+  public static final String DELETE_XMLDATA_BY_PROCESS = 
"DELETE_XMLDATA_BY_PROCESS";
+  public static final String DELETE_XMLDATA_BY_INSTANCE = 
"DELETE_XMLDATA_BY_INSTANCE";
+         
+  private boolean _simpleType;
   private HLargeData _data;
   private Collection<HVariableProperty> _properties = new 
HashSet<HVariableProperty>();
   private String _name;
@@ -41,7 +44,7 @@
        }
 
   /**
-   * @hibernate.many-to-one column="LDATA_ID" cascade="delete"
+   * @hibernate.many-to-one column="LDATA_ID" cascade="delete" 
foreign-key="none"
    */
   public HLargeData getData() {
     return _data;
@@ -71,8 +74,7 @@
    *  lazy="true"
    *  inverse="true"
    *  cascade="delete"
-   * @hibernate.collection-key
-   *  column="XML_DATA_ID"
+   * @hibernate.collection-key column="XML_DATA_ID" foreign-key="none"
    * @hibernate.collection-one-to-many
    *  class="org.apache.ode.daohib.bpel.hobj.HVariableProperty"
    */
@@ -85,8 +87,7 @@
        }
 
   /**
-   * @hibernate.many-to-one
-   *  column="SCOPE_ID"
+   * @hibernate.many-to-one column="SCOPE_ID" foreign-key="none"
    */
   public HScope getScope() {
     return _scope;
@@ -102,7 +103,7 @@
 
   /**
    * @hibernate.many-to-one
-   *  column="PIID"
+   *  column="PIID" foreign-key="none"
    */
   public HProcessInstance getInstance() {
     return _instance;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -34,16 +34,23 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import java.util.Date;
 
 
 @Entity
 @Table(name="ODE_ACTIVITY_RECOVERY")
[EMAIL PROTECTED]({
+       
@NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS, 
query="delete from ActivityRecoveryDAOImpl as a where a._instance._process = 
:process")
+})
 public class ActivityRecoveryDAOImpl implements ActivityRecoveryDAO {
-
+       public final static String DELETE_ACTIVITY_RECOVERIES_BY_PROCESS = 
"DELETE_ACTIVITY_RECOVERIES_BY_PROCESS";
+       
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _id;
 
        @Basic @Column(name="ACTIVITY_ID")
@@ -62,7 +69,6 @@
     private int _retries;
 
     // _instances is unused because this is a one-way relationship at the 
database level
-    @SuppressWarnings("unused")
     @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="INSTANCE_ID")
     private ProcessInstanceDAOImpl _instance;
 

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=709602&r1=709601&r2=709602&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
 Fri Oct 31 16:49:23 2008
@@ -23,21 +23,18 @@
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
 import org.apache.openjpa.ee.ManagedRuntime;
+import org.apache.openjpa.util.GeneralException;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import javax.sql.DataSource;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
 import javax.transaction.NotSupportedException;
 import javax.transaction.RollbackException;
 import javax.transaction.Synchronization;
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAResource;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -46,9 +43,9 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BPELDAOConnectionFactoryImpl implements 
BpelDAOConnectionFactoryJDBC {
-    static final Log __log = 
LogFactory.getLog(BPELDAOConnectionFactoryImpl.class);
+       static final Log __log = 
LogFactory.getLog(BPELDAOConnectionFactoryImpl.class);
 
-    private EntityManagerFactory _emf;
+    protected EntityManagerFactory _emf;
     private TransactionManager _tm;
     private DataSource _ds;
     private Object _dbdictionary;
@@ -58,6 +55,7 @@
     public BPELDAOConnectionFactoryImpl() {
     }
 
+    @SuppressWarnings("unchecked")
     public BpelDAOConnection getConnection() {
         try {
             _tm.getTransaction().registerSynchronization(new Synchronization() 
{
@@ -80,12 +78,17 @@
             HashMap propMap2 = new HashMap();
             propMap2.put("openjpa.TransactionMode", "managed");
             EntityManager em = _emf.createEntityManager(propMap2);
-            BPELDAOConnectionImpl conn = new BPELDAOConnectionImpl(em);
+            BPELDAOConnectionImpl conn = createBPELDAOConnection(em);
             _connections.set(conn);
             return conn;
         }
     }
 
+    protected BPELDAOConnectionImpl createBPELDAOConnection(EntityManager em) {
+       return new BPELDAOConnectionImpl(em);
+    }
+    
+    @SuppressWarnings("unchecked")
     public void init(Properties properties) {
         HashMap<String, Object> propMap = new HashMap<String,Object>();
 
@@ -137,20 +140,55 @@
     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;
+            } 
+        }
     }
-
 }

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
 Fri Oct 31 16:49:23 2008
@@ -55,7 +55,7 @@
        
        static final Log __log = LogFactory.getLog(BPELDAOConnectionImpl.class);
        
-       EntityManager _em;
+       protected EntityManager _em;
 
     public BPELDAOConnectionImpl(EntityManager em) {
         _em = em;
@@ -94,6 +94,7 @@
         return ret;
     }
 
+    @SuppressWarnings("unchecked")
     public ProcessDAO getProcess(QName processId) {
         List l = _em.createQuery("select x from ProcessDAOImpl x where 
x._processId = ?1")
                 .setParameter(1, processId.toString()).getResultList();
@@ -297,6 +298,10 @@
         return _em.find(MessageExchangeDAOImpl.class, mexid);
     }
 
+    public void deleteMessageExchange(MessageExchangeDAO mexDao) {
+       _em.remove(mexDao);
+    }
+    
     public EntityManager getEntityManager() {
         return _em;
     }

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrSetProperty.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrSetProperty.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrSetProperty.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrSetProperty.java
 Fri Oct 31 16:49:23 2008
@@ -27,6 +27,8 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 /**
@@ -34,10 +36,17 @@
  */
 @Entity
 @Table(name="ODE_CORSET_PROP")
[EMAIL PROTECTED]({
+       @NamedQuery(name=CorrSetProperty.DELETE_CORSET_PROPERTIES_BY_PROCESS, 
query="delete from CorrSetProperty as p where 
p._corrSet._scope._processInstance._process = :process"),
+       @NamedQuery(name=CorrSetProperty.DELETE_CORSET_PROPERTIES_BY_INSTANCE, 
query="delete from CorrSetProperty as p where 
p._corrSet._scope._processInstance = :instance")
+})
 public class CorrSetProperty {
-
+       public final static String DELETE_CORSET_PROPERTIES_BY_PROCESS = 
"DELETE_CORSET_PROPERTIES_BY_PROCESS";
+       public final static String DELETE_CORSET_PROPERTIES_BY_INSTANCE = 
"DELETE_CORSET_PROPERTIES_BY_INSTANCE";
+       
     @Id @Column(name="ID")
     @GeneratedValue(strategy=GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _id;
     @Basic @Column(name="PROP_KEY")
     private String propertyKey;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -32,6 +32,8 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.xml.namespace.QName;
@@ -42,8 +44,14 @@
 
 @Entity
 @Table(name="ODE_CORRELATION_SET")
[EMAIL PROTECTED]({
+    @NamedQuery(name=CorrelationSetDAOImpl.DELETE_CORRELATION_SETS_BY_PROCESS, 
query="delete from CorrelationSetDAOImpl as c where c._scope in (select s from 
ScopeDAOImpl s where s._processInstance._process = :process)"),
+    
@NamedQuery(name=CorrelationSetDAOImpl.DELETE_CORRELATION_SETS_BY_INSTANCE, 
query="delete from CorrelationSetDAOImpl as c where c._scope in (select s from 
ScopeDAOImpl s where s._processInstance = :instance)")
+})
 public class CorrelationSetDAOImpl implements CorrelationSetDAO {
-
+       public final static String DELETE_CORRELATION_SETS_BY_PROCESS = 
"DELETE_CORRELATION_SETS_BY_PROCESS";
+       public final static String DELETE_CORRELATION_SETS_BY_INSTANCE = 
"DELETE_CORRELATION_SETS_BY_INSTANCE";
+       
        @Id @Column(name="CORRELATION_SET_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long _correlationSetId;
@@ -52,7 +60,7 @@
        @Basic @Column(name="CORRELATION_KEY")
     private String _correlationKey;
 
-    
@OneToMany(targetEntity=CorrSetProperty.class,mappedBy="_corrSet",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
+    
@OneToMany(targetEntity=CorrSetProperty.class,mappedBy="_corrSet",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,
 CascadeType.PERSIST, CascadeType.REFRESH})
     private Collection<CorrSetProperty> _props = new 
ArrayList<CorrSetProperty>();
     @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="SCOPE_ID")
     private ScopeDAOImpl _scope;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -34,22 +34,21 @@
 @Entity
 @Table(name="ODE_CORRELATOR")
 @NamedQueries({
-    @NamedQuery(name="RouteByCKey", query="SELECT route " +
-            "FROM MessageRouteDAOImpl as route " +
-            "WHERE route._correlationKey like :ckey " +
-                   "and route._correlator._process._processType = :ptype " +
-                   "and route._correlator._correlatorKey = :corrkey")
-        })
+    @NamedQuery(name="RouteByCKey", query="select route from 
MessageRouteDAOImpl as route where route._correlationKey = :ckey and 
route._correlator._process._processType = :ptype and 
route._correlator._correlatorKey = :corrkey"),
+    @NamedQuery(name=CorrelatorDAOImpl.DELETE_CORRELATORS_BY_PROCESS, 
query="delete from CorrelatorDAOImpl as c where c._process = :process")
+})
 public class CorrelatorDAOImpl extends OpenJPADAO implements CorrelatorDAO {
-
+       public final static String DELETE_CORRELATORS_BY_PROCESS = 
"DELETE_CORRELATORS_BY_PROCESS";
+       
     @Id @Column(name="CORRELATOR_ID")
     @GeneratedValue(strategy=GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _correlatorId;
     @Basic @Column(name="CORRELATOR_KEY")
     private String _correlatorKey;
-    
@OneToMany(targetEntity=MessageRouteDAOImpl.class,mappedBy="_correlator",fetch=FetchType.EAGER,cascade={CascadeType.ALL})
+    
@OneToMany(targetEntity=MessageRouteDAOImpl.class,mappedBy="_correlator",fetch=FetchType.EAGER,cascade={CascadeType.MERGE,
 CascadeType.PERSIST, CascadeType.REFRESH})
     private Collection<MessageRouteDAOImpl> _routes = new 
ArrayList<MessageRouteDAOImpl>();
-    
@OneToMany(targetEntity=MessageExchangeDAOImpl.class,mappedBy="_correlator",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
+    
@OneToMany(targetEntity=MessageExchangeDAOImpl.class,mappedBy="_correlator",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,
 CascadeType.PERSIST, CascadeType.REFRESH})
     private Collection<MessageExchangeDAOImpl> _exchanges = new 
ArrayList<MessageExchangeDAOImpl>();
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="PROC_ID")
     private ProcessDAOImpl _process;
@@ -88,6 +87,7 @@
 
     }
 
+    @SuppressWarnings("unchecked")
     public List<MessageRouteDAO> findRoute(CorrelationKey correlationKey) {
         Query qry = getEM().createNamedQuery("RouteByCKey");
         qry.setParameter("ckey", correlationKey == null ? "%" : 
correlationKey.toCanonicalString());

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/EventDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/EventDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/EventDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/EventDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -31,6 +31,8 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import java.sql.Timestamp;
 
@@ -39,8 +41,14 @@
  */
 @Entity
 @Table(name="ODE_EVENT")
[EMAIL PROTECTED]({
+    @NamedQuery(name=EventDAOImpl.DELETE_EVENTS_BY_PROCESS, query="delete from 
EventDAOImpl as e where e._instance._process = :process"),
+    @NamedQuery(name=EventDAOImpl.DELETE_EVENTS_BY_INSTANCE, query="delete 
from EventDAOImpl as e where e._instance = :instance")
+})
 public class EventDAOImpl {
-
+       public final static String DELETE_EVENTS_BY_PROCESS = 
"DELETE_EVENTS_BY_PROCESS";
+       public final static String DELETE_EVENTS_BY_INSTANCE = 
"DELETE_EVENTS_BY_INSTANCE";
+       
     @Id @Column(name="EVENT_ID")
        @GeneratedValue(strategy= GenerationType.AUTO)
        private Long _id;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/FaultDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/FaultDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/FaultDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/FaultDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -30,16 +30,25 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.xml.namespace.QName;
 
 
 @Entity
 @Table(name="ODE_FAULT")
[EMAIL PROTECTED]({
+       @NamedQuery(name=FaultDAOImpl.DELETE_FAULTS_BY_PROCESS, query="delete 
from FaultDAOImpl as f where f._id in(select i._fault from 
ProcessInstanceDAOImpl as i where i._process = :process)"),
+       @NamedQuery(name=FaultDAOImpl.DELETE_FAULTS_BY_INSTANCE, query="delete 
from FaultDAOImpl as f where f._id in(select i._fault from 
ProcessInstanceDAOImpl as i where i = :instance)")
+})
 public class FaultDAOImpl implements FaultDAO {
-
+       public final static String DELETE_FAULTS_BY_PROCESS = 
"DELETE_FAULTS_BY_PROCESS";
+       public final static String DELETE_FAULTS_BY_INSTANCE = 
"DELETE_FAULTS_BY_INSTANCE";
+       
        @Id @Column(name="FAULT_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
+       @SuppressWarnings("unused")
        private Long _id;
        @Basic @Column(name="NAME")
     private String _name;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -35,17 +35,23 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 import javax.xml.namespace.QName;
 
-
 @Entity
 @Table(name="ODE_MESSAGE")
[EMAIL PROTECTED]({
+       @NamedQuery(name=MessageDAOImpl.DELETE_MESSAGES_BY_PROCESS, 
query="delete from MessageDAOImpl as m where m._messageExchange._process = 
:process")
+})
 public class MessageDAOImpl implements MessageDAO {
-
+       public final static String DELETE_MESSAGES_BY_PROCESS = 
"DELETE_MESSAGES_BY_PROCESS";
+       
        @Id @Column(name="MESSAGE_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
+       @SuppressWarnings("unused")
        private Long _id;
        @Basic @Column(name="TYPE")
     private String _type;
@@ -61,8 +67,8 @@
        private MessageExchangeDAOImpl _messageExchange;
 
        public MessageDAOImpl() {
-               
        }
+       
        public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
                _type = type.toString();
                _messageExchange = me;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -19,6 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
@@ -37,6 +39,8 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -51,8 +55,16 @@
 
 @Entity
 @Table(name="ODE_MESSAGE_EXCHANGE")
-public class MessageExchangeDAOImpl implements MessageExchangeDAO {
-
[EMAIL PROTECTED]({
+    @NamedQuery(name=MessageExchangeDAOImpl.DELETE_MEXS_BY_PROCESS, 
query="delete from MessageExchangeDAOImpl as m where m._process = :process"),
+    @NamedQuery(name=MessageExchangeDAOImpl.DELETE_MEXS_BY_INSTANCE, 
query="delete from MessageExchangeDAOImpl as m where m._processInst = 
:instance")
+})
+public class MessageExchangeDAOImpl extends OpenJPADAO implements 
MessageExchangeDAO {
+       private static final Log __log = 
LogFactory.getLog(MessageExchangeDAOImpl.class);
+       
+       public final static String DELETE_MEXS_BY_PROCESS = 
"DELETE_MEXS_BY_PROCESS";
+       public final static String DELETE_MEXS_BY_INSTANCE = 
"DELETE_MEXS_BY_INSTANCE";
+       
        @Id @Column(name="MESSAGE_EXCHANGE_ID") 
        private String _id;
        @Basic @Column(name="CALLEE")
@@ -110,7 +122,8 @@
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="CORR_ID")
     private CorrelatorDAOImpl _correlator;
 
-    public MessageExchangeDAOImpl() {}
+    public MessageExchangeDAOImpl() {
+    }
     
        public MessageExchangeDAOImpl(char direction){
                _direction = direction;
@@ -331,7 +344,19 @@
         return correlationKeys;
     }
 
-    public CorrelatorDAOImpl getCorrelator() {
+       public void release(boolean doClean) {
+               if( doClean ) {
+                       deleteMessages();
+               }
+       }
+
+       public void deleteMessages() {
+               if( __log.isDebugEnabled() ) __log.debug("Deleting message on 
MEX release.");
+               
+               getEM().remove(this); // This deletes MexProperty, REQUEST 
MessageDAO, RESPONSE MessageDAO
+       }
+
+       public CorrelatorDAOImpl getCorrelator() {
         return _correlator;
     }
 

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageRouteDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -32,11 +32,19 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 @Entity
 @Table(name="ODE_MESSAGE_ROUTE")
[EMAIL PROTECTED] ({
+       @NamedQuery(name=MessageRouteDAOImpl.DELETE_MESSAGE_ROUTES_BY_PROCESS, 
query="delete from MessageRouteDAOImpl as r where r._processInst._process = 
:process"),
+       @NamedQuery(name=MessageRouteDAOImpl.DELETE_MESSAGE_ROUTES_BY_INSTANCE, 
query="delete from MessageRouteDAOImpl as r where r._processInst = :instance")
+})
 public class MessageRouteDAOImpl implements MessageRouteDAO {
+       public final static String DELETE_MESSAGE_ROUTES_BY_PROCESS = 
"DELETE_MESSAGE_ROUTES_BY_PROCESS";
+       public final static String DELETE_MESSAGE_ROUTES_BY_INSTANCE = 
"DELETE_MESSAGE_ROUTES_BY_INSTANCE";
        
        @Id @Column(name="MESSAGE_ROUTE_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
@@ -53,6 +61,7 @@
     @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="PROCESS_INSTANCE_ID")
     private ProcessInstanceDAOImpl _processInst;
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="CORR_ID")
+    @SuppressWarnings("unused")
     private CorrelatorDAOImpl _correlator;
 
     public MessageRouteDAOImpl() {}

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
 Fri Oct 31 16:49:23 2008
@@ -28,6 +28,8 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 /**
@@ -35,10 +37,15 @@
  */
 @Entity
 @Table(name="ODE_MEX_PROP")
[EMAIL PROTECTED]({
+       @NamedQuery(name=MexProperty.DELETE_MEX_PROPERTIES_BY_PROCESS, 
query="delete from MexProperty as p where p._mex._process = :process")
+})
 public class MexProperty {
+       public final static String DELETE_MEX_PROPERTIES_BY_PROCESS = 
"DELETE_MEX_PROPERTIES_BY_PROCESS";
 
     @Id @Column(name="ID")
     @GeneratedValue(strategy=GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _id;
     @Basic @Column(name="PROP_KEY")
     private String propertyKey;
@@ -46,6 +53,7 @@
     private String propertyValue;
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST})
     @Column(name="MEX_ID")
+    @SuppressWarnings("unused")
     private MessageExchangeDAOImpl _mex;
 
     public MexProperty() {

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/PartnerLinkDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/PartnerLinkDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/PartnerLinkDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/PartnerLinkDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -34,16 +34,25 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 import javax.xml.namespace.QName;
 
 @Entity
 @Table(name="ODE_PARTNER_LINK")
[EMAIL PROTECTED]({
+    @NamedQuery(name=PartnerLinkDAOImpl.DELETE_PARTNER_LINKS_BY_PROCESS, 
query="delete from PartnerLinkDAOImpl as l where l._scope in (select s from 
ScopeDAOImpl s where s._processInstance._process = :process)"),
+    @NamedQuery(name=PartnerLinkDAOImpl.DELETE_PARTNER_LINKS_BY_INSTANCE, 
query="delete from PartnerLinkDAOImpl as l where l._scope in (select s from 
ScopeDAOImpl s where s._processInstance = :instance)")
+})
 public class PartnerLinkDAOImpl implements PartnerLinkDAO {
-
+       public final static String DELETE_PARTNER_LINKS_BY_PROCESS = 
"DELETE_PARTNER_LINKS_BY_PROCESS";
+       public final static String DELETE_PARTNER_LINKS_BY_INSTANCE = 
"DELETE_PARTNER_LINKS_BY_INSTANCE";
+       
        @Id @Column(name="PARTNER_LINK_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
+       @SuppressWarnings("unused")
        private Long _id;
        @Lob @Column(name="MY_EPR")
     private String _myEPR;
@@ -69,6 +78,7 @@
     private String _partnerSessionId;
 
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="SCOPE_ID")
+    @SuppressWarnings("unused")
     private ScopeDAOImpl _scope;
 
     public PartnerLinkDAOImpl() {}

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -19,8 +19,11 @@
 
 package org.apache.ode.dao.jpa;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
+import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 
@@ -36,18 +39,15 @@
 @Entity
 @Table(name="ODE_PROCESS")
 @NamedQueries({
-    @NamedQuery(name="InstanceByCKey", query="SELECT 
cs._scope._processInstance " +
-            "FROM CorrelationSetDAOImpl as cs " +
-            "WHERE cs._correlationKey = :ckey"),
-            
-    @NamedQuery(name="CorrelatorByKey", query="SELECT c " +
-            "FROM CorrelatorDAOImpl as c" +
-            " WHERE c._correlatorKey = :ckey AND c._process = :process")
+    @NamedQuery(name="InstanceByCKey", query="select 
cs._scope._processInstance from CorrelationSetDAOImpl as cs where 
cs._correlationKey = :ckey"),
+    @NamedQuery(name="CorrelatorByKey", query="select c from CorrelatorDAOImpl 
as c where c._correlatorKey = :ckey and c._process = :process")
 })
 public class ProcessDAOImpl extends OpenJPADAO implements ProcessDAO {
-
+       private static final Log __log = 
LogFactory.getLog(ProcessDAOImpl.class);
+       
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _id;
 
     @Basic @Column(name="PROCESS_ID")
@@ -78,6 +78,7 @@
         return corr;
     }
 
+       @SuppressWarnings("unchecked")
     public CorrelatorDAO getCorrelator(String correlatorId) {
         Query qry = getEM().createNamedQuery("CorrelatorByKey");
         qry.setParameter("ckey", correlatorId);
@@ -95,7 +96,15 @@
                return inst;
        }
 
-       @SuppressWarnings("unchecked")
+    public ProcessInstanceDAO createInstance(
+                       CorrelatorDAO instantiatingCorrelator, 
MessageExchangeDAO mex) {
+               ProcessInstanceDAOImpl inst = new 
ProcessInstanceDAOImpl((CorrelatorDAOImpl)instantiatingCorrelator, this);
+               getEM().persist(inst);
+               _numInstances++;
+               return inst;
+       }
+
+    @SuppressWarnings("unchecked")
     public Collection<ProcessInstanceDAO> findInstance(CorrelationKey ckey) {
                Query qry = getEM().createNamedQuery("InstanceByCKey");
         qry.setParameter("ckey", ckey.toCanonicalString());
@@ -115,9 +124,48 @@
        }
 
     public void delete() {
-        getEM().remove(this);
+               if(__log.isDebugEnabled()) __log.debug("Cleaning up process 
data.");
+
+        deleteEvents();
+        deleteCorrelations();
+               deleteMessages();
+               deleteVariables();
+               deleteProcessInstances();
+        getEM().remove(this); // This deletes CorrelatorDAO
+        getEM().flush();
+    }
+
+    private void deleteProcessInstances() {
+               
getEM().createNamedQuery(FaultDAOImpl.DELETE_FAULTS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+    }
+
+    private void deleteVariables() {
+               
getEM().createNamedQuery(XmlDataProperty.DELETE_XML_DATA_PROPERTIES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(XmlDataDAOImpl.DELETE_XMLDATA_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+
+               
getEM().createNamedQuery(PartnerLinkDAOImpl.DELETE_PARTNER_LINKS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(ScopeDAOImpl.DELETE_SCOPES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
     }
 
+       private void deleteMessages() {
+               
getEM().createNamedQuery(MessageDAOImpl.DELETE_MESSAGES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(MexProperty.DELETE_MEX_PROPERTIES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(MessageExchangeDAOImpl.DELETE_MEXS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(MessageRouteDAOImpl.DELETE_MESSAGE_ROUTES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(CorrelatorDAOImpl.DELETE_CORRELATORS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+       }
+
+    private void deleteCorrelations() {
+               
getEM().createNamedQuery(CorrSetProperty.DELETE_CORSET_PROPERTIES_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+               
getEM().createNamedQuery(CorrelationSetDAOImpl.DELETE_CORRELATION_SETS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+    }
+
+    private void deleteEvents() {
+               
getEM().createNamedQuery(EventDAOImpl.DELETE_EVENTS_BY_PROCESS).setParameter("process",
 this).executeUpdate();
+       }
+
     public int getNumInstances() {
         return _numInstances;
     }

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -19,18 +19,22 @@
 
 package org.apache.ode.dao.jpa;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
 import org.apache.ode.bpel.dao.FaultDAO;
+import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.dao.ScopeDAO;
 import org.apache.ode.bpel.dao.ScopeStateEnum;
 import org.apache.ode.bpel.dao.XmlDataDAO;
 import org.apache.ode.bpel.evt.ProcessInstanceEvent;
+import org.apache.ode.bpel.iapi.ProcessConf.CLEANUP_CATEGORY;
 import org.w3c.dom.Element;
 
 import javax.persistence.Basic;
@@ -47,7 +51,6 @@
 import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
-import javax.persistence.Query;
 import javax.persistence.Table;
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
@@ -60,10 +63,13 @@
 @Entity
 @Table(name="ODE_PROCESS_INSTANCE")
 @NamedQueries({
-    @NamedQuery(name="ScopeById", query="SELECT s FROM ScopeDAOImpl as s WHERE 
s._scopeInstanceId = :sid and s._processInstance = :instance")
-        })
+       @NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS, 
query="delete from ProcessInstanceDAOImpl as i where i._process = :process")
+})
 public class ProcessInstanceDAOImpl extends OpenJPADAO implements 
ProcessInstanceDAO {
-
+       private static final Log __log = 
LogFactory.getLog(ProcessInstanceDAOImpl.class);
+       
+       public final static String DELETE_INSTANCES_BY_PROCESS = 
"DELETE_INSTANCES_BY_PROCESS";
+       
     @Id @Column(name="ID")
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long _instanceId;
@@ -82,25 +88,29 @@
        @Basic @Column(name="DATE_CREATED")
     private Date _dateCreated = new Date();
        
-       @OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.ALL}) 
@Column(name="ROOT_SCOPE_ID")
+       @OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.MERGE, 
CascadeType.PERSIST, CascadeType.REFRESH}) @Column(name="ROOT_SCOPE_ID")
        private ScopeDAOImpl _rootScope;
-       
@OneToMany(targetEntity=ScopeDAOImpl.class,mappedBy="_processInstance",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
+       
@OneToMany(targetEntity=ScopeDAOImpl.class,mappedBy="_processInstance",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,
 CascadeType.PERSIST, CascadeType.REFRESH})
        private Collection<ScopeDAO> _scopes = new ArrayList<ScopeDAO>();
        
@OneToMany(targetEntity=ActivityRecoveryDAOImpl.class,mappedBy="_instance",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
     private Collection<ActivityRecoveryDAO> _recoveries = new 
ArrayList<ActivityRecoveryDAO>();
-       @OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.ALL}) 
@Column(name="FAULT_ID")
+       @OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.MERGE, 
CascadeType.PERSIST, CascadeType.REFRESH}) @Column(name="FAULT_ID")
        private FaultDAOImpl _fault;
        @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="PROCESS_ID")
        private ProcessDAOImpl _process;
        @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="INSTANTIATING_CORRELATOR_ID")
        private CorrelatorDAOImpl _instantiatingCorrelator;
+
+       
@OneToMany(targetEntity=MessageExchangeDAOImpl.class,mappedBy="_processInst",fetch=FetchType.LAZY)
+       @SuppressWarnings("unused")
+       private Collection<MessageExchangeDAO> _messageExchanges = new 
ArrayList<MessageExchangeDAO>();
        
        public ProcessInstanceDAOImpl() {}
        public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator, 
ProcessDAOImpl process) {
                _instantiatingCorrelator = correlator;
                _process = process;
        }
-       
+
        public void createActivityRecovery(String channel, long activityId,
                        String reason, Date dateTime, Element data, String[] 
actions,
                        int retries) {
@@ -121,12 +131,58 @@
                return ret;
        }
 
-       public void delete() {
-               if (getEM() != null ) {
-                       getEM().remove(this);
+       public void delete(Set<CLEANUP_CATEGORY> cleanupCategories) {
+               if(__log.isDebugEnabled()) __log.debug("Cleaning up instance 
Data with " + cleanupCategories);
+               
+               // remove jacob state
+               setExecutionState(null);
+               if (getEM() != null) {
+                       if 
(cleanupCategories.contains(CLEANUP_CATEGORY.EVENTS)) {
+                               deleteEvents();
+                       }
+                       if 
(cleanupCategories.contains(CLEANUP_CATEGORY.CORRELATIONS)) {
+                               deleteCorrelations();
+                       }
+                       if( 
cleanupCategories.contains(CLEANUP_CATEGORY.MESSAGES) ) {
+                               deleteMessageRoutes();
+                       }
+                       if 
(cleanupCategories.contains(CLEANUP_CATEGORY.VARIABLES)) {
+                               deleteVariables();
+                       }
+                       if 
(cleanupCategories.contains(CLEANUP_CATEGORY.INSTANCE)) {
+                               deleteInstance();
+                       }
+
+                       getEM().flush();
                }
        }
+       
+       private void deleteInstance() {
+               
getEM().createNamedQuery(FaultDAOImpl.DELETE_FAULTS_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();                
+               getEM().remove(this); // This deletes ActivityRecoveryDAO 
+       }
+       
+       private void deleteVariables() {
+               
getEM().createNamedQuery(XmlDataProperty.DELETE_XML_DATA_PROPERTIES_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
+               
getEM().createNamedQuery(XmlDataDAOImpl.DELETE_XMLDATA_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
 
+               
getEM().createNamedQuery(PartnerLinkDAOImpl.DELETE_PARTNER_LINKS_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
+               
getEM().createNamedQuery(ScopeDAOImpl.DELETE_SCOPES_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
+       }
+
+       private void deleteMessageRoutes() {
+               
getEM().createNamedQuery(MessageRouteDAOImpl.DELETE_MESSAGE_ROUTES_BY_INSTANCE).setParameter
 ("instance", this).executeUpdate();
+       }
+       
+       private void deleteCorrelations() {
+               
getEM().createNamedQuery(CorrSetProperty.DELETE_CORSET_PROPERTIES_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
+               
getEM().createNamedQuery(CorrelationSetDAOImpl.DELETE_CORRELATION_SETS_BY_INSTANCE).setParameter("instance",
 this).executeUpdate();
+       }
+
+       private void deleteEvents() {
+               
getEM().createNamedQuery(EventDAOImpl.DELETE_EVENTS_BY_INSTANCE).setParameter 
("instance", this).executeUpdate();
+       }
+       
        public void deleteActivityRecovery(String channel) {
         ActivityRecoveryDAOImpl toRemove = null;
         for (ActivityRecoveryDAO _recovery : _recoveries) {
@@ -142,7 +198,7 @@
         }
 
     }
-
+       
        public void finishCompletion() {
            // make sure we have completed.
            assert (ProcessState.isFinished(this.getState()));

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ScopeDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -48,10 +48,14 @@
 @Entity
 @Table(name="ODE_SCOPE")
 @NamedQueries({
-    @NamedQuery(name="ScopeEvents", query="SELECT se FROM EventDAOImpl as se 
WHERE se._scopeId = :sid")
-        })
+    @NamedQuery(name="ScopeEvents", query="SELECT se FROM EventDAOImpl as se 
WHERE se._scopeId = :sid"),
+    @NamedQuery(name=ScopeDAOImpl.DELETE_SCOPES_BY_PROCESS, query="delete from 
ScopeDAOImpl as s where s._processInstance._process = :process"),
+    @NamedQuery(name=ScopeDAOImpl.DELETE_SCOPES_BY_INSTANCE, query="delete 
from ScopeDAOImpl as s where s._processInstance = :instance")
+})
 public class ScopeDAOImpl extends OpenJPADAO implements ScopeDAO {
-
+       public final static String DELETE_SCOPES_BY_PROCESS = 
"DELETE_SCOPES_BY_PROCESS";
+       public final static String DELETE_SCOPES_BY_INSTANCE = 
"DELETE_SCOPES_BY_INSTANCE";
+       
     @Id @Column(name="SCOPE_ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
        private Long _scopeInstanceId;
@@ -71,9 +75,9 @@
        private Collection<ScopeDAO> _childScopes = new ArrayList<ScopeDAO>();
        
@OneToMany(targetEntity=CorrelationSetDAOImpl.class,mappedBy="_scope",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
        private Collection<CorrelationSetDAO> _correlationSets = new 
ArrayList<CorrelationSetDAO>();
-       
@OneToMany(targetEntity=PartnerLinkDAOImpl.class,mappedBy="_scope",fetch= 
FetchType.LAZY,cascade={CascadeType.ALL})
+       
@OneToMany(targetEntity=PartnerLinkDAOImpl.class,mappedBy="_scope",fetch= 
FetchType.LAZY,cascade={CascadeType.MERGE, CascadeType.REFRESH, 
CascadeType.PERSIST})
     private Collection<PartnerLinkDAO> _partnerLinks = new 
ArrayList<PartnerLinkDAO>();
-       
@OneToMany(targetEntity=XmlDataDAOImpl.class,mappedBy="_scope",fetch=FetchType.LAZY,cascade={CascadeType.ALL})
+       
@OneToMany(targetEntity=XmlDataDAOImpl.class,mappedBy="_scope",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,
 CascadeType.REFRESH, CascadeType.PERSIST})
        private Collection<XmlDataDAO> _variables = new ArrayList<XmlDataDAO>();
        @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
@Column(name="PROCESS_INSTANCE_ID")
        private ProcessInstanceDAOImpl _processInstance;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataDAOImpl.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataDAOImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataDAOImpl.java
 Fri Oct 31 16:49:23 2008
@@ -37,6 +37,8 @@
 import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.persistence.Transient;
@@ -48,10 +50,17 @@
  */
 @Entity
 @Table(name="ODE_XML_DATA")
[EMAIL PROTECTED]({
+    @NamedQuery(name=XmlDataDAOImpl.DELETE_XMLDATA_BY_PROCESS, query="delete 
from XmlDataDAOImpl as x where x._scope in (select s from ScopeDAOImpl s where 
s._processInstance._process = :process)"),
+    @NamedQuery(name=XmlDataDAOImpl.DELETE_XMLDATA_BY_INSTANCE, query="delete 
from XmlDataDAOImpl as x where x._scope in (select s from ScopeDAOImpl s where 
s._processInstance = :instance)")
+})
 public class XmlDataDAOImpl implements XmlDataDAO {
+       public final static String DELETE_XMLDATA_BY_PROCESS = 
"DELETE_XMLDATA_BY_PROCESS";
+       public final static String DELETE_XMLDATA_BY_INSTANCE = 
"DELETE_XMLDATA_BY_INSTANCE";
        
        @Id @Column(name="XML_DATA_ID") 
        @GeneratedValue(strategy=GenerationType.AUTO)
+       @SuppressWarnings("unused")
        private Long _id;
        @Lob @Column(name="DATA")
     private String _data;

Modified: 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataProperty.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataProperty.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataProperty.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/XmlDataProperty.java
 Fri Oct 31 16:49:23 2008
@@ -28,6 +28,8 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 /**
@@ -35,10 +37,17 @@
  */
 @Entity
 @Table(name="ODE_XML_DATA_PROP")
[EMAIL PROTECTED]({
+       @NamedQuery(name=XmlDataProperty.DELETE_XML_DATA_PROPERTIES_BY_PROCESS, 
query="delete from XmlDataProperty as p where 
p._xmlData._scope._processInstance._process = :process"),
+       
@NamedQuery(name=XmlDataProperty.DELETE_XML_DATA_PROPERTIES_BY_INSTANCE, 
query="delete from XmlDataProperty as p where 
p._xmlData._scope._processInstance = :instance")
+})
 public class XmlDataProperty {
-
+       public final static String DELETE_XML_DATA_PROPERTIES_BY_PROCESS = 
"DELETE_XML_DATA_PROPERTIES_BY_PROCESS";
+       public final static String DELETE_XML_DATA_PROPERTIES_BY_INSTANCE = 
"DELETE_XML_DATA_PROPERTIES_BY_INSTANCE";
+       
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
+    @SuppressWarnings("unused")
     private Long _id;
     @Basic @Column(name="PROP_KEY")
     private String propertyKey;
@@ -46,6 +55,7 @@
     private String propertyValue;
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST})
     @Column(name="XML_DATA_ID")
+    @SuppressWarnings("unused")
     private XmlDataDAOImpl _xmlData;
 
     public XmlDataProperty() {

Modified: 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeService.java?rev=709602&r1=709601&r2=709602&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
 Fri Oct 31 16:49:23 2008
@@ -22,6 +22,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.iapi.Endpoint;
 import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.bpel.iapi.MessageExchange;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
 import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
 import org.apache.ode.jbi.msgmap.Mapper;
@@ -200,7 +201,7 @@
         default:
             __log.warn("Received ODE message exchange in unexpected state: " + 
mex.getStatus());
         }
-        mex.release();
+        mex.release(mex.getStatus() == MessageExchange.Status.RESPONSE);
     }
 
     /**


Reply via email to