Author: karthick
Date: Wed Mar 11 21:57:20 2009
New Revision: 752646

URL: http://svn.apache.org/viewvc?rev=752646&view=rev
Log:
Add Process Management DAOs.

Added:
    
ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java
    
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java
    
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
    
ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java

Added: 
ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java?rev=752646&view=auto
==============================================================================
--- 
ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java
 (added)
+++ 
ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java
 Wed Mar 11 21:57:20 2009
@@ -0,0 +1,31 @@
+package org.apache.ode.bpel.dao;
+
+import java.util.Collection;
+
+/**
+ * This DAO handles any process and instance management related database 
operations. The idea is to separate out
+ * the operational side of database tasks from core engine.
+ * 
+ * @author sean
+ *
+ */
+public interface ProcessManagementDAO {
+       /**
+        * Finds process instances that have failures on a given process id, 
and, returns the number of failed instances
+        * and the last failed date in an object array.
+        * 
+        * @param conn BpelDAOConnection
+        * @param status the status string, e.g. "active"
+        * @param processId the string representation of the QName of the 
process
+        * @return an array containing the number of failed instances and the 
last failed date
+        */
+       public Object[] 
findFailedCountAndLastFailedDateForProcessId(BpelDAOConnection conn, String 
status, String processId);
+       
+       /**
+        * Prefetches the counts of activity failures for the given instances 
and sets the values to the _activityFailureCount
+        * member variable of the ProcesInstanceDAOImpl.
+        * 
+        * @param instances a collection of process instances
+        */
+       public void 
prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances);
+}
\ No newline at end of file

Added: 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java?rev=752646&view=auto
==============================================================================
--- 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java
 (added)
+++ 
ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java
 Wed Mar 11 21:57:20 2009
@@ -0,0 +1,49 @@
+package org.apache.ode.daohib.bpel;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.ode.bpel.common.InstanceFilter;
+import org.apache.ode.bpel.dao.BpelDAOConnection;
+import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO;
+import org.apache.ode.daohib.SessionManager;
+import org.apache.ode.daohib.bpel.hobj.HProcessInstance;
+import org.hibernate.Query;
+import org.hibernate.transform.ResultTransformer;
+
+public class ProcessManagementDaoImpl extends HibernateDao implements 
ProcessManagementDAO {
+       protected ProcessManagementDaoImpl(SessionManager sessionManager) {
+               super(sessionManager, null);
+       }
+
+       @SuppressWarnings("unchecked")
+       public Object[] 
findFailedCountAndLastFailedDateForProcessId(BpelDAOConnection conn, String 
status, String processId) {
+               Object[] results = new Object[] {0, null};
+               
+               Query query = 
getSession().getNamedQuery(HProcessInstance.COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID);
+               query.setParameterList("states", new InstanceFilter("status=" + 
status).convertFilterState());
+               query.setParameter("processId", processId);
+               query.setResultTransformer(new ResultTransformer() {
+                       private static final long serialVersionUID = 
8034301512569916379L;
+
+                       public List transformList(List collection) {
+                               return collection;
+                       }
+                       public Object transformTuple(Object[] tuple, String[] 
aliases) {
+                               return tuple;
+                       }
+               });
+               
+               List result = query.list();
+               if( !result.isEmpty() ) {
+                       results = (Object[])result.iterator().next();
+               }
+               
+               return results;
+       }
+       
+       public void 
prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances) {
+               // do nothing; activity failures counts are already in a column 
+       }
+}

Added: 
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java?rev=752646&view=auto
==============================================================================
--- 
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
 (added)
+++ 
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
 Wed Mar 11 21:57:20 2009
@@ -0,0 +1,56 @@
+package org.apache.ode.dao.jpa;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.common.InstanceFilter;
+import org.apache.ode.bpel.dao.BpelDAOConnection;
+import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO;
+
+public class ProcessManagementDAOImpl implements ProcessManagementDAO {
+       private static final Log __log = 
LogFactory.getLog(ProcessManagementDAOImpl.class);
+
+       private EntityManager em;
+       
+       public ProcessManagementDAOImpl(EntityManager em) {
+               this.em = em;
+       }
+       
+       public Object[] 
findFailedCountAndLastFailedDateForProcessId(BpelDAOConnection conn, String 
status, String processId) {
+               Query query = 
em.createNamedQuery(ProcessInstanceDAOImpl.COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID);
+               query.setParameter("states", new InstanceFilter("status=" + 
status).convertFilterState());
+               query.setParameter("processId", processId);
+               
+               return (Object[])query.getSingleResult();
+       }
+       
+       public void 
prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances) {
+               if(__log.isTraceEnabled()) __log.trace("Prefetching activity 
failure counts for " + instances.size() + " instances.");
+               
+               if( instances.isEmpty() ) return;
+               
+               Query query = 
em.createNamedQuery(ActivityRecoveryDAOImpl.COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES);
+               query.setParameter("instances", instances);
+               
+               Map<Long, Long> countsByInstanceId = new HashMap<Long, Long>();
+               for( Object instanceIdAndCount : query.getResultList() ) {
+                       Object instanceId = ((Object[])instanceIdAndCount)[0];
+                       Object count = ((Object[])instanceIdAndCount)[0];
+                       countsByInstanceId.put((Long)instanceId, (Long)count);
+               }
+               
+               for( ProcessInstanceDAO instance : instances ) {
+                       Long count = 
countsByInstanceId.get(instance.getInstanceId());
+                       if( count != null ) {
+                               
((ProcessInstanceDAOImpl)instance).setActivityFailureCount(count.intValue());
+                       }
+               }
+       }
+}

Added: 
ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java?rev=752646&view=auto
==============================================================================
--- 
ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java
 (added)
+++ 
ode/trunk/engine/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java
 Wed Mar 11 21:57:20 2009
@@ -0,0 +1,33 @@
+package org.apache.ode.bpel.memdao;
+
+import java.util.Collection;
+import java.util.Date;
+
+import org.apache.ode.bpel.common.InstanceFilter;
+import org.apache.ode.bpel.dao.BpelDAOConnection;
+import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO;
+
+public class ProcessManagementDaoImpl extends DaoBaseImpl implements 
ProcessManagementDAO {
+       public Object[] 
findFailedCountAndLastFailedDateForProcessId(BpelDAOConnection conn, String 
status, String processId) {
+        Date lastFailureDt = null;
+        int failureInstances = 0;
+
+        InstanceFilter instanceFilter = new InstanceFilter("status=" + status 
+ " pid="+ processId);
+        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;
+            }
+        }
+
+        return new Object[] {failureInstances, lastFailureDt};
+       }
+       
+       public void 
prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances) {
+               // do nothing 
+       }
+}


Reply via email to