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 [EMAIL PROTECTED] 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;
