You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ms...@apache.org on 2006/10/12 22:08:14 UTC
svn commit: r463406 -
/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
Author: mszefler
Date: Thu Oct 12 13:08:14 2006
New Revision: 463406
URL: http://svn.apache.org/viewvc?view=rev&rev=463406
Log:
ODE-60 Made event handlers execute in their own scopes, rather than
their parent scope.
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
Modified: incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java?view=diff&rev=463406&r1=463405&r2=463406
==============================================================================
--- incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java (original)
+++ incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java Thu Oct 12 13:08:14 2006
@@ -213,9 +213,31 @@
public void onRequestRcvd(int selectorIdx, String mexId) {
+ // The receipt of the message causes a new scope to be created:
+ ScopeFrame ehScopeFrame = new ScopeFrame(_oevent,
+ getBpelRuntimeContext().createScopeInstance(_scopeFrame.scopeInstanceId, _oevent),
+ _scopeFrame,
+ _comps,
+ _fault);
+
+ if (_oevent.variable != null) {
+ Element msgEl = getBpelRuntimeContext().getMyRequest(mexId);
+
+ if (msgEl != null) {
+ try {
+ getBpelRuntimeContext().initializeVariable(ehScopeFrame.resolve(
+ _oevent.variable),msgEl);
+ } catch (Exception ex) {
+ __log.fatal(ex);
+ throw new InvalidProcessException(ex);
+ }
+ }
+ }
+
+
Element msgEl = getBpelRuntimeContext().getMyRequest(mexId);
try {
- getBpelRuntimeContext().initializeVariable(_scopeFrame.resolve(_oevent.variable),msgEl);
+ getBpelRuntimeContext().initializeVariable(ehScopeFrame.resolve(_oevent.variable),msgEl);
} catch (Exception ex) {
__log.error(ex);
throw new InvalidProcessException(ex);
@@ -223,23 +245,23 @@
try {
for (OScope.CorrelationSet cset : _oevent.initCorrelations) {
- initializeCorrelation(_scopeFrame.resolve(cset), _scopeFrame.resolve(_oevent.variable));
+ initializeCorrelation(ehScopeFrame.resolve(cset), ehScopeFrame.resolve(_oevent.variable));
}
if (_oevent.partnerLink.hasPartnerRole()) {
// Trying to initialize partner epr based on a message-provided epr/session.
- if (!getBpelRuntimeContext().isPartnerRoleEndpointInitialized(_scopeFrame
+ if (!getBpelRuntimeContext().isPartnerRoleEndpointInitialized(ehScopeFrame
.resolve(_oevent.partnerLink))) {
Node fromEpr = getBpelRuntimeContext().getSourceEPR(mexId);
if (fromEpr != null) {
getBpelRuntimeContext().writeEndpointReference(
- _scopeFrame.resolve(_oevent.partnerLink), (Element) fromEpr);
+ ehScopeFrame.resolve(_oevent.partnerLink), (Element) fromEpr);
}
}
String partnersSessionId = getBpelRuntimeContext().getSourceSessionId(mexId);
if (partnersSessionId != null)
- getBpelRuntimeContext().initializePartnersSessionId(_scopeFrame.resolve(_oevent.partnerLink),
+ getBpelRuntimeContext().initializePartnersSessionId(ehScopeFrame.resolve(_oevent.partnerLink),
partnersSessionId);
}
@@ -256,17 +278,26 @@
return;
}
+
+
// activate 'onMessage' activity; we'll do this even if a stop/terminate has been
// requested becasue we cannot undo the receipt of the message at this point.
ActivityInfo child = new ActivityInfo(genMonotonic(),
_oevent.activity,
newChannel(TerminationChannel.class), newChannel(ParentScopeChannel.class));
+
+
_active.add(child);
+
+ LinkFrame lf = new LinkFrame(null);
+
+ instance(new SCOPE(child,ehScopeFrame, lf));
+
// If we previously terminated the other activiites, then we do the same
// here; this is easier then undoing the receive.
if (_childrenTerminated)
replication(child.self).terminate();
- instance(createChild(child,_scopeFrame, new LinkFrame(null)));
+
if (_terminated || _stopped || _fault != null)
instance(new WAITING(null));