Author: mszefler
Date: Thu Oct 26 14:25:20 2006
New Revision: 468140

URL: http://svn.apache.org/viewvc?view=rev&rev=468140
Log:
CheckRoute method

Modified:
    incubator/ode/trunk/dao-hibernate/.classpath
    
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
    
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java

Modified: incubator/ode/trunk/dao-hibernate/.classpath
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/dao-hibernate/.classpath?view=diff&rev=468140&r1=468139&r2=468140
==============================================================================
--- incubator/ode/trunk/dao-hibernate/.classpath (original)
+++ incubator/ode/trunk/dao-hibernate/.classpath Thu Oct 26 14:25:20 2006
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
        <classpathentry kind="src" path="src/main/java"/>
        <classpathentry output="target/test-classes" kind="src" 
path="src/test/java"/>
@@ -37,5 +38,6 @@
        <classpathentry kind="var" 
path="M2_REPO/jaxen/jaxen/1.1-beta-8/jaxen-1.1-beta-8.jar"/>
        <classpathentry kind="var" 
path="M2_REPO/xmlbeans/xmlpublic/2.1.0/xmlpublic-2.1.0.jar"/>
        <classpathentry kind="src" path="/ode-bpel-dao"/>
+       <classpathentry combineaccessrules="false" kind="src" 
path="/ode-bpel-api"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java?view=diff&rev=468140&r1=468139&r2=468140
==============================================================================
--- 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
 (original)
+++ 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
 Thu Oct 26 14:25:20 2006
@@ -20,6 +20,7 @@
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.Iterator;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -36,6 +37,7 @@
 import org.apache.ode.daohib.bpel.hobj.HMessageExchange;
 import org.apache.ode.daohib.bpel.hobj.HProcessInstance;
 import org.apache.ode.utils.ArrayUtils;
+import org.hibernate.Hibernate;
 import org.hibernate.LockMode;
 import org.hibernate.Query;
 
@@ -80,17 +82,29 @@
 
         Query qry = getSession().createFilter(_hobj.getMessageCorrelations(), 
QRY_MESSAGE);
         qry.setString(0, key.toCanonicalString());
-        HCorrelatorMessage mcor = (HCorrelatorMessage) qry.uniqueResult();
-
-        if (mcor == null) {
-            __log.debug(hdr + "did not find a MESSAGE entry.");
-            return null;
+        
+        // We really should consider the possibility of multiple messages 
matching a criteria.
+        // When the message is handled, its not too convenient to attempt to 
determine if the
+        // received message conflicts with one already received.
+
+        Iterator mcors = qry.iterate();
+
+        try {
+            if (!mcors.hasNext()) {
+                __log.debug(hdr + "did not find a MESSAGE entry.");
+                return null;
+            }
+    
+            HCorrelatorMessage mcor = (HCorrelatorMessage) mcors.next();
+            
+            
+            __log.debug(hdr + "found MESSAGE entry " + 
mcor.getMessageExchange());
+            removeEntries(mcor.getMessageExchange());
+    
+            return new MessageExchangeDaoImpl(_sm, mcor.getMessageExchange());
+        } finally {
+            Hibernate.close(mcors);
         }
-
-        __log.debug(hdr + "found MESSAGE entry " + mcor.getMessageExchange());
-        removeEntries(mcor.getMessageExchange());
-
-        return new MessageExchangeDaoImpl(_sm, mcor.getMessageExchange());
     }
 
     public MessageRouteDAO findRoute(CorrelationKey key) {
@@ -111,8 +125,19 @@
             Query q = getSession().createFilter(_hobj.getSelectors(), 
FLTR_SELECTORS);
             q.setString(0, key == null ? null : key.toCanonicalString());
             q.setLockMode("this", LockMode.UPGRADE);
-    
-            HCorrelatorSelector selector = (HCorrelatorSelector) 
q.uniqueResult();
+
+            HCorrelatorSelector selector;
+            try {
+                selector = (HCorrelatorSelector) q.uniqueResult();
+            } catch (Exception ex) {
+                __log.debug("Strange, could not get a unique result for 
findRoute, trying to iterate instead.");
+                
+                Iterator i = q.iterate();
+                if (i.hasNext())
+                    selector = (HCorrelatorSelector) i.next();
+                else selector = null;
+                Hibernate.close(i);
+            }
     
             __log.debug(hdr + "found " + selector);
             return selector == null ? null : new MessageRouteDaoImpl(_sm, 
selector);
@@ -160,7 +185,6 @@
                 + correlationKey + "): ";
 
         __log.debug(hdr);
-
         HCorrelatorSelector hsel = new HCorrelatorSelector();
         hsel.setGroupId(routeGroupId);
         hsel.setIndex(idx);
@@ -175,6 +199,15 @@
         __log.debug(hdr + "saved " + hsel);
     }
 
+    public boolean checkRoute(CorrelationKey ckey) {
+
+        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();
+        
+    }
     public String getCorrelatorId() {
         return _hobj.getCorrelatorId();
     }

Modified: 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java?view=diff&rev=468140&r1=468139&r2=468140
==============================================================================
--- 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java
 (original)
+++ 
incubator/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HCorrelatorSelector.java
 Thu Oct 26 14:25:20 2006
@@ -81,6 +81,7 @@
      * @hibernate.property column="CORRELATION_KEY" not-null="true"
      * @hibernate.column name="CORRELATION_KEY"
      *                   index="IDX_SELECTOR_CKEY"
+     *                   unique-key="UNIQ_SELECTOR"
      *                   
      */
     public String getCorrelationKey() {
@@ -93,7 +94,7 @@
 
     /**
      * @hibernate.many-to-one not-null="true"
-     * @hibernate.column name="CORRELATOR" index="IDX_SELECTOR_CORRELATOR"
+     * @hibernate.column name="CORRELATOR" index="IDX_SELECTOR_CORRELATOR" 
unique-key="UNIQ_SELECTOR"
      */
     public HCorrelator getCorrelator() {
         return _correlator;


Reply via email to