You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2008/12/15 22:51:24 UTC

svn commit: r726820 - in /ode/branches/APACHE_ODE_1.X: bpel-dao/src/main/java/org/apache/ode/bpel/dao/ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ dao-hibernate/src/main/java/org/apache/...

Author: boisvert
Date: Mon Dec 15 13:51:24 2008
New Revision: 726820

URL: http://svn.apache.org/viewvc?rev=726820&view=rev
Log:
ODE-460: Improve InstanceManagement.listInstancesSummary() to include failure information

Modified:
    ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java

Modified: ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java Mon Dec 15 13:51:24 2008
@@ -109,4 +109,10 @@
 
   MessageExchangeDAO getMessageExchange(String mexid);
 
+  /**
+   * Returns an interface for process and instance management.
+   * 
+   * @return a ProcessManagement DAO
+   */
+  ProcessManagementDAO getProcessManagement();
 }

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java Mon Dec 15 13:51:24 2008
@@ -314,6 +314,7 @@
                 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);
@@ -862,34 +863,23 @@
         instances.setCount(count);
     }
 
-    private void getInstanceSummaryActivityFailure(final TInstanceSummary summary, ProcessConf pconf) {
-        String queryStatus = InstanceFilter.StatusKeys.valueOf(TInstanceStatus.ACTIVE.toString()).toString()
-                .toLowerCase();
-        final InstanceFilter instanceFilter = new InstanceFilter("status=" + queryStatus 
-        		+ " pid="+ pconf.getProcessId());
+    private void getInstanceSummaryActivityFailure(final TInstanceSummary summary, final ProcessConf pconf) {
         dbexec(new BpelDatabase.Callable<Void>() {
-
             public Void run(BpelDAOConnection conn) throws Exception {
-                Date lastFailureDt = null;
-                int failureInstances = 0;
-                for (ProcessInstanceDAO instance : conn.instanceQuery(instanceFilter)) {
-                    int count = instance.getActivityFailureCount();
-                    if (count > 0) {
-                        ++failureInstances;
-                        Date failureDt = instance.getActivityFailureDateTime();
-                        if (lastFailureDt == null || lastFailureDt.before(failureDt))
-                            lastFailureDt = failureDt;
-                    }
-                }
+                String queryStatus = InstanceFilter.StatusKeys.valueOf(TInstanceStatus.ACTIVE.toString()).toString().toLowerCase();
+            	Object[] results = conn.getProcessManagement().findFailedCountAndLastFailedDateForProcessId(
+            			conn, queryStatus, String.valueOf(pconf.getProcessId()));
+            	
+            	long failureInstances = (Long)results[0];
+            	Date lastFailureDt = (Date)results[1];
                 if (failureInstances > 0) {
                     TFailuresInfo failures = summary.addNewFailures();
                     failures.setDtFailure(toCalendar(lastFailureDt));
-                    failures.setCount(failureInstances);
+                    failures.setCount((int)failureInstances);
                 }
 
                 return null;
             }
-
         });
     }
 
@@ -919,6 +909,11 @@
             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) {

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java Mon Dec 15 13:51:24 2008
@@ -366,4 +366,7 @@
         return map;
     }
 
+    public ProcessManagementDaoImpl getProcessManagement() {
+        return new ProcessManagementDaoImpl();
+    }
 }

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java Mon Dec 15 13:51:24 2008
@@ -41,6 +41,7 @@
 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;
@@ -49,6 +50,7 @@
 import org.apache.ode.daohib.bpel.hobj.HCorrelationSet;
 import org.apache.ode.daohib.bpel.hobj.HLargeData;
 import org.apache.ode.daohib.bpel.hobj.HMessageExchange;
+import org.apache.ode.daohib.bpel.hobj.HObject;
 import org.apache.ode.daohib.bpel.hobj.HProcess;
 import org.apache.ode.daohib.bpel.hobj.HProcessInstance;
 import org.apache.ode.daohib.bpel.hobj.HScope;
@@ -155,6 +157,7 @@
         Criteria crit = session.createCriteria(HProcessInstance.class);
         CriteriaBuilder cb = new CriteriaBuilder();
         cb.buildCriteria(crit, filter);
+        crit.setFetchMode("fault", FetchMode.JOIN);
         return crit.list().iterator();
     }
 
@@ -289,4 +292,7 @@
         return map;
     }
 
+    public ProcessManagementDAO getProcessManagement() {
+        return new ProcessManagementDaoImpl(_sm);
+    }
 }

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HProcessInstance.java Mon Dec 15 13:51:24 2008
@@ -29,9 +29,12 @@
  * 
  * @hibernate.class table="BPEL_INSTANCE" dynamic-update="true" lazy="true"
  * @hibernate.query name="DELETE_INSTANCES_BY_PROCESS" query="delete from HProcessInstance as p where p.process = :process"
+ * @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"
  */
 public class HProcessInstance extends HObject {
 	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";
 
 	/** Foreign key to owner {@link HProcess}. */
     private HProcess _process;

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=726820&r1=726819&r2=726820&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 Mon Dec 15 13:51:24 2008
@@ -43,10 +43,13 @@
 @Entity
 @Table(name="ODE_ACTIVITY_RECOVERY")
 @NamedQueries({
-	@NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS, query="delete from ActivityRecoveryDAOImpl as a where a._instance._process = :process")
+	@NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS, query="delete from ActivityRecoveryDAOImpl as a where a._instance._process = :process"),
+	@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_PROCESS = "DELETE_ACTIVITY_RECOVERIES_BY_PROCESS";
+	public final static String COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES = "COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES";
 	
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
@@ -68,7 +71,10 @@
 	@Basic @Column(name="RETRIES")
     private int _retries;
 
-    // _instances is unused because this is a one-way relationship at the database level
+	@Basic @Column(name="INSTANCE_ID", nullable=true, insertable=false, updatable=false)
+    private Long _instanceId;
+
+	// _instances is unused because this is a one-way relationship at the database level
     @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/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=726820&r1=726819&r2=726820&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 Mon Dec 15 13:51:24 2008
@@ -43,6 +43,7 @@
 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;
@@ -141,7 +142,7 @@
 	@SuppressWarnings("unchecked")
     public Collection<ProcessInstanceDAO> instanceQuery(InstanceFilter criteria) {
         StringBuffer query = new StringBuffer();
-        query.append("select pi from ProcessInstanceDAOImpl as pi");
+        query.append("select pi from ProcessInstanceDAOImpl as pi left join fetch pi._fault ");
 
         if (criteria != null) {
             // Building each clause
@@ -343,4 +344,7 @@
         return map;
     }
 
+    public ProcessManagementDAO getProcessManagement() {
+    	return new ProcessManagementDAOImpl(_em);
+    }
 }

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=726820&r1=726819&r2=726820&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 Mon Dec 15 13:51:24 2008
@@ -63,12 +63,15 @@
 @Entity
 @Table(name="ODE_PROCESS_INSTANCE")
 @NamedQueries({
-	@NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS, query="delete from ProcessInstanceDAOImpl as i where i._process = :process")
+	@NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS, query="delete from ProcessInstanceDAOImpl as i where i._process = :process"),
+	@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 COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID = "COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
 	
     @Id @Column(name="ID")
 	@GeneratedValue(strategy=GenerationType.AUTO)
@@ -105,6 +108,8 @@
 	@SuppressWarnings("unused")
 	private Collection<MessageExchangeDAO> _messageExchanges = new ArrayList<MessageExchangeDAO>();
 	
+	private transient int _activityFailureCount = -1;
+	
 	public ProcessInstanceDAOImpl() {}
 	public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator, ProcessDAOImpl process) {
 		_instantiatingCorrelator = correlator;
@@ -215,7 +220,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() {