Author: vanto
Date: Tue Sep 14 12:32:44 2010
New Revision: 996868
URL: http://svn.apache.org/viewvc?rev=996868&view=rev
Log:
fixing ODE-888.
Modified:
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/common/CorrelationKeySet.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
Modified:
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/common/CorrelationKeySet.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/common/CorrelationKeySet.java?rev=996868&r1=996867&r2=996868&view=diff
==============================================================================
---
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/common/CorrelationKeySet.java
(original)
+++
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/common/CorrelationKeySet.java
Tue Sep 14 12:32:44 2010
@@ -178,6 +178,15 @@ public class CorrelationKeySet implement
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((correlationKeys == null) ? 0 : correlationKeys.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object o) {
if( o == null || !(o instanceof CorrelationKeySet) ) {
return false;
Modified:
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java?rev=996868&r1=996867&r2=996868&view=diff
==============================================================================
---
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
(original)
+++
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
Tue Sep 14 12:32:44 2010
@@ -18,10 +18,6 @@
*/
package org.apache.ode.bpel.engine;
-import org.apache.ode.bpel.runtime.PartnerLinkInstance;
-import org.apache.ode.bpel.runtime.Selector;
-import org.apache.ode.utils.ObjectPrinter;
-
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
@@ -33,6 +29,10 @@ import javax.wsdl.OperationType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.common.CorrelationKeySet;
+import org.apache.ode.bpel.runtime.PartnerLinkInstance;
+import org.apache.ode.bpel.runtime.Selector;
+import org.apache.ode.utils.ObjectPrinter;
/**
* <p>
@@ -64,7 +64,7 @@ public class IMAManager implements Seria
Set<RequestIdTuple> workingSet = new
HashSet<RequestIdTuple>(_byRid.keySet());
for (int i = 0; i < selectors.length; ++i) {
- final RequestIdTuple rid = new
RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName);
+ final RequestIdTuple rid = new
RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName,
selectors[i].correlationKeySet);
if (workingSet.contains(rid)) {
return i;
}
@@ -94,7 +94,7 @@ public class IMAManager implements Seria
Entry entry = new Entry(pickResponseChannel, selectors);
for (int i = 0; i < selectors.length; ++i) {
- final RequestIdTuple rid = new
RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName);
+ final RequestIdTuple rid = new
RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName,
selectors[i].correlationKeySet);
if (_byRid.containsKey(rid)) {
String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RID " +
rid;
__log.fatal(errmsg);
@@ -187,7 +187,7 @@ public class IMAManager implements Seria
_byOrid.put(orid, oldEntry.mexRef);
} else {
//registered IMA
- RequestIdTuple rid = new RequestIdTuple(oldRid.partnerLink,
oldRid.opName);
+ RequestIdTuple rid = new RequestIdTuple(oldRid.partnerLink,
oldRid.opName, null);
Entry entry = new Entry(oldEntry.pickResponseChannel,
(Selector[]) oldEntry.selectors);
_byRid.put(rid, entry);
_byChannel.put(entry.pickResponseChannel, entry);
@@ -223,24 +223,74 @@ public class IMAManager implements Seria
PartnerLinkInstance partnerLink;
/** Name of the operation. */
String opName;
+ /** cset */
+ CorrelationKeySet ckeySet;
+ /** migrated tuple. This is true if the tuple has been created based
on an old tuple which didn't contain a cset.*/
+ boolean isMigrated = false;
/** Constructor. */
- private RequestIdTuple(PartnerLinkInstance partnerLink, String opName)
{
+ private RequestIdTuple(PartnerLinkInstance partnerLink, String opName,
CorrelationKeySet ckeySet) {
this.partnerLink = partnerLink;
this.opName = opName;
+ this.ckeySet = ckeySet;
+ if (ckeySet == null) {
+ this.isMigrated = true;
+ }
+ }
+
+ public String toString() {
+ return ObjectPrinter.toString(this, new Object[] { "partnerLink",
partnerLink, "opName", opName, "cSet", ckeySet});
}
+ @Override
public int hashCode() {
- return this.partnerLink.hashCode() ^ this.opName.hashCode();
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + getOuterType().hashCode();
+ result = prime * result
+ + ((ckeySet == null) ? 0 : ckeySet.hashCode());
+ result = prime * result
+ + ((opName == null) ? 0 : opName.hashCode());
+ if (!isMigrated) {
+ result = prime * result
+ + ((partnerLink == null) ? 0 : partnerLink.hashCode());
+ }
+ return result;
}
+ @Override
public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
RequestIdTuple other = (RequestIdTuple) obj;
- return other.partnerLink.equals(partnerLink) &&
other.opName.equals(opName);
+ if (!getOuterType().equals(other.getOuterType()))
+ return false;
+ if (!isMigrated) {
+ if (ckeySet == null) {
+ if (other.ckeySet != null)
+ return false;
+ } else if (!ckeySet.equals(other.ckeySet))
+ return false;
+ }
+ if (opName == null) {
+ if (other.opName != null)
+ return false;
+ } else if (!opName.equals(other.opName))
+ return false;
+ if (partnerLink == null) {
+ if (other.partnerLink != null)
+ return false;
+ } else if (!partnerLink.equals(other.partnerLink))
+ return false;
+ return true;
}
- public String toString() {
- return ObjectPrinter.toString(this, new Object[] { "partnerLink",
partnerLink, "opName", opName});
+ private IMAManager getOuterType() {
+ return IMAManager.this;
}
}