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));