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;