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}<[EMAIL PROTECTED] HPartnerLink}> 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); } /**
