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() {


Reply via email to