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:57:20 UTC

svn commit: r752646 - in /ode/trunk: bpel-dao/src/main/java/org/apache/ode/bpel/dao/ dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ dao-jpa/src/main/java/org/apache/ode/dao/jpa/ engine/src/main/java/org/apache/ode/bpel/memdao/

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 
+	}
+}