You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by rr...@apache.org on 2010/03/30 20:03:12 UTC
svn commit: r929208 - 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/apac...
Author: rr
Date: Tue Mar 30 18:03:11 2010
New Revision: 929208
URL: http://svn.apache.org/viewvc?rev=929208&view=rev
Log:
ODE-795: Speedup listAllProcesses + test case
Added:
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java (with props)
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties (with props)
Modified:
ode/branches/APACHE_ODE_1.X/Rakefile
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.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/ProcessManagementDaoImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.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-hibernate/src/test/java/org/apache/ode/daohib/bpel/BaseTestDAO.java
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
Modified: ode/branches/APACHE_ODE_1.X/Rakefile
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/Rakefile?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/Rakefile (original)
+++ ode/branches/APACHE_ODE_1.X/Rakefile Tue Mar 30 18:03:11 2010
@@ -273,7 +273,7 @@ define "ode" do
end
task "compile" => "hbm-hack"
- test.with project("bpel-epr"), BACKPORT, COMMONS.collections, COMMONS.lang, HSQLDB,
+ test.with project("bpel-epr"), BACKPORT, COMMONS.collections, COMMONS.lang, DERBY, COMMONS.logging, LOG4J, SLF4J,
GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, JAVAX.connector, JAVAX.ejb, SPRING
package :jar
Modified: ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/ProcessManagementDAO.java Tue Mar 30 18:03:11 2010
@@ -20,31 +20,83 @@
package org.apache.ode.bpel.dao;
import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
/**
- * 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.
+ * 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);
+ public static class InstanceSummaryKey {
+ public final String pid;
+ public final String instanceStatus;
+
+ public InstanceSummaryKey(String pid, String instanceStatus) {
+ super();
+ this.pid = pid;
+ this.instanceStatus = instanceStatus;
+ }
+
+ @Override
+ public String toString() {
+ return "InstanceSummaryKey [instanceStatus=" + instanceStatus
+ + ", pid=" + pid + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime
+ * result
+ + ((instanceStatus == null) ? 0 : instanceStatus.hashCode());
+ result = prime * result + ((pid == null) ? 0 : pid.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ InstanceSummaryKey other = (InstanceSummaryKey) obj;
+ if (instanceStatus == null) {
+ if (other.instanceStatus != null)
+ return false;
+ } else if (!instanceStatus.equals(other.instanceStatus))
+ return false;
+ if (pid == null) {
+ if (other.pid != null)
+ return false;
+ } else if (!pid.equals(other.pid))
+ return false;
+ return true;
+ }
+
+ }
+
+ public static class FailedSummaryValue {
+ public final Long count;
+ public final Date lastFailed;
+ public FailedSummaryValue(Long count, Date lastFailed) {
+ super();
+ this.count = count;
+ this.lastFailed = lastFailed;
+ }
+ }
+
+ public Map<InstanceSummaryKey, Long> countInstancesSummary(Set<String> pids);
+
+ public Map<String, FailedSummaryValue> findFailedCountAndLastFailedDateForProcessIds(Set<String> pids);
}
\ No newline at end of file
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=929208&r1=929207&r2=929208&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 Tue Mar 30 18:03:11 2010
@@ -28,9 +28,11 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.regex.Pattern;
import javax.xml.namespace.QName;
@@ -50,6 +52,8 @@ import org.apache.ode.bpel.dao.ProcessDA
import org.apache.ode.bpel.dao.ProcessInstanceDAO;
import org.apache.ode.bpel.dao.ScopeDAO;
import org.apache.ode.bpel.dao.XmlDataDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO.FailedSummaryValue;
+import org.apache.ode.bpel.dao.ProcessManagementDAO.InstanceSummaryKey;
import org.apache.ode.bpel.engine.replayer.Replayer;
import org.apache.ode.bpel.evt.ActivityEvent;
import org.apache.ode.bpel.evt.BpelEvent;
@@ -174,14 +178,21 @@ public class ProcessAndInstanceManagemen
try {
_db.exec(new BpelDatabase.Callable<Object>() {
public Object run(BpelDAOConnection conn) throws Exception {
- for (ProcessConf pconf : processQuery(processFilter)) {
+ Collection<ProcessConf> pconfs = processQuery(processFilter);
+ for (ProcessConf pconf : pconfs) {
try {
- fillProcessInfo(conn, procInfoList.addNewProcessInfo(), pconf, custom);
+ fillProcessInfo(procInfoList.addNewProcessInfo(), pconf, custom);
} catch (Exception e) {
failIfSQLException(e);
__log.error("Exception when querying process " + pconf.getProcessId(), e);
}
}
+ try {
+ fillProcessInfoSummary(conn, procInfoList.getProcessInfoList(), custom);
+ } catch (Exception e) {
+ failIfSQLException(e);
+ __log.error("Exception fetching instances summary", e);
+ }
return null;
}
});
@@ -270,7 +281,7 @@ public class ProcessAndInstanceManagemen
if (proc == null)
throw new ProcessNotFoundException("ProcessNotFound:" + pid);
- fillProcessInfo(conn, pi, proc, new ProcessInfoCustomizer(ProcessInfoCustomizer.Item.PROPERTIES));
+ fillProcessInfo(pi, proc, new ProcessInfoCustomizer(ProcessInfoCustomizer.Item.PROPERTIES));
return null;
}
@@ -306,7 +317,7 @@ public class ProcessAndInstanceManagemen
if (proc == null)
throw new ProcessNotFoundException("ProcessNotFound:" + pid);
- fillProcessInfo(conn, pi, proc, new ProcessInfoCustomizer(ProcessInfoCustomizer.Item.PROPERTIES));
+ fillProcessInfo(pi, proc, new ProcessInfoCustomizer(ProcessInfoCustomizer.Item.PROPERTIES));
return null;
}
@@ -350,7 +361,6 @@ public class ProcessAndInstanceManagemen
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);
@@ -691,7 +701,8 @@ public class ProcessAndInstanceManagemen
ProcessConf pconf = _store.getProcessConfiguration(procid);
if (pconf == null)
throw new ProcessNotFoundException("ProcessNotFound:" + procid);
- fillProcessInfo(conn, pi, pconf, custom);
+ fillProcessInfo(pi, pconf, custom);
+ fillProcessInfoSummary(conn, Collections.singletonList(pi), custom);
} catch (ManagementException me) {
throw me;
} catch (Exception e) {
@@ -763,6 +774,29 @@ public class ProcessAndInstanceManagemen
return ret;
}
+ private void fillProcessInfoSummary(BpelDAOConnection conn, List<TProcessInfo> infos, ProcessInfoCustomizer custom) {
+ if (custom.includeInstanceSummary()) {
+ Set<String> pids = new HashSet<String>();
+ for (TProcessInfo i : infos) {
+ pids.add(i.getPid());
+ }
+
+ Map<InstanceSummaryKey, Long> m = conn.getProcessManagement().countInstancesSummary(pids);
+ Map<String, FailedSummaryValue> f = conn.getProcessManagement().findFailedCountAndLastFailedDateForProcessIds(pids);
+
+ for (TProcessInfo info : infos) {
+ TInstanceSummary isum = info.addNewInstanceSummary();
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.ACTIVE, info.getPid(), m);
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.COMPLETED, info.getPid(), m);
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.ERROR, info.getPid(), m);
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.FAILED, info.getPid(), m);
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.SUSPENDED, info.getPid(), m);
+ genInstanceSummaryEntry(isum.addNewInstances(), TInstanceStatus.TERMINATED, info.getPid(), m);
+ getInstanceSummaryActivityFailure(isum, f, info.getPid());
+ }
+ }
+ }
+
/**
* Fill in the <code>process-info</code> element of the transfer object.
*
@@ -776,7 +810,7 @@ public class ProcessAndInstanceManagemen
* used to customize the quantity of information produced in the
* info
*/
- private void fillProcessInfo(BpelDAOConnection conn, TProcessInfo info, ProcessConf pconf, ProcessInfoCustomizer custom) {
+ private void fillProcessInfo(TProcessInfo info, ProcessConf pconf, ProcessInfoCustomizer custom) {
if (pconf == null)
throw new IllegalArgumentException("Null pconf.");
@@ -801,16 +835,6 @@ public class ProcessAndInstanceManagemen
depinfo.setDocument(pconf.getBpelDocument());
depinfo.setDeployDate(toCalendar(pconf.getDeployDate()));
depinfo.setDeployer(pconf.getDeployer());
- if (custom.includeInstanceSummary()) {
- TInstanceSummary isum = info.addNewInstanceSummary();
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.ACTIVE, pconf);
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.COMPLETED, pconf);
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.ERROR, pconf);
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.FAILED, pconf);
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.SUSPENDED, pconf);
- genInstanceSummaryEntry(conn, isum.addNewInstances(), TInstanceStatus.TERMINATED, pconf);
- getInstanceSummaryActivityFailure(conn, isum, pconf);
- }
TProcessInfo.Documents docinfo = info.addNewDocuments();
List<File> files = pconf.getFiles();
@@ -851,7 +875,19 @@ public class ProcessAndInstanceManagemen
// TODO: add documents to the above data structure.
}
-
+
+ String findVersionStringFromNodeToken(String packageName) {
+ int i = packageName.length() - 1;
+ while( i > 0 && Character.isDigit(packageName.charAt(i)) ) {
+ i--;
+ }
+ if( i < packageName.length() - 1 && packageName.charAt(i) == '-') {
+ return packageName.substring(i + 1);
+ }
+
+ return null;
+ }
+
/**
* Generate document information elements for a set of files.
*
@@ -889,29 +925,20 @@ public class ProcessAndInstanceManagemen
}
}
- private void genInstanceSummaryEntry(BpelDAOConnection conn, TInstanceSummary.Instances instances,
- TInstanceStatus.Enum state, ProcessConf pconf)
+ private void genInstanceSummaryEntry(TInstanceSummary.Instances instances,
+ TInstanceStatus.Enum state, String pid, Map<InstanceSummaryKey, Long> summary)
{
instances.setState(state);
- String queryStatus = InstanceFilter.StatusKeys.valueOf(state.toString()).toString().toLowerCase();
- InstanceFilter instanceFilter = new InstanceFilter("status=" + queryStatus + " pid="+ pconf.getProcessId());
+ Long count = summary.get(new InstanceSummaryKey(pid, state.toString()));
+ instances.setCount(count == null ? 0 : count.intValue());
+ }
- // TODO: this is grossly inefficient
- int count = conn.instanceQuery(instanceFilter).size();
- instances.setCount(count);
- }
-
- private void getInstanceSummaryActivityFailure(BpelDAOConnection conn, TInstanceSummary summary, ProcessConf pconf) {
- 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) {
+ private void getInstanceSummaryActivityFailure(TInstanceSummary summary, Map<String, FailedSummaryValue> f, String pid) {
+ FailedSummaryValue v = f.get(pid);
+ if (v != null) {
TFailuresInfo failures = summary.addNewFailures();
- failures.setDtFailure(toCalendar(lastFailureDt));
- failures.setCount((int)failureInstances);
+ failures.setDtFailure(toCalendar(v.lastFailed));
+ failures.setCount(v.count.intValue());
}
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessManagementDaoImpl.java Tue Mar 30 18:03:11 2010
@@ -21,11 +21,16 @@ package org.apache.ode.bpel.memdao;
import java.util.Collection;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.namespace.QName;
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.bpel.dao.ProcessManagementDAO.InstanceSummaryKey;
public class ProcessManagementDaoImpl extends DaoBaseImpl implements ProcessManagementDAO {
public Object[] findFailedCountAndLastFailedDateForProcessId(BpelDAOConnection conn, String status, String processId) {
@@ -49,4 +54,19 @@ public class ProcessManagementDaoImpl ex
public void prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances) {
// do nothing
}
+
+ public int countInstancesByPidAndString(BpelDAOConnection conn, QName pid, String status) {
+ InstanceFilter instanceFilter = new InstanceFilter("status=" + status + " pid="+ pid);
+
+ // TODO: this is grossly inefficient
+ return conn.instanceQuery(instanceFilter).size();
+ }
+
+ public Map<InstanceSummaryKey, Long> countInstancesSummary(Set<String> pids) {
+ return new HashMap<InstanceSummaryKey, Long>();
+ }
+
+ public Map<String, FailedSummaryValue> findFailedCountAndLastFailedDateForProcessIds(Set<String> pids) {
+ return new HashMap<String, FailedSummaryValue>();
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessManagementDaoImpl.java Tue Mar 30 18:03:11 2010
@@ -19,50 +19,46 @@
package org.apache.ode.daohib.bpel;
-import java.util.Collection;
-import java.util.List;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
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.common.InstanceFilter.StatusKeys;
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_PROCESS_IDS_AND_STATES);
- query.setParameterList("states", new InstanceFilter("status=" + status).convertFilterState());
- query.setParameterList("processIds", new String[] {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;
+ public Map<InstanceSummaryKey, Long> countInstancesSummary(Set<String> pids) {
+ Map<InstanceSummaryKey, Long> result = new HashMap<InstanceSummaryKey, Long>();
+ for (StatusKeys status : InstanceFilter.StatusKeys.values()) {
+ Query query = getSession().getNamedQuery(HProcessInstance.COUNT_INSTANCES_BY_PROCESSES_IDS_AND_STATES);
+ query.setParameterList("states", new InstanceFilter("status=" + status.toString()).convertFilterState());
+ query.setParameterList("processIds", pids);
+ for (Object o : query.list()) {
+ Object[] row = (Object[]) o;
+ InstanceSummaryKey key = new InstanceSummaryKey(row[0].toString(), status.toString());
+ result.put(key, (Long) row[1]);
}
- });
-
- List result = query.list();
- if( !result.isEmpty() ) {
- results = (Object[])result.iterator().next();
}
-
- return results;
+ return result;
}
- public void prefetchActivityFailureCounts(Collection<ProcessInstanceDAO> instances) {
- // do nothing; activity failures counts are already in a column
+ public Map<String, FailedSummaryValue> findFailedCountAndLastFailedDateForProcessIds(Set<String> pids) {
+ Map<String, FailedSummaryValue> result = new HashMap<String, FailedSummaryValue>();
+ Query query = getSession().getNamedQuery(HProcessInstance.COUNT_FAILED_INSTANCES_BY_PROCESSES_IDS_AND_STATES);
+ query.setParameterList("processIds", pids);
+ for (Object o : query.list()) {
+ Object[] row = (Object[]) o;
+ result.put(row[0].toString(), new FailedSummaryValue((Long) row[1], (Date) row[2]));
+ }
+ return result;
}
}
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=929208&r1=929207&r2=929208&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 Tue Mar 30 18:03:11 2010
@@ -28,14 +28,16 @@ import java.util.Set;
* Hibernate table representing a BPEL process instance.
*
* @hibernate.class table="BPEL_INSTANCE" dynamic-update="true" lazy="true"
- * @hibernate.query name="COUNT_FAILED_INSTANCES_BY_PROCESS_IDS_AND_STATES" query="select count(i.id) as cnt, max(i.activityFailureDateTime) as lastFailureDt from HProcessInstance as i where i.process.processId in (:processIds) and i.state in(:states) and i.activityFailureCount > 0"
+ * @hibernate.query name="COUNT_FAILED_INSTANCES_BY_PROCESSES_IDS_AND_STATES" query="select i.process.processId as pid, count(i.id) as cnt, max(i.activityFailureDateTime) as lastFailureDt from HProcessInstance as i where i.process.processId in (:processIds) and i.state = 20 and i.activityFailureCount > 0 group by i.process.processId"
* @hibernate.query name="SELECT_INSTANCES_BY_PROCESS" query="from HProcessInstance as i where i.process = :process)"
* @hibernate.query name="SELECT_INSTANCES_BY_PROCESS_AND_STATES" query="from HProcessInstance as i where i.process = :process and i.state in (:states)"
+ * @hibernate.query name="COUNT_INSTANCES_BY_PROCESSES_IDS_AND_STATES" query="select i.process.processId as pid, count(i.id) as cnt from HProcessInstance as i where i.process.processId in (:processIds) and i.state in(:states) group by i.process.processId"
*/
public class HProcessInstance extends HObject {
- public static final String COUNT_FAILED_INSTANCES_BY_PROCESS_IDS_AND_STATES="COUNT_FAILED_INSTANCES_BY_PROCESS_IDS_AND_STATES";
+ public static final String COUNT_FAILED_INSTANCES_BY_PROCESSES_IDS_AND_STATES="COUNT_FAILED_INSTANCES_BY_PROCESSES_IDS_AND_STATES";
public static final String SELECT_INSTANCES_BY_PROCESS="SELECT_INSTANCES_BY_PROCESS";
public static final String SELECT_INSTANCES_BY_PROCESS_AND_STATES="SELECT_INSTANCES_BY_PROCESS_AND_STATES";
+ public static final String COUNT_INSTANCES_BY_PROCESSES_IDS_AND_STATES = "COUNT_INSTANCES_BY_PROCESSES_IDS_AND_STATES";
/** Foreign key to owner {@link HProcess}. */
private HProcess _process;
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/BaseTestDAO.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/BaseTestDAO.java?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/BaseTestDAO.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/BaseTestDAO.java Tue Mar 30 18:03:11 2010
@@ -19,15 +19,15 @@
package org.apache.ode.daohib.bpel;
+import javax.resource.spi.ConnectionManager;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;
import junit.framework.TestCase;
+import org.apache.derby.jdbc.EmbeddedXADataSource;
import org.apache.ode.bpel.dao.BpelDAOConnection;
import org.apache.ode.il.EmbeddedGeronimoFactory;
-import org.apache.ode.utils.GUID;
-import org.hsqldb.jdbc.jdbcDataSource;
import org.hibernate.cfg.Environment;
import java.util.Properties;
@@ -41,11 +41,13 @@ import java.util.Properties;
public abstract class BaseTestDAO extends TestCase {
protected BpelDAOConnection daoConn;
- private TransactionManager txm;
+ protected TransactionManager txm;
+ protected ConnectionManager connectionManager;
private DataSource ds;
protected void initTM() throws Exception {
EmbeddedGeronimoFactory factory = new EmbeddedGeronimoFactory();
+ connectionManager = new org.apache.geronimo.connector.outbound.GenericConnectionManager();
txm = factory.getTransactionManager();
ds = getDataSource();
txm.begin();
@@ -66,11 +68,12 @@ public abstract class BaseTestDAO extend
protected DataSource getDataSource() {
if (ds == null) {
- jdbcDataSource hsqlds = new jdbcDataSource();
- hsqlds.setDatabase("jdbc:hsqldb:mem:" + new GUID().toString());
- hsqlds.setUser("sa");
- hsqlds.setPassword("");
- ds = hsqlds;
+ EmbeddedXADataSource ds = new EmbeddedXADataSource();
+ ds.setCreateDatabase("create");
+ ds.setDatabaseName("target/testdb");
+ ds.setUser("sa");
+ ds.setPassword("");
+ this.ds = ds;
}
return ds;
}
Added: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java?rev=929208&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java (added)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java Tue Mar 30 18:03:11 2010
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.daohib.bpel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.common.InstanceFilter;
+import org.apache.ode.bpel.common.ProcessState;
+import org.apache.ode.bpel.dao.ProcessDAO;
+import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO.FailedSummaryValue;
+import org.apache.ode.bpel.dao.ProcessManagementDAO.InstanceSummaryKey;
+
+/**
+ * Testing BpelDAOConnectionImpl.listInstance. We're just producing a lot of
+ * different filter combinations and test if they execute ok. To really test
+ * that the result is the one expected would take a huge test database (with at
+ * least a process and an instance for every possible combination).
+ */
+public class ProcessManagementDaoTest extends BaseTestDAO {
+
+ protected void setUp() throws Exception {
+ initTM();
+ }
+
+ protected void tearDown() throws Exception {
+ stopTM();
+ }
+
+ public void testInstanceSummary() throws Exception {
+ Set<String> pids = new HashSet<String>();
+ QName pid = QName.valueOf("{ns}pid");
+ pids.add(pid.toString());
+ ProcessDAO p = daoConn.createProcess(pid, QName.valueOf("{ns}type"), "abc", 1);
+ ProcessInstanceDAO i = p.createInstance(p.addCorrelator("cor"));
+ i.setState(ProcessState.STATE_COMPLETED_OK);
+ Map<InstanceSummaryKey, Long> r = daoConn.getProcessManagement().countInstancesSummary(pids);
+ System.out.println("resultSummary:" + r);
+ assertEquals(1, r.size());
+ }
+
+ public void testInstanceSummaryFailures() throws Exception {
+ Set<String> pids = new HashSet<String>();
+ QName pid = QName.valueOf("{ns}pid");
+ pids.add(pid.toString());
+ ProcessDAO p = daoConn.createProcess(pid, QName.valueOf("{ns}type"), "abc", 1);
+ ProcessInstanceDAO i = p.createInstance(p.addCorrelator("cor"));
+ Map<String, FailedSummaryValue> r = daoConn.getProcessManagement().findFailedCountAndLastFailedDateForProcessIds(pids);
+ System.out.println("resultSummary:" + r);
+ assertEquals(0, r.size());
+ }
+}
Propchange: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/java/org/apache/ode/daohib/bpel/ProcessManagementDaoTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties?rev=929208&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties (added)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties Tue Mar 30 18:03:11 2010
@@ -0,0 +1,33 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+#
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+#
+# The logging properties used during tests..
+#
+log4j.rootLogger=DEBUG, file
+#log4j.rootLogger=INFO, file
+
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.File=target/test/test.log
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n
+
+log4j.category.org.apache.ode=DEBUG
+
Propchange: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/test/resources/log4j.properties
------------------------------------------------------------------------------
svn:eol-style = native
Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java?rev=929208&r1=929207&r2=929208&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java Tue Mar 30 18:03:11 2010
@@ -22,6 +22,8 @@ package org.apache.ode.dao.jpa;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
+import javax.xml.namespace.QName;
import javax.persistence.EntityManager;
import javax.persistence.Query;
@@ -32,6 +34,8 @@ import org.apache.ode.bpel.common.Instan
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.bpel.dao.ProcessManagementDAO.FailedSummaryValue;
+import org.apache.ode.bpel.dao.ProcessManagementDAO.InstanceSummaryKey;
public class ProcessManagementDAOImpl implements ProcessManagementDAO {
private static final Log __log = LogFactory.getLog(ProcessManagementDAOImpl.class);
@@ -72,4 +76,19 @@ public class ProcessManagementDAOImpl im
}
}
}
+
+ public int countInstancesByPidAndString(BpelDAOConnection conn, QName pid, String status) {
+ InstanceFilter instanceFilter = new InstanceFilter("status=" + status + " pid="+ pid);
+
+ // TODO: this is grossly inefficient
+ return conn.instanceQuery(instanceFilter).size();
+ }
+
+ public Map<InstanceSummaryKey, Long> countInstancesSummary(Set<String> pids) {
+ return new HashMap<InstanceSummaryKey, Long>();
+ }
+
+ public Map<String, FailedSummaryValue> findFailedCountAndLastFailedDateForProcessIds(Set<String> pids) {
+ return new HashMap<String, FailedSummaryValue>();
+ }
}