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...@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>();
+ }
}