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 2008/08/04 20:44:21 UTC

svn commit: r682457 [2/2] - in /ode/branches/rtver: ./ bpel-api/src/main/java/org/apache/ode/bpel/rapi/ bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/ bpel-compiler/src/main/java/...

Added: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeImpl.java?rev=682457&view=auto
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeImpl.java (added)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeImpl.java Mon Aug  4 11:44:19 2008
@@ -0,0 +1,174 @@
+package org.apache.ode.bpel.rtrep.v2;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.rtrep.common.extension.AbstractExtensionBundle;
+import org.apache.ode.bpel.rapi.OdeRuntime;
+import org.apache.ode.bpel.rapi.ProcessModel;
+import org.apache.ode.bpel.rapi.OdeRTInstance;
+import org.apache.ode.bpel.rapi.PropertyAliasModel;
+import org.apache.ode.bpel.rtrep.common.ConfigurationException;
+import org.apache.ode.jacob.soup.ReplacementMap;
+import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
+import org.apache.ode.utils.msg.MessageBundle;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+import javax.xml.namespace.QName;
+
+public class RuntimeImpl implements OdeRuntime {
+    private static final Log __log = LogFactory.getLog(RuntimeImpl.class);
+
+    private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
+
+    ProcessConf _pconf;
+    OProcess _oprocess;
+    Set<String> _mustUnderstandExtensions;
+    ReplacementMap _replacementMap;
+    ExpressionLanguageRuntimeRegistry _expLangRuntimeRegistry;
+    Map<String, AbstractExtensionBundle> _extensionRegistry;
+
+    /**
+     * Initialize according to process configuration.
+     */
+    public void init(ProcessConf pconf) {
+        _pconf = pconf;
+        try {
+            _oprocess = deserializeCompiledProcess(_pconf.getCBPInputStream());
+        } catch (Exception e) {
+            String errmsg = "Error reloading compiled process " + _pconf.getProcessId() + "; the file appears to be corrupted.";
+            __log.error(errmsg);
+            throw new BpelEngineException(errmsg, e);
+        }
+
+        _replacementMap = new ReplacementMapImpl(_oprocess);
+
+        // Create an expression language registry for this process
+        ExpressionLanguageRuntimeRegistry elangRegistry = new ExpressionLanguageRuntimeRegistry();
+        for (OExpressionLanguage elang : _oprocess.expressionLanguages) {
+            try {
+                elangRegistry.registerRuntime(elang);
+            } catch (ConfigurationException e) {
+                String msg = __msgs.msgExpLangRegistrationError(elang.expressionLanguageUri, elang.properties);
+                __log.error(msg, e);
+                throw new BpelEngineException(msg, e);
+            }
+        }
+        _expLangRuntimeRegistry = elangRegistry;
+
+        // Checking for registered extension bundles, throw an exception when
+        // a "mustUnderstand" extension is not available
+        _mustUnderstandExtensions = new HashSet<String>();
+        for (OProcess.OExtension extension : _oprocess.declaredExtensions) {
+            if (extension.mustUnderstand) {
+                if (_extensionRegistry.get(extension.namespaceURI) == null) {
+                    String msg = __msgs.msgExtensionMustUnderstandError(_pconf.getProcessId(), extension.namespaceURI);
+                    __log.error(msg);
+                    throw new BpelEngineException(msg);
+                } else {
+                    _mustUnderstandExtensions.add(extension.namespaceURI);
+                }
+            } else {
+                __log.warn("The process declares the extension namespace " + extension.namespaceURI
+                        + " that is unkown to the engine");
+            }
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.ode.bpel.engine.rapi.OdeRuntime#createInstance(org.apache.ode.bpel.engine.rapi.OdeRTInstanceContext)
+     */
+    public OdeRTInstance newInstance(Object state) {
+        return new RuntimeInstanceImpl(this, (ExecutionQueueImpl) state);
+    }
+
+    public ReplacementMap getReplacementMap(QName processName) {
+        if (_pconf.getProcessId().equals(processName))
+            return new ReplacementMapImpl(_oprocess);
+        else throw new UnsupportedOperationException("Implement the creation of replacement map for other version.");
+    }
+
+    public ProcessModel getModel() {
+        return _oprocess;
+    }
+
+    /**
+     * Extract the value of a BPEL property from a BPEL messsage variable.
+     *
+     * @param msgData message variable data
+     * @param aliasModel alias to apply
+     * @param target description of the data (for error logging only)
+     * @return value of the property
+     * @throws org.apache.ode.bpel.common.FaultException
+     */
+    public String extractProperty(Element msgData, PropertyAliasModel aliasModel, String target) throws FaultException {
+        OProcess.OPropertyAlias alias = (OProcess.OPropertyAlias) aliasModel;
+        PropertyAliasEvaluationContext ectx = new PropertyAliasEvaluationContext(msgData, alias);
+        Node lValue = ectx.getRootNode();
+
+        if (alias.location != null)
+            lValue = _expLangRuntimeRegistry.evaluateNode(alias.location, ectx);
+
+        if (lValue == null) {
+            String errmsg = __msgs.msgPropertyAliasReturnedNullSet(alias.getDescription(), target);
+            if (__log.isErrorEnabled()) __log.error(errmsg);
+            throw new FaultException(_oprocess.constants.qnSelectionFailure, errmsg);
+        }
+
+        if (lValue.getNodeType() == Node.ELEMENT_NODE) {
+            // This is a bit hokey, we concatenate all the children's values; we really should be
+            // checking to make sure that we are only dealing with text and attribute nodes.
+            StringBuffer val = new StringBuffer();
+            NodeList nl = lValue.getChildNodes();
+            for (int i = 0; i < nl.getLength(); ++i) {
+                Node n = nl.item(i);
+                val.append(n.getNodeValue());
+            }
+            return val.toString();
+        } else if (lValue.getNodeType() == Node.TEXT_NODE) {
+            return ((Text) lValue).getWholeText();
+        } else
+            return null;
+    }
+
+    public void clear() {
+        _pconf = null;
+        _oprocess = null;
+        _mustUnderstandExtensions = null;
+        _replacementMap = null;
+        _expLangRuntimeRegistry = null;
+        _extensionRegistry = null;
+    }
+
+    /**
+     * Read an {@link OProcess} representation from a stream.
+     * 
+     * @param is
+     *            input stream
+     * @return deserialized process representation
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    private OProcess deserializeCompiledProcess(InputStream is) throws IOException, ClassNotFoundException {
+        OProcess compiledProcess;
+        Serializer ofh = new Serializer(is);
+        compiledProcess = ofh.readOProcess();
+        return compiledProcess;
+    }
+
+
+}

Modified: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java?rev=682457&r1=682456&r2=682457&view=diff
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java (original)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java Mon Aug  4 11:44:19 2008
@@ -15,11 +15,10 @@
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.ProcessInstanceStartedEvent;
 import org.apache.ode.bpel.evt.ScopeEvent;
-import org.apache.ode.bpel.rtrep.rapi.*;
+import org.apache.ode.bpel.rapi.*;
 import org.apache.ode.bpel.rtrep.v2.channels.*;
 import org.apache.ode.bpel.rtrep.common.extension.ExtensionOperation;
 import org.apache.ode.bpel.rtrep.common.extension.AbstractExtensionBundle;
-import org.apache.ode.bpel.rtrep.common.extension.ExtensionContext;
 import org.apache.ode.bpel.evar.ExternalVariableModuleException;
 import org.apache.ode.bpel.evar.IncompleteKeyException;
 import org.apache.ode.bpel.iapi.BpelEngineException;

Modified: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/SCOPE.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/SCOPE.java?rev=682457&r1=682456&r2=682457&view=diff
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/SCOPE.java (original)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/SCOPE.java Mon Aug  4 11:44:19 2008
@@ -40,7 +40,7 @@
 import org.apache.ode.bpel.rtrep.v2.channels.ParentScopeChannelListener;
 import org.apache.ode.bpel.rtrep.v2.channels.TerminationChannel;
 import org.apache.ode.bpel.rtrep.v2.channels.TerminationChannelListener;
-import org.apache.ode.bpel.rtrep.rapi.InvalidProcessException;
+import org.apache.ode.bpel.rapi.InvalidProcessException;
 import org.apache.ode.jacob.ChannelListener;
 import org.apache.ode.jacob.SynchChannel;
 import org.w3c.dom.Element;

Modified: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/Selector.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/Selector.java?rev=682457&r1=682456&r2=682457&view=diff
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/Selector.java (original)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/Selector.java Mon Aug  4 11:44:19 2008
@@ -19,12 +19,12 @@
 package org.apache.ode.bpel.rtrep.v2;
 
 import org.apache.ode.bpel.common.CorrelationKey;
-import org.apache.ode.bpel.rtrep.rapi.PartnerLink;
+import org.apache.ode.bpel.rapi.PartnerLink;
 import org.apache.ode.utils.ObjectPrinter;
 
 import java.io.Serializable;
 
-public class Selector implements Serializable, org.apache.ode.bpel.rtrep.rapi.Selector {
+public class Selector implements Serializable, org.apache.ode.bpel.rapi.Selector {
     private static final long serialVersionUID = 1L;
 
     public final PartnerLinkInstance plinkInstance;

Modified: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/VariableInstance.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/VariableInstance.java?rev=682457&r1=682456&r2=682457&view=diff
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/VariableInstance.java (original)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/VariableInstance.java Mon Aug  4 11:44:19 2008
@@ -18,7 +18,7 @@
  */
 package org.apache.ode.bpel.rtrep.v2;
 
-import org.apache.ode.bpel.rtrep.rapi.Variable;
+import org.apache.ode.bpel.rapi.Variable;
 
 import java.io.Serializable;
 

Modified: ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/channels/FaultData.java
URL: http://svn.apache.org/viewvc/ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/channels/FaultData.java?rev=682457&r1=682456&r2=682457&view=diff
==============================================================================
--- ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/channels/FaultData.java (original)
+++ ode/branches/rtver/runtime-repo/src/main/java/org/apache/ode/bpel/rtrep/v2/channels/FaultData.java Mon Aug  4 11:44:19 2008
@@ -23,7 +23,7 @@
 import org.apache.ode.bpel.rtrep.v2.OVarType;
 import org.apache.ode.bpel.rtrep.v2.OElementVarType;
 import org.apache.ode.bpel.rtrep.v2.OMessageVarType;
-import org.apache.ode.bpel.rtrep.rapi.FaultInfo;
+import org.apache.ode.bpel.rapi.FaultInfo;
 import org.w3c.dom.Element;
 
 import javax.xml.namespace.QName;