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