You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2007/02/01 18:22:05 UTC

svn commit: r502289 - in /incubator/ode/trunk: bpel-api/src/main/java/org/apache/ode/bpel/evt/ bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/

Author: mriou
Date: Thu Feb  1 09:22:04 2007
New Revision: 502289

URL: http://svn.apache.org/viewvc?view=rev&rev=502289
Log:
ODE-91 EventContext patch provided by Raja Balasubramanian to add variable data access in events.

Added:
    incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/EventContext.java
    incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EventContextImpl.java
Modified:
    incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/BpelEvent.java
    incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java

Modified: incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/BpelEvent.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/BpelEvent.java?view=diff&rev=502289&r1=502288&r2=502289
==============================================================================
--- incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/BpelEvent.java (original)
+++ incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/BpelEvent.java Thu Feb  1 09:22:04 2007
@@ -33,6 +33,11 @@
         dataHandling, activityLifecycle, scopeHandling, instanceLifecycle, correlation;
     }
 
+    /**
+     * Bpel Event Context. In Event Listeners, use this to get Variable Data
+     */
+    public transient EventContext eventContext;
+
     private Date _timestamp = new Date();
 
     private int _lineNo = -1;

Added: incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/EventContext.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/EventContext.java?view=auto&rev=502289
==============================================================================
--- incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/EventContext.java (added)
+++ incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/evt/EventContext.java Thu Feb  1 09:22:04 2007
@@ -0,0 +1,26 @@
+package org.apache.ode.bpel.evt;
+
+/**
+ * Used in Event Listeners to get Activity Variables and its data.
+ * @author Raja Balasubramanian
+ */
+public interface EventContext {
+    /**
+     * Get ScopeInstanceId
+     * @return scopeInstanceId
+     */
+    Long getScopeInstanceId();
+
+    /**
+     * Get All variable names used in this scope Instance
+     * @return Array of Variable Names. If no variable(s) exists, null will be returned.
+     */
+    String[] getVariableNames();
+
+    /**
+     * Get Variable data for the given variable name, for this scope instance
+     * @param varName Variable Name
+     * @return DOM Node as XML String. If no value exists or variable not initialized, NULL will be returnrd.
+     */
+    String getVariableData(String varName);
+}

Modified: incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java?view=diff&rev=502289&r1=502288&r2=502289
==============================================================================
--- incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java (original)
+++ incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java Thu Feb  1 09:22:04 2007
@@ -18,17 +18,18 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-
 import org.apache.ode.bpel.evt.ActivityEvent;
+import org.apache.ode.bpel.evt.EventContext;
 import org.apache.ode.bpel.evt.ScopeEvent;
 import org.apache.ode.bpel.explang.EvaluationContext;
 import org.apache.ode.bpel.o.OActivity;
 import org.apache.ode.bpel.o.OLink;
 import org.apache.ode.jacob.IndexedObject;
 
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+
 /**
  * Base template for activities.
  */
@@ -75,7 +76,20 @@
             event.setLineNo(_self.o.debugInfo.startLine);
         }
         _scopeFrame.fillEventInfo(event);
+        fillEventContext(event);
         getBpelRuntimeContext().sendEvent(event);
+    }
+
+    /**
+     * Populate BpelEventContext, to be used by Registered Event Listeners
+     * @param event ScopeEvent
+     */
+    protected void fillEventContext(ScopeEvent event)
+    {
+        EventContext eventContext = new EventContextImpl(_scopeFrame.oscope,
+                                                            _scopeFrame.scopeInstanceId,
+                                                            getBpelRuntimeContext());
+        event.eventContext = eventContext;
     }
 
     protected void dpe(Collection<OLink> links) {

Added: incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EventContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EventContextImpl.java?view=auto&rev=502289
==============================================================================
--- incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EventContextImpl.java (added)
+++ incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EventContextImpl.java Thu Feb  1 09:22:04 2007
@@ -0,0 +1,99 @@
+package org.apache.ode.bpel.runtime;
+
+import org.apache.ode.bpel.evt.EventContext;
+import org.apache.ode.bpel.o.OScope;
+import org.apache.ode.bpel.o.OScope.Variable;
+import org.apache.ode.utils.DOMUtils;
+import org.w3c.dom.Node;
+
+import java.util.Iterator;
+
+/**
+ * Bpel Event Context Implementation.
+ * @author Raja Balasubramanian
+ */
+public class EventContextImpl implements EventContext
+{
+    /**
+     * Scope Object used in this scope instance.
+     */
+    private OScope __scope;
+    /**
+     * Scope Instance ID
+     */
+    private Long __scopeInstanceId;
+    /**
+     * BPEL Runtime Context
+     */
+    private BpelRuntimeContext __runtimeContext;
+
+    /**
+     * Constructor
+     * @param __scope Scope Object used in this scope instance.
+     * @param __scopeInstanceId Scope Instance ID
+     * @param __runtimeContext BPEL Runtime Context
+     */
+    public EventContextImpl(OScope __scope, Long __scopeInstanceId, BpelRuntimeContext __runtimeContext)
+    {
+        this.__scope = __scope;
+        this.__scopeInstanceId = __scopeInstanceId;
+        this.__runtimeContext = __runtimeContext;
+    }
+
+    /**
+     * Get Variable data for the given variable name, for this scope instance
+     * @param varName Variable Name
+     * @return DOM Node as XML String. If no value exists or variable not initialized, NULL will be returnrd.
+     */
+    public String getVariableData(String varName)
+    {
+        String value = null;
+        try
+        {
+            Variable var = __scope.getVisibleVariable(varName);
+            VariableInstance varInstance = new VariableInstance(__scopeInstanceId, var);
+            Node varNode = __runtimeContext.fetchVariableData(varInstance, false);
+            value = DOMUtils.domToString(varNode);
+        }
+        catch(Throwable e)
+        {
+            //Don't throw any exception back to the caller. Just return null as value.
+        }
+        return value;
+    }
+
+    /**
+     * Get All variable names used in this scope Instance
+     * @return Array of Variable Names. If no variable(s) exists, null will be returned.
+     */
+    public String[] getVariableNames()
+    {
+        String[] __varNames = null;
+        try
+        {
+            int varSize = __scope.variables.size();
+            __varNames = new String[varSize];
+
+            Iterator<String> _varNames = __scope.variables.keySet().iterator();
+            int i = 0;
+            while(_varNames.hasNext())
+            {
+                __varNames[i++] = _varNames.next();
+            }
+        }
+        catch(Throwable e)
+        {
+            //Don't throw any exception back to the caller. Just return null as value.
+        }
+        return __varNames;
+    }
+
+    /**
+     * Get ScopeInstanceId
+     * @return scopeInstanceId
+     */
+    public Long getScopeInstanceId()
+    {
+        return __scopeInstanceId;
+    }
+}