You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2009/04/06 10:44:33 UTC
svn commit: r762256 - in
/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa:
BPELDAOConnectionImpl.java ProcessInstanceDAOImpl.java
Author: milinda
Date: Mon Apr 6 08:44:32 2009
New Revision: 762256
URL: http://svn.apache.org/viewvc?rev=762256&view=rev
Log:
Fix for Process and Instance Management API's listInstances method's filter problem. Filter support was not there for listInstances method when using OpenJPA. Also according to the pmapi schema, there must be event-info element with first, last and count child elements in the instance-info XML returned by listInstances Web Service API method. But implementation was not there and fix for that also available in this patch. There are some coding improvements for org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java.
Modified:
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?rev=762256&r1=762255&r2=762256&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java Mon Apr 6 08:44:32 2009
@@ -19,38 +19,25 @@
package org.apache.ode.dao.jpa;
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.xml.namespace.QName;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.BpelEventFilter;
import org.apache.ode.bpel.common.Filter;
import org.apache.ode.bpel.common.InstanceFilter;
-import org.apache.ode.bpel.dao.BpelDAOConnection;
-import org.apache.ode.bpel.dao.CorrelationSetDAO;
-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.dao.*;
import org.apache.ode.bpel.evt.BpelEvent;
import org.apache.ode.bpel.evt.ScopeEvent;
import org.apache.ode.utils.ISO8601DateParser;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.persistence.OpenJPAQuery;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.xml.namespace.QName;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.util.*;
+
/**
* @author Matthieu Riou <mriou at apache dot org>
*/
@@ -77,8 +64,7 @@
}
public ProcessInstanceDAO getInstance(Long iid) {
- ProcessInstanceDAOImpl instance = _em.find(ProcessInstanceDAOImpl.class, iid);
- return instance;
+ return _em.find(ProcessInstanceDAOImpl.class, iid);
}
public void close() {
@@ -106,8 +92,7 @@
List l = _em.createQuery("select x from ProcessDAOImpl x where x._processId = ?1")
.setParameter(1, processId.toString()).getResultList();
if (l.size() == 0) return null;
- ProcessDAOImpl p = (ProcessDAOImpl) l.get(0);
- return p;
+ return (ProcessDAOImpl) l.get(0);
}
public ScopeDAO getScope(Long siidl) {
@@ -133,11 +118,12 @@
private static String dateFilter(String filter) {
String date = Filter.getDateWithoutOp(filter);
String op = filter.substring(0,filter.indexOf(date));
- Date dt = null;
+ Date dt;
try {
dt = ISO8601DateParser.parse(date);
} catch (ParseException e) {
- e.printStackTrace();
+ __log.error("Error parsing date.", e);
+ return "";
}
Timestamp ts = new Timestamp(dt.getTime());
return op + " '" + ts.toString() + "'";
@@ -178,7 +164,7 @@
if (criteria.getNameFilter() != null) {
String val = criteria.getNameFilter();
if (val.endsWith("*")) {
- val = val.substring(0, val.length()-1) + "%";
+ val = (val.substring(0, val.length()-1).equals("*")? "":val.substring(0, val.length()-1)) + "%";
}
//process type string begins with name space
//this could possibly match more than you want
@@ -191,8 +177,8 @@
//process type string begins with name space
//this could possibly match more than you want
//because the name space and name are stored together
- clauses.add(" pi._process._processType like '{" +
- criteria.getNamespaceFilter() + "%'");
+ clauses.add(" pi._process._processType like '{" +
+ (criteria.getNamespaceFilter().equals("*")? "" : criteria.getNamespaceFilter()) + "%'");
}
// started filter
@@ -291,15 +277,14 @@
Query pq = _em.createQuery(query.toString());
OpenJPAQuery kq = OpenJPAPersistence.cast(pq);
kq.getFetchPlan().setFetchBatchSize(criteria.getLimit());
- List<ProcessInstanceDAO> ql = pq.getResultList();
+ List<ProcessInstanceDAO> ql = kq.getResultList();
Collection<ProcessInstanceDAO> list = new ArrayList<ProcessInstanceDAO>();
- int num = 0;
- for (Iterator iterator = ql.iterator(); iterator.hasNext();) {
- if(num++ > criteria.getLimit()) break;
- ProcessInstanceDAO processInstanceDAO = (ProcessInstanceDAO) iterator
- .next();
- list.add(processInstanceDAO);
+ int num = 0;
+ for (Object piDAO : ql) {
+ if (num++ > criteria.getLimit()) break;
+ ProcessInstanceDAO processInstanceDAO = (ProcessInstanceDAO) piDAO;
+ list.add(processInstanceDAO);
}
return list;
@@ -318,8 +303,8 @@
List l = _em.createQuery("select x from MessageExchangeDAOImpl x where x._id = ?1")
.setParameter(1, mexid).getResultList();
if (l.size() == 0) return null;
- MessageExchangeDAOImpl m = (MessageExchangeDAOImpl) l.get(0);
- return m;
+
+ return (MessageExchangeDAOImpl) l.get(0);
}
public EntityManager getEntityManager() {
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?rev=762256&r1=762255&r2=762256&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java Mon Apr 6 08:44:32 2009
@@ -19,46 +19,17 @@
package org.apache.ode.dao.jpa;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-import javax.xml.namespace.QName;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.ProcessState;
-import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
-import org.apache.ode.bpel.dao.BpelDAOConnection;
-import org.apache.ode.bpel.dao.CorrelationSetDAO;
-import org.apache.ode.bpel.dao.CorrelatorDAO;
-import org.apache.ode.bpel.dao.FaultDAO;
-import org.apache.ode.bpel.dao.ProcessDAO;
-import org.apache.ode.bpel.dao.ProcessInstanceDAO;
-import org.apache.ode.bpel.dao.ScopeDAO;
-import org.apache.ode.bpel.dao.ScopeStateEnum;
-import org.apache.ode.bpel.dao.XmlDataDAO;
+import org.apache.ode.bpel.dao.*;
import org.apache.ode.bpel.evt.ProcessInstanceEvent;
import org.w3c.dom.Element;
+import javax.persistence.*;
+import javax.xml.namespace.QName;
+import java.util.*;
+
@Entity
@Table(name="ODE_PROCESS_INSTANCE")
@NamedQueries({
@@ -222,7 +193,19 @@
}
public EventsFirstLastCountTuple getEventsFirstLastCount() {
- // TODO Auto-generated method stub
+ Query eventQ = getEM().createQuery("SELECT MAX(e._tstamp), MIN(e._tstamp), COUNT(e._tstamp) FROM EventDAOImpl e WHERE e._instance = :instanceId");
+ eventQ.setParameter("instanceId", this);
+ List results = eventQ.getResultList();
+
+ if(!results.isEmpty()){
+ EventsFirstLastCountTuple flc = new EventsFirstLastCountTuple();
+ Object[] res = (Object[]) results.get(0);
+ flc.first = (Date)res[1];
+ flc.last = (Date)res[0];
+ flc.count = ((Long)res[2]).intValue();
+
+ return flc;
+ }
return null;
}