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/04/12 18:40:41 UTC
svn commit: r933316 - in /ode/branches/APACHE_ODE_1.X:
bpel-dao/src/main/java/org/apache/ode/bpel/dao/
bpel-obj/src/main/java/org/apache/ode/bpel/o/
bpel-runtime/src/main/java/org/apache/ode/bpel/engine/
bpel-runtime/src/main/java/org/apache/ode/bpel/m...
Author: rr
Date: Mon Apr 12 16:40:40 2010
New Revision: 933316
URL: http://svn.apache.org/viewvc?rev=933316&view=rev
Log:
ODE-804: Correlation unicity fix
Modified:
ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/CorrelatorDAO.java
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OConstants.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java
ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
Modified: ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/CorrelatorDAO.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/CorrelatorDAO.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/CorrelatorDAO.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-dao/src/main/java/org/apache/ode/bpel/dao/CorrelatorDAO.java Mon Apr 12 16:40:40 2010
@@ -20,6 +20,7 @@ package org.apache.ode.bpel.dao;
import java.util.List;
+import org.apache.ode.bpel.common.CorrelationKey;
import org.apache.ode.bpel.common.CorrelationKeySet;
import java.util.Collection;
@@ -89,6 +90,13 @@ public interface CorrelatorDAO {
List<MessageRouteDAO> findRoute(CorrelationKeySet correlationKeySet);
/**
+ * Check if corresponding key set is free to register (see ODE-804)
+ * @param correlationKeySet
+ * @return true - available, false - not available
+ */
+ boolean checkRoute(CorrelationKeySet correlationKeySet);
+
+ /**
* Add a route from the given correlation key to the given process instance.
* @param routeGroupId identifier of the group of routes to which this route belongs
* @param target target process instance
Modified: ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OConstants.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OConstants.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OConstants.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OConstants.java Mon Apr 12 16:40:40 2010
@@ -54,5 +54,12 @@ public class OConstants extends OBase {
public OConstants(OProcess owner) {
super(owner);
}
-
+
+ private String getNS() {
+ return qnMissingRequest.getNamespaceURI();
+ }
+
+ public QName qnAmbiguousReceive() {
+ return new QName(getNS(), "ambiguousReceive");
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Mon Apr 12 16:40:40 2010
@@ -348,11 +348,23 @@ public class BpelRuntimeContextImpl impl
correlators.add(processDao.getCorrelator(correlatorId));
}
+ // Checking conflicts
int conflict = _imaManager.findConflict(selectors);
if (conflict != -1)
throw new FaultException(_bpelProcess.getOProcess().constants.qnConflictingReceive, selectors[conflict]
.toString());
+ // Check for ambiguous receive
+ for (int i = 0; i < selectors.length; ++i) {
+ CorrelatorDAO correlator = correlators.get(i);
+ Selector selector = selectors[i];
+
+ if (!correlator.checkRoute(selector.correlationKeySet)) {
+ throw new FaultException(_bpelProcess.getOProcess().constants.qnAmbiguousReceive(), selector.toString());
+ }
+ }
+
+ //Registering
_imaManager.register(pickResponseChannelStr, selectors);
// First check if we match to a new instance.
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java Mon Apr 12 16:40:40 2010
@@ -134,7 +134,6 @@ class CorrelatorDaoImpl extends DaoBaseI
});
}
-
public boolean checkRoute(CorrelationKey ckey) {
return true;
}
@@ -183,4 +182,8 @@ class CorrelatorDaoImpl extends DaoBaseI
}
}
+ public boolean checkRoute(CorrelationKeySet correlationKeySet) {
+ return true;
+ }
+
}
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java Mon Apr 12 16:40:40 2010
@@ -47,6 +47,7 @@ class CorrelatorDaoImpl extends Hibernat
/** filter for finding a matching selector. */
private static final String LOCK_SELECTORS = "update from HCorrelatorSelector as hs set hs.lock = hs.lock+1 where hs.processType = :processType";
+ private static final String CHECK_SELECTORS = "from HCorrelatorSelector as hs where hs.processType = :processType and hs.correlator.correlatorId = :correlatorId";
private static final String FLTR_SELECTORS = "from HCorrelatorSelector as hs where hs.processType = :processType and hs.correlator.correlatorId = :correlatorId";
private static final String FLTR_SELECTORS_SUBQUERY = ("from HCorrelatorSelector as hs where hs.processType = :processType and hs.correlatorId = " +
"(select hc.id from HCorrelator as hc where hc.correlatorId = :correlatorId )").intern();
@@ -226,14 +227,13 @@ class CorrelatorDaoImpl extends Hibernat
__log.debug(hdr + "saved " + hsel);
}
- public boolean checkRoute(CorrelationKey ckey) {
+ public boolean checkRoute(CorrelationKeySet correlationKeySet) {
entering("CorrelatorDaoImpl.checkRoute");
- Query lockQry = getSession().createQuery(LOCK_SELECTORS);
- lockQry.setString("ckey", ckey == null ? null : ckey.toCanonicalString());
- lockQry.setEntity("corr",_hobj);
- lockQry.setReadOnly(true);
- return lockQry.list().isEmpty();
-
+ Query q = getSession().getNamedQuery(HCorrelatorSelector.SELECT_MESSAGE_ROUTE);
+ q.setEntity("corr",_hobj);
+ q.setString("ckey", correlationKeySet.toCanonicalString());
+ q.setReadOnly(true);
+ return q.list().isEmpty();
}
public String getCorrelatorId() {
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java Mon Apr 12 16:40:40 2010
@@ -22,11 +22,13 @@ package org.apache.ode.daohib.bpel.hobj;
/**
* @hibernate.class table="BPEL_SELECTORS" lazy="true"
* @hibernate.query name="SELECT_MESSAGE_ROUTE_IDS_BY_PROCESS" query="select id from HCorrelatorSelector as m where m.correlator in(select c from HCorrelator c where c.process = :process)"
- * @hibernate.query name="SELECT_MESSAGE_ROUTE_IDS_BY_INSTANCES" query="select id from HCorrelatorSelector as m where m.instance in (:instances))"
+ * @hibernate.query name="SELECT_MESSAGE_ROUTE_IDS_BY_INSTANCES" query="select id from HCorrelatorSelector as m where m.instance in (:instances)"
+ * @hibernate.query name="SELECT_MESSAGE_ROUTE" query="select m.id from HCorrelatorSelector as m where m.correlator = :corr and m.correlationKey = :ckey"
*/
public class HCorrelatorSelector extends HObject {
public static final String SELECT_MESSAGE_ROUTE_IDS_BY_PROCESS = "SELECT_MESSAGE_ROUTE_IDS_BY_PROCESS";
public static final String SELECT_MESSAGE_ROUTE_IDS_BY_INSTANCES = "SELECT_MESSAGE_ROUTE_IDS_BY_INSTANCES";
+ public static final String SELECT_MESSAGE_ROUTE = "SELECT_MESSAGE_ROUTE";
private HProcessInstance _instance;
private String _groupId;
Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java?rev=933316&r1=933315&r2=933316&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java Mon Apr 12 16:40:40 2010
@@ -190,4 +190,9 @@ public class CorrelatorDAOImpl extends O
public Collection<MessageRouteDAO> getAllRoutes() {
return new ArrayList<MessageRouteDAO>(_routes);
}
+
+ public boolean checkRoute(CorrelationKeySet correlationKeySet) {
+ // TODO Auto-generated method stub
+ return true;
+ }
}