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;
+    }
 }