Author: boisvert
Date: Mon Dec 15 13:51:24 2008
New Revision: 726820
URL: http://svn.apache.org/viewvc?rev=726820&view=rev
Log:
ODE-460: Improve InstanceManagement.listInstancesSummary() to include failure
information
Modified:
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.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/BpelDAOConnectionImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.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-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
Modified:
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
Mon Dec 15 13:51:24 2008
@@ -109,4 +109,10 @@
MessageExchangeDAO getMessageExchange(String mexid);
+ /**
+ * Returns an interface for process and instance management.
+ *
+ * @return a ProcessManagement DAO
+ */
+ ProcessManagementDAO getProcessManagement();
}
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=726820&r1=726819&r2=726820&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
Mon Dec 15 13:51:24 2008
@@ -314,6 +314,7 @@
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);
@@ -862,34 +863,23 @@
instances.setCount(count);
}
- private void getInstanceSummaryActivityFailure(final TInstanceSummary
summary, ProcessConf pconf) {
- String queryStatus =
InstanceFilter.StatusKeys.valueOf(TInstanceStatus.ACTIVE.toString()).toString()
- .toLowerCase();
- final InstanceFilter instanceFilter = new InstanceFilter("status=" +
queryStatus
- + " pid="+ pconf.getProcessId());
+ private void getInstanceSummaryActivityFailure(final TInstanceSummary
summary, final ProcessConf pconf) {
dbexec(new BpelDatabase.Callable<Void>() {
-
public Void run(BpelDAOConnection conn) throws Exception {
- Date lastFailureDt = null;
- int failureInstances = 0;
- 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;
- }
- }
+ 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) {
TFailuresInfo failures = summary.addNewFailures();
failures.setDtFailure(toCalendar(lastFailureDt));
- failures.setCount(failureInstances);
+ failures.setCount((int)failureInstances);
}
return null;
}
-
});
}
@@ -919,6 +909,11 @@
faultInfo.setAiid(instance.getFault().getActivityId());
faultInfo.setLineNumber(instance.getFault().getLineNo());
}
+ if (instance.getActivityFailureCount() > 0) {
+ TFailuresInfo failures = info.addNewFailures();
+
failures.setDtFailure(toCalendar(instance.getActivityFailureDateTime()));
+ failures.setCount(instance.getActivityFailureCount());
+ }
}
private void fillInstanceInfo(TInstanceInfo info, ProcessInstanceDAO
instance) {
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
Mon Dec 15 13:51:24 2008
@@ -366,4 +366,7 @@
return map;
}
+ public ProcessManagementDaoImpl getProcessManagement() {
+ return new ProcessManagementDaoImpl();
+ }
}
Modified:
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
Mon Dec 15 13:51:24 2008
@@ -41,6 +41,7 @@
import org.apache.ode.bpel.dao.MessageExchangeDAO;
import org.apache.ode.bpel.dao.ProcessDAO;
import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO;
import org.apache.ode.bpel.dao.ScopeDAO;
import org.apache.ode.bpel.evt.BpelEvent;
import org.apache.ode.bpel.evt.ScopeEvent;
@@ -49,6 +50,7 @@
import org.apache.ode.daohib.bpel.hobj.HCorrelationSet;
import org.apache.ode.daohib.bpel.hobj.HLargeData;
import org.apache.ode.daohib.bpel.hobj.HMessageExchange;
+import org.apache.ode.daohib.bpel.hobj.HObject;
import org.apache.ode.daohib.bpel.hobj.HProcess;
import org.apache.ode.daohib.bpel.hobj.HProcessInstance;
import org.apache.ode.daohib.bpel.hobj.HScope;
@@ -155,6 +157,7 @@
Criteria crit = session.createCriteria(HProcessInstance.class);
CriteriaBuilder cb = new CriteriaBuilder();
cb.buildCriteria(crit, filter);
+ crit.setFetchMode("fault", FetchMode.JOIN);
return crit.list().iterator();
}
@@ -289,4 +292,7 @@
return map;
}
+ public ProcessManagementDAO getProcessManagement() {
+ return new ProcessManagementDaoImpl(_sm);
+ }
}
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=726820&r1=726819&r2=726820&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
Mon Dec 15 13:51:24 2008
@@ -29,9 +29,12 @@
*
* @hibernate.class table="BPEL_INSTANCE" dynamic-update="true" lazy="true"
* @hibernate.query name="DELETE_INSTANCES_BY_PROCESS" query="delete from
HProcessInstance as p where p.process = :process"
+ * @hibernate.query name="COUNT_INSTANCES_BY_STATUS_AND_PROCESS_ID"
query="select count(i.id) as cnt, max(i.activityFailureDateTime) as
lastFailureDt from HProcessInstance as i where i.process.processId = :processId
and i.state in(:states) and i.activityFailureCount > 0"
+ * @hibernate.query name="COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID"
query="select count(i.id) as cnt, max(i.activityFailureDateTime) as
lastFailureDt from HProcessInstance as i where i.process.processId = :processId
and i.state in(:states) and i.activityFailureCount > 0"
*/
public class HProcessInstance extends HObject {
public static final String
DELETE_INSTANCES_BY_PROCESS="DELETE_INSTANCES_BY_PROCESS";
+ public static final String
COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID="COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
/** Foreign key to owner {...@link HProcess}. */
private HProcess _process;
Modified:
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
Mon Dec 15 13:51:24 2008
@@ -43,10 +43,13 @@
@Entity
@Table(name="ODE_ACTIVITY_RECOVERY")
@NamedQueries({
-
@NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS,
query="delete from ActivityRecoveryDAOImpl as a where a._instance._process =
:process")
+
@NamedQuery(name=ActivityRecoveryDAOImpl.DELETE_ACTIVITY_RECOVERIES_BY_PROCESS,
query="delete from ActivityRecoveryDAOImpl as a where a._instance._process =
:process"),
+
@NamedQuery(name=ActivityRecoveryDAOImpl.COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES,
+ query="select r._instanceId, count(r._id) from
ActivityRecoveryDAOImpl r where r._instance in(:instances) group by
r._instanceId")
})
public class ActivityRecoveryDAOImpl implements ActivityRecoveryDAO {
public final static String DELETE_ACTIVITY_RECOVERIES_BY_PROCESS =
"DELETE_ACTIVITY_RECOVERIES_BY_PROCESS";
+ public final static String COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES =
"COUNT_ACTIVITY_RECOVERIES_BY_INSTANCES";
@Id @Column(name="ID")
@GeneratedValue(strategy= GenerationType.AUTO)
@@ -68,7 +71,10 @@
@Basic @Column(name="RETRIES")
private int _retries;
- // _instances is unused because this is a one-way relationship at the
database level
+ @Basic @Column(name="INSTANCE_ID", nullable=true, insertable=false,
updatable=false)
+ private Long _instanceId;
+
+ // _instances is unused because this is a one-way relationship at the
database level
@ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST})
@Column(name="INSTANCE_ID")
private ProcessInstanceDAOImpl _instance;
Modified:
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
Mon Dec 15 13:51:24 2008
@@ -43,6 +43,7 @@
import org.apache.ode.bpel.dao.MessageExchangeDAO;
import org.apache.ode.bpel.dao.ProcessDAO;
import org.apache.ode.bpel.dao.ProcessInstanceDAO;
+import org.apache.ode.bpel.dao.ProcessManagementDAO;
import org.apache.ode.bpel.dao.ScopeDAO;
import org.apache.ode.bpel.evt.BpelEvent;
import org.apache.ode.bpel.evt.ScopeEvent;
@@ -141,7 +142,7 @@
@SuppressWarnings("unchecked")
public Collection<ProcessInstanceDAO> instanceQuery(InstanceFilter
criteria) {
StringBuffer query = new StringBuffer();
- query.append("select pi from ProcessInstanceDAOImpl as pi");
+ query.append("select pi from ProcessInstanceDAOImpl as pi left join
fetch pi._fault ");
if (criteria != null) {
// Building each clause
@@ -343,4 +344,7 @@
return map;
}
+ public ProcessManagementDAO getProcessManagement() {
+ return new ProcessManagementDAOImpl(_em);
+ }
}
Modified:
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?rev=726820&r1=726819&r2=726820&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
Mon Dec 15 13:51:24 2008
@@ -63,12 +63,15 @@
@Entity
@Table(name="ODE_PROCESS_INSTANCE")
@NamedQueries({
- @NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS,
query="delete from ProcessInstanceDAOImpl as i where i._process = :process")
+ @NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS,
query="delete from ProcessInstanceDAOImpl as i where i._process = :process"),
+
@NamedQuery(name=ProcessInstanceDAOImpl.COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID,
+ query="select count(i._instanceId),
max(i._lastRecovery) from ProcessInstanceDAOImpl as i where
i._process._processId = :processId and i._state in(:states) and exists(select r
from ActivityRecoveryDAOImpl r where i = r._instance)")
})
public class ProcessInstanceDAOImpl extends OpenJPADAO implements
ProcessInstanceDAO {
private static final Log __log =
LogFactory.getLog(ProcessInstanceDAOImpl.class);
public final static String DELETE_INSTANCES_BY_PROCESS =
"DELETE_INSTANCES_BY_PROCESS";
+ public final static String
COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID =
"COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
@Id @Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
@@ -105,6 +108,8 @@
@SuppressWarnings("unused")
private Collection<MessageExchangeDAO> _messageExchanges = new
ArrayList<MessageExchangeDAO>();
+ private transient int _activityFailureCount = -1;
+
public ProcessInstanceDAOImpl() {}
public ProcessInstanceDAOImpl(CorrelatorDAOImpl correlator,
ProcessDAOImpl process) {
_instantiatingCorrelator = correlator;
@@ -215,7 +220,15 @@
}
public int getActivityFailureCount() {
- return _recoveries.size();
+ if( _activityFailureCount == -1 ) {
+ _activityFailureCount = _recoveries.size();
+ }
+
+ return _activityFailureCount;
+ }
+
+ public void setActivityFailureCount(int activityFailureCount) {
+ _activityFailureCount = activityFailureCount;
}
public Date getActivityFailureDateTime() {