You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2008/12/15 22:51:24 UTC
svn commit: r726820 - 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/apache/...
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() {