You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ka...@apache.org on 2009/03/11 22:28:37 UTC
svn commit: r752626 - in /ode/trunk:
axis2-war/src/test/java/org/apache/ode/axis2/management/
bpel-api/src/main/java/org/apache/ode/bpel/pmapi/
bpel-api/src/main/java/org/apache/ode/bpel/rapi/
bpel-dao/src/main/java/org/apache/ode/bpel/dao/ dao-hiberna...
Author: karthick
Date: Wed Mar 11 21:28:36 2009
New Revision: 752626
URL: http://svn.apache.org/viewvc?rev=752626&view=rev
Log:
ODE-446 Improve performance of InstanceManagement
Modified:
ode/trunk/axis2-war/src/test/java/org/apache/ode/axis2/management/InstanceManagementTest.java
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java
ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelationSet.java
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
ode/trunk/engine/src/test/java/org/apache/ode/bpel/runtime/ActivityRecoveryTest.java
Modified: ode/trunk/axis2-war/src/test/java/org/apache/ode/axis2/management/InstanceManagementTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2-war/src/test/java/org/apache/ode/axis2/management/InstanceManagementTest.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/axis2-war/src/test/java/org/apache/ode/axis2/management/InstanceManagementTest.java (original)
+++ ode/trunk/axis2-war/src/test/java/org/apache/ode/axis2/management/InstanceManagementTest.java Wed Mar 11 21:28:36 2009
@@ -122,7 +122,8 @@
@Test
public void testGetScopeInfo() throws Exception {
- OMElement root = _client.buildMessage("listAllInstances", new String[] {}, new String[] {});
+ OMElement root = _client.buildMessage("listInstances", new String[] {"filter", "order", "limit"},
+ new String[] {"name=DynPartnerMain", "", "10"});
OMElement result = sendToIM(root);
String siid = result.getFirstElement().getFirstChildWithName(new QName(Namespaces.ODE_PMAPI, "instance-info"))
.getFirstChildWithName(new QName(Namespaces.ODE_PMAPI, "root-scope"))
Modified: ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java (original)
+++ ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java Wed Mar 11 21:28:36 2009
@@ -124,6 +124,17 @@
*/
InstanceInfoListDocument listInstances(String filter, String order, int limit);
+ /**
+ * List instances and only return summary information about the instance,
+ * combined with all correlation properties.
+ *
+ * @param filter See listInstances' filter argument
+ * @param order See listInstances' order argument
+ * @param limit maximum number of instances to return
+ * @return list of matching instances
+ */
+ InstanceInfoListDocument listInstancesSummary(String filter, String order, int limit);
+
/** @deprecated use listInstances instead */
InstanceInfoListDocument queryInstances(String query);
@@ -131,6 +142,8 @@
* List all instances in the default (database) order.
* @see #listInstances(String, String, int)
* @return list of matching instances
+ * @deprecated As of Ode 1.3, this method is deprecated in favor of
+ * listInstancesSummary(filter, order, limit)
*/
InstanceInfoListDocument listAllInstances();
@@ -139,6 +152,8 @@
* @see #listInstances(String, String, int)
* @param limit maximum number of instances to return
* @return list of matching instances
+ * @deprecated As of Ode 1.3, this method is deprecated in favor of
+ * listInstancesSummary(filter, order, limit)
*/
InstanceInfoListDocument listAllInstancesWithLimit(int limit);
Modified: ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java (original)
+++ ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java Wed Mar 11 21:28:36 2009
@@ -24,4 +24,6 @@
int getModelVersion();
ConstantsModel getConstantsModel();
+
+ ScopeModel getProcessScope();
}
Modified: ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java (original)
+++ ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java Wed Mar 11 21:28:36 2009
@@ -18,15 +18,17 @@
*/
package org.apache.ode.bpel.dao;
+import java.util.Date;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
import org.apache.ode.bpel.common.BpelEventFilter;
import org.apache.ode.bpel.common.InstanceFilter;
import org.apache.ode.bpel.evt.BpelEvent;
-import javax.xml.namespace.QName;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
/**
* Represents the physical resource for connecting to the bpel state store.
*/
@@ -105,6 +107,8 @@
Collection<ProcessInstanceDAO> instanceQuery(String expression);
+ Map<Long, Collection<CorrelationSetDAO>> getCorrelationSets(Collection<ProcessInstanceDAO> instances);
+
ProcessDAO createProcess(QName pid, QName type, String guid, long version);
/**
@@ -121,4 +125,10 @@
void releaseMessageExchange(String mexid);
+ /**
+ * Returns an interface for process and instance management.
+ *
+ * @return a ProcessManagement DAO
+ */
+ ProcessManagementDAO getProcessManagement();
}
Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java Wed Mar 11 21:28:36 2009
@@ -256,4 +256,32 @@
return result;
}
+ @SuppressWarnings("unchecked")
+ public Map<Long, Collection<CorrelationSetDAO>> getCorrelationSets(Collection<ProcessInstanceDAO> instances) {
+ if (instances.size() == 0) {
+ return new HashMap<Long, Collection<CorrelationSetDAO>>();
+ }
+ Long[] iids = new Long[instances.size()];
+ int i=0;
+ for (ProcessInstanceDAO dao: instances) {
+ iids[i] = dao.getInstanceId();
+ i++;
+ }
+ Collection<HCorrelationSet> csets = _session.getNamedQuery(HCorrelationSet.SELECT_CORSETS_BY_INSTANCES).setParameterList("instances", iids).list();
+ Map<Long, Collection<CorrelationSetDAO>> map = new HashMap<Long, Collection<CorrelationSetDAO>>();
+ for (HCorrelationSet cset: csets) {
+ Long id = cset.getInstance().getId();
+ Collection<CorrelationSetDAO> existing = map.get(id);
+ if (existing == null) {
+ existing = new ArrayList<CorrelationSetDAO>();
+ map.put(id, existing);
+ }
+ existing.add(new CorrelationSetDaoImpl(_sm, cset));
+ }
+ return map;
+ }
+
+ public ProcessManagementDAO getProcessManagement() {
+ return new ProcessManagementDaoImpl(_sm);
+ }
}
Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelationSet.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelationSet.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelationSet.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelationSet.java Wed Mar 11 21:28:36 2009
@@ -25,8 +25,11 @@
* Hibernate table representing correlation set values.
*
* @hibernate.class table="BPEL_CORRELATION_SET"
+ * @hibernate.query name="SELECT_CORSETS_BY_INSTANCES" query="from HCorrelationSet as c left join fetch c.properties where c.instance.id in (:instances)"
*/
public class HCorrelationSet extends HObject {
+ public static final String SELECT_CORSETS_BY_INSTANCES = "SELECT_CORSETS_BY_INSTANCES";
+
private HProcess _process;
private HProcessInstance _instance;
private Collection<HCorrelationProperty> _properties = new HashSet<HCorrelationProperty>();
Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java Wed Mar 11 21:28:36 2009
@@ -28,8 +28,16 @@
* Hibernate table representing a BPEL process instance.
*
* @hibernate.class table="BPEL_INSTANCE" dynamic-update="true" lazy="true"
+ * @hibernate.query name="COUNT_INSTANCES_BY_STATUS_AND_PROCESS_ID" query="select count(i.id) as cnt, max(i.activityFailureDateTime) as lastFailureDt from HProcessInstance as i where i.process.processId = :processId and i.state in(:states) and i.activityFailureCount > 0"
+ * @hibernate.query name="COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID" query="select count(i.id) as cnt, max(i.activityFailureDateTime) as lastFailureDt from HProcessInstance as i where i.process.processId = :processId and i.state in(:states) and i.activityFailureCount > 0"
+ * @hibernate.query name="SELECT_ACTIVE_INSTANCES" query="from HProcessInstance as i where i.process.id = :processId and i.state = :state"
*/
public class HProcessInstance extends HObject {
+ public static final String SELECT_ACTIVE_INSTANCES="SELECT_ACTIVE_INSTANCES";
+ public static final String DELETE_INSTANCES_BY_PROCESS="DELETE_INSTANCES_BY_PROCESS";
+ public static final String COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID="COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
+ public static final String COUNT_INSTANCeS_BY_STATUS_AND_PROCESS_ID="COUNT_INSTANCES_BY_STATUS_AND_PROCESS_ID";
+
/** Foreign key to owner {@link HProcess}. */
private HProcess _process;
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java Wed Mar 11 21:28:36 2009
@@ -20,9 +20,7 @@
package org.apache.ode.dao.jpa;
-import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
-import org.apache.ode.utils.DOMUtils;
-import org.w3c.dom.Element;
+import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
@@ -34,13 +32,26 @@
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;
+
+import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
+import org.apache.ode.utils.DOMUtils;
+import org.w3c.dom.Element;
@Entity
@Table(name="ODE_ACTIVITY_RECOVERY")
+@NamedQueries({
+ @NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_IDS, query="delete from ActivityRecoveryDAOImpl as a where a._instanceId in(:ids)"),
+ @NamedQuery(name=ActivityRecoveryDAOImpl.COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES,
+ query="select r._instanceId, count(r._id) from ActivityRecoveryDAOImpl r where r._instance in(:instances) group by r._instanceId")
+})
public class ActivityRecoveryDAOImpl implements ActivityRecoveryDAO {
+ public final static String DELETE_ACTIVITY_RECOVERIES_BY_IDS = "DELETE_ACTIVITY_RECOVERIES_BY_IDS";
+
+ public final static String COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES = "COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES";
@Id @Column(name="ID")
@GeneratedValue(strategy= GenerationType.AUTO)
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java Wed Mar 11 21:28:36 2009
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -38,9 +39,11 @@
import org.apache.ode.bpel.common.Filter;
import org.apache.ode.bpel.common.InstanceFilter;
import org.apache.ode.bpel.dao.BpelDAOConnection;
+import org.apache.ode.bpel.dao.CorrelationSetDAO;
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.ProcessManagementDAO;
import org.apache.ode.bpel.dao.ScopeDAO;
import org.apache.ode.bpel.evt.BpelEvent;
import org.apache.ode.bpel.evt.ScopeEvent;
@@ -322,4 +325,31 @@
public EntityManager getEntityManager() {
return _em;
}
+
+ @SuppressWarnings("unchecked")
+ public Map<Long, Collection<CorrelationSetDAO>> getCorrelationSets(Collection<ProcessInstanceDAO> instances) {
+ if (instances.size() == 0) {
+ return new HashMap<Long, Collection<CorrelationSetDAO>>();
+ }
+ ArrayList<Long> iids = new ArrayList<Long>(instances.size());
+ for (ProcessInstanceDAO dao: instances) {
+ iids.add(dao.getInstanceId());
+ }
+ Collection<CorrelationSetDAOImpl> csets = _em.createNamedQuery(CorrelationSetDAOImpl.SELECT_CORRELATION_SETS_BY_INSTANCES).setParameter("instances", iids).getResultList();
+ Map<Long, Collection<CorrelationSetDAO>> map = new HashMap<Long, Collection<CorrelationSetDAO>>();
+ for (CorrelationSetDAOImpl cset: csets) {
+ Long id = cset.getScope().getProcessInstance().getInstanceId();
+ Collection<CorrelationSetDAO> existing = map.get(id);
+ if (existing == null) {
+ existing = new ArrayList<CorrelationSetDAO>();
+ map.put(id, existing);
+ }
+ existing.add(cset);
+ }
+ return map;
+ }
+
+ public ProcessManagementDAO getProcessManagement() {
+ return new ProcessManagementDAOImpl(_em);
+ }
}
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelationSetDAOImpl.java Wed Mar 11 21:28:36 2009
@@ -19,9 +19,10 @@
package org.apache.ode.dao.jpa;
-import org.apache.ode.bpel.common.CorrelationKey;
-import org.apache.ode.bpel.dao.CorrelationSetDAO;
-import org.apache.ode.bpel.dao.ScopeDAO;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
@@ -32,17 +33,23 @@
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;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+
+import org.apache.ode.bpel.common.CorrelationKey;
+import org.apache.ode.bpel.dao.CorrelationSetDAO;
+import org.apache.ode.bpel.dao.ScopeDAO;
@Entity
@Table(name="ODE_CORRELATION_SET")
+@NamedQueries({
+ @NamedQuery(name=CorrelationSetDAOImpl.SELECT_CORRELATION_SETS_BY_INSTANCES, query="select c from CorrelationSetDAOImpl as c left join fetch c._scope left join fetch c._props where c._scope._processInstance._instanceId in (:instances)")
+})
public class CorrelationSetDAOImpl implements CorrelationSetDAO {
+ public final static String SELECT_CORRELATION_SETS_BY_INSTANCES = "SELECT_CORRELATION_SETS_BY_INSTANCES";
@Id @Column(name="CORRELATION_SET_ID")
@GeneratedValue(strategy=GenerationType.AUTO)
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java Wed Mar 11 21:28:36 2009
@@ -19,19 +19,12 @@
package org.apache.ode.dao.jpa;
-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.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.w3c.dom.Element;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
@@ -47,22 +40,45 @@
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;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+
+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.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.w3c.dom.Element;
@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="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"),
+ @NamedQuery(name=ProcessInstanceDAOImpl.SELECT_INSTANCE_IDS_BY_PROCESS, query="select i._instanceId from ProcessInstanceDAOImpl as i where i._process = :process"),
+ @NamedQuery(name=ProcessInstanceDAOImpl.SELECT_FAULT_IDS_BY_PROCESS, query="select i._faultId from ProcessInstanceDAOImpl as i where i._process = :process and i._faultId is not null"),
+ @NamedQuery(name=ProcessInstanceDAOImpl.COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID,
+ query="select count(i._instanceId), max(i._lastRecovery) from ProcessInstanceDAOImpl as i where i._process._processId = :processId and i._state in(:states) and exists(select r from ActivityRecoveryDAOImpl r where i = r._instance)")
+})
+
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";
+ public final static String SELECT_INSTANCE_IDS_BY_PROCESS = "SELECT_INSTANCE_IDS_BY_PROCESS";
+
+ public final static String SELECT_FAULT_IDS_BY_PROCESS = "SELECT_FAULT_IDS_BY_PROCESS";
+
+ public final static String COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID = "COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
@Id @Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
@@ -98,6 +114,8 @@
@ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) @Column(name="INSTANTIATING_CORRELATOR_ID")
private CorrelatorDAOImpl _instantiatingCorrelator;
+ private transient int _activityFailureCount = -1;
+
public ProcessInstanceDAOImpl() {}
public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator, ProcessDAOImpl process) {
_instantiatingCorrelator = correlator;
@@ -124,6 +142,11 @@
return ret;
}
+ @SuppressWarnings("unchecked")
+ public Collection<CorrelationSetDAO> selectCorrelationSets(Collection<ProcessInstanceDAO> instances) {
+ return getEM().createNamedQuery(CorrelationSetDAOImpl.SELECT_CORRELATION_SETS_BY_INSTANCES).setParameter("instances", instances).getResultList();
+ }
+
public void delete() {
if (getEM() != null ) {
getEM().remove(this);
@@ -157,7 +180,15 @@
}
public int getActivityFailureCount() {
- return _recoveries.size();
+ if( _activityFailureCount == -1 ) {
+ _activityFailureCount = _recoveries.size();
+ }
+
+ return _activityFailureCount;
+ }
+
+ public void setActivityFailureCount(int activityFailureCount) {
+ _activityFailureCount = activityFailureCount;
}
public Date getActivityFailureDateTime() {
Modified: ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java (original)
+++ ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java Wed Mar 11 21:28:36 2009
@@ -19,6 +19,21 @@
package org.apache.ode.bpel.engine;
+import java.io.File;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import javax.xml.namespace.QName;
+
import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -103,9 +118,9 @@
import org.apache.ode.bpel.pmapi.TVariableInfo;
import org.apache.ode.bpel.pmapi.TVariableRef;
import org.apache.ode.bpel.pmapi.VariableInfoDocument;
-import org.apache.ode.bpel.rapi.ProcessModel;
-import org.apache.ode.bpel.rapi.PartnerLinkModel;
import org.apache.ode.bpel.rapi.ActivityModel;
+import org.apache.ode.bpel.rapi.PartnerLinkModel;
+import org.apache.ode.bpel.rapi.ProcessModel;
import org.apache.ode.utils.ISO8601DateParser;
import org.apache.ode.utils.msg.MessageBundle;
import org.apache.ode.utils.stl.CollectionsX;
@@ -115,20 +130,6 @@
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import javax.xml.namespace.QName;
-import java.io.File;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
/**
* Implentation of the Process and InstanceManagement APIs.
*
@@ -304,14 +305,46 @@
return ret;
}
+ public InstanceInfoListDocument listInstancesSummary(String filter, String order, int limit) {
+ InstanceInfoListDocument ret = InstanceInfoListDocument.Factory.newInstance();
+ final TInstanceInfoList infolist = ret.addNewInstanceInfoList();
+ final InstanceFilter instanceFilter = new InstanceFilter(filter, order, limit);
+ try {
+ _db.exec(new BpelDatabase.Callable<Object>() {
+ public Object run(BpelDAOConnection conn) {
+ Collection<ProcessInstanceDAO> instances = conn.instanceQuery(instanceFilter);
+ Map<Long, Collection<CorrelationSetDAO>> icsets = conn.getCorrelationSets(instances);
+ conn.getProcessManagement().prefetchActivityFailureCounts(instances);
+ for (ProcessInstanceDAO instance : instances) {
+ TInstanceInfo info = infolist.addNewInstanceInfo();
+ fillInstanceSummary(info, instance);
+ Collection<CorrelationSetDAO> csets = icsets.get(instance.getInstanceId());
+ if (csets != null) {
+ for (CorrelationSetDAO cset: csets) {
+ Map<QName, String> props = cset.getProperties();
+ fillProperties(info, instance, props);
+ }
+ }
+ }
+ return null;
+ }
+ });
+ } catch (Exception e) {
+ __log.error("Exception while listing instances", e);
+ throw new ProcessingException("Exception while listing instances: " + e.toString());
+ }
+ return ret;
+ }
+
public InstanceInfoListDocument listAllInstances() {
- return listInstances(null, null, Integer.MAX_VALUE);
+ return listInstancesSummary(null, null, Integer.MAX_VALUE);
}
public InstanceInfoListDocument listAllInstancesWithLimit(int limit) {
- return listInstances(null, null, limit);
+ return listInstancesSummary(null, null, limit);
}
+
public InstanceInfoDocument getInstanceInfo(Long iid) throws InstanceNotFoundException {
return genInstanceInfoDocument(iid);
}
@@ -854,13 +887,22 @@
});
}
- private void fillInstanceInfo(TInstanceInfo info, ProcessInstanceDAO instance) {
+ private void fillProperties(TInstanceInfo info, ProcessInstanceDAO instance, Map<QName, String> props) {
+ TInstanceInfo.CorrelationProperties corrProperties = info.addNewCorrelationProperties();
+ for (Map.Entry<QName, String> property : props.entrySet()) {
+ TCorrelationProperty tproperty = corrProperties.addNewCorrelationProperty();
+ // not setting correlation-set id here -- too inconvenient for performance
+ // tproperty.setCsetid("" + cset.getCorrelationSetId());
+ tproperty.setPropertyName(property.getKey());
+ tproperty.setStringValue(property.getValue());
+ }
+ }
+
+ private void fillInstanceSummary(TInstanceInfo info, ProcessInstanceDAO instance) {
info.setIid("" + instance.getInstanceId());
ProcessDAO processDAO = instance.getProcess();
info.setPid(processDAO.getProcessId().toString());
info.setProcessName(processDAO.getType());
- if (instance.getRootScope() != null)
- info.setRootScope(genScopeRef(instance.getRootScope()));
info.setDtStarted(toCalendar(instance.getCreateTime()));
info.setDtLastActive(toCalendar(instance.getLastActiveTime()));
info.setStatus(__psc.cvtInstanceStatus(instance.getState()));
@@ -871,9 +913,26 @@
faultInfo.setAiid(instance.getFault().getActivityId());
faultInfo.setLineNumber(instance.getFault().getLineNo());
}
+ if (instance.getActivityFailureCount() > 0) {
+ TFailuresInfo failures = info.addNewFailures();
+ failures.setDtFailure(toCalendar(instance.getActivityFailureDateTime()));
+ failures.setCount(instance.getActivityFailureCount());
+ }
+ }
+
+ private void fillInstanceInfo(TInstanceInfo info, ProcessInstanceDAO instance) {
+ fillInstanceSummary(info, instance);
+
+ if (instance.getRootScope() != null)
+ info.setRootScope(genScopeRef(instance.getRootScope()));
ProcessInstanceDAO.EventsFirstLastCountTuple flc = instance.getEventsFirstLastCount();
TInstanceInfo.EventInfo eventInfo = info.addNewEventInfo();
+ if (flc != null) {
+ eventInfo.setFirstDtime(toCalendar(flc.first));
+ eventInfo.setLastDtime(toCalendar(flc.last));
+ eventInfo.setCount(flc.count);
+ }
// Setting valued correlation properties
if (!instance.getCorrelationSets().isEmpty()) {
@@ -888,12 +947,6 @@
}
}
- if (flc != null) {
- eventInfo.setFirstDtime(toCalendar(flc.first));
- eventInfo.setLastDtime(toCalendar(flc.last));
- eventInfo.setCount(flc.count);
- }
-
if (instance.getActivityFailureCount() > 0) {
TFailuresInfo failures = info.addNewFailures();
failures.setDtFailure(toCalendar(instance.getActivityFailureDateTime()));
Modified: ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java (original)
+++ ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java Wed Mar 11 21:28:36 2009
@@ -41,6 +41,7 @@
import org.apache.ode.bpel.common.InstanceFilter;
import org.apache.ode.bpel.common.ProcessFilter;
import org.apache.ode.bpel.dao.BpelDAOConnection;
+import org.apache.ode.bpel.dao.CorrelationSetDAO;
import org.apache.ode.bpel.dao.MessageExchangeDAO;
import org.apache.ode.bpel.dao.ProcessDAO;
import org.apache.ode.bpel.dao.ProcessInstanceDAO;
@@ -406,4 +407,21 @@
}
}
+ public Map<Long, Collection<CorrelationSetDAO>> getCorrelationSets(Collection<ProcessInstanceDAO> instances) {
+ Map<Long, Collection<CorrelationSetDAO>> map = new HashMap<Long, Collection<CorrelationSetDAO>>();
+ for (ProcessInstanceDAO instance: instances) {
+ Long id = instance.getInstanceId();
+ Collection<CorrelationSetDAO> existing = map.get(id);
+ if (existing == null) {
+ existing = new ArrayList<CorrelationSetDAO>();
+ map.put(id, existing);
+ }
+ existing.addAll(instance.getCorrelationSets());
+ }
+ return map;
+ }
+
+ public ProcessManagementDaoImpl getProcessManagement() {
+ return new ProcessManagementDaoImpl();
+ }
}
Modified: ode/trunk/engine/src/test/java/org/apache/ode/bpel/runtime/ActivityRecoveryTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/engine/src/test/java/org/apache/ode/bpel/runtime/ActivityRecoveryTest.java?rev=752626&r1=752625&r2=752626&view=diff
==============================================================================
--- ode/trunk/engine/src/test/java/org/apache/ode/bpel/runtime/ActivityRecoveryTest.java (original)
+++ ode/trunk/engine/src/test/java/org/apache/ode/bpel/runtime/ActivityRecoveryTest.java Wed Mar 11 21:28:36 2009
@@ -305,7 +305,7 @@
}
protected TInstanceInfo lastInstance() {
- TInstanceInfoList instances = _management.listAllInstances().getInstanceInfoList();
+ TInstanceInfoList instances = _management.listInstances("", "", 1000).getInstanceInfoList();
return instances.getInstanceInfoArray(instances.sizeOfInstanceInfoArray() - 1);
}