You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2007/11/28 20:16:44 UTC
svn commit: r599101 - in /ode/trunk:
bpel-api/src/main/java/org/apache/ode/bpel/eapi/
bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/
bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/
bpel-obj/src/main/java/org/apache/ode/bpel/o/ ...
Author: vanto
Date: Wed Nov 28 11:16:43 2007
New Revision: 599101
URL: http://svn.apache.org/viewvc?rev=599101&view=rev
Log:
clean up and refactoring of the extension activity module.
base class for asynchronous extension activities added.
Added:
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractAsyncExtensionOperation.java
- copied, changed from r599070, ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractExtensionOperation.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractSyncExtensionOperation.java
Removed:
ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/eapi/
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/channels/ExtensionResponse.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractExtensionOperation.java
Modified:
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ExtensibilityQNames.java
ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OProcess.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EXTENSIONACTIVITY.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExtensionContextImpl.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionContext.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionOperation.java
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java
ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExtensibilityTest.java
ode/trunk/extensions/README.extensions
ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java
ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java Wed Nov 28 11:16:43 2007
@@ -1523,8 +1523,11 @@
oextension.debugInfo = createDebugInfo(_processDef, "Extension " + ext.getNamespaceURI());
- _oprocess.declaredExtensions.add(oextension);
_declaredExtensionNS.add(ext.getNamespaceURI());
+ _oprocess.declaredExtensions.add(oextension);
+ if (ext.isMustUnderstand()) {
+ _oprocess.mustUnderstandExtensions.add(oextension);
+ }
if (__log.isDebugEnabled())
__log.debug("Compiled extension " + oextension);
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ExtensibilityQNames.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ExtensibilityQNames.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ExtensibilityQNames.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ExtensibilityQNames.java Wed Nov 28 11:16:43 2007
@@ -31,5 +31,7 @@
public static final QName FAILURE_HANDLING_RETRY_DELAY = new QName(NS_ACTIVITY_RECOVERY, "retryDelay");
public static final QName FAILURE_HANDLING_FAULT_ON = new QName(NS_ACTIVITY_RECOVERY, "faultOnFailure");
+ public static final String NS_BPEL_EXTENSIBILITY = "http://ode.apache.org/bpelExtensibility";
+ public static final QName UNKNOWN_EA_FAULT_NAME = new QName(NS_BPEL_EXTENSIBILITY, "unknownExtensionImplementation");
}
Modified: ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OProcess.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OProcess.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OProcess.java (original)
+++ ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OProcess.java Wed Nov 28 11:16:43 2007
@@ -61,6 +61,8 @@
/** All declared extensions in the process. **/
public final Set<OExtension> declaredExtensions = new HashSet<OExtension>();
+ /** All must-understand extensions in the process. **/
+ public final Set<OExtension> mustUnderstandExtensions = new HashSet<OExtension>();
/** Date process was compiled. */
public Date compileDate;
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java Wed Nov 28 11:16:43 2007
@@ -124,8 +124,6 @@
ExpressionLanguageRuntimeRegistry _expLangRuntimeRegistry;
- Set<String> _mustUnderstandExtensions;
-
private ReplacementMap _replacementMap;
final ProcessConf _pconf;
@@ -1153,7 +1151,6 @@
_endpointToMyRoleMap = null;
_replacementMap = null;
_expLangRuntimeRegistry = null;
- _mustUnderstandExtensions = null;
}
private void doHydrate() {
@@ -1184,15 +1181,12 @@
// 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) {
+ for (OProcess.OExtension extension : _oprocess.mustUnderstandExtensions) {
if (extension.mustUnderstand) {
if (_contexts.extensionRegistry.get(extension.namespaceURI) == null) {
String msg = __msgs.msgExtensionMustUnderstandError(_pid, 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");
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Wed Nov 28 11:16:43 2007
@@ -74,13 +74,11 @@
import org.apache.ode.bpel.runtime.Selector;
import org.apache.ode.bpel.runtime.VariableInstance;
import org.apache.ode.bpel.runtime.channels.ActivityRecoveryChannel;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannel;
import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.channels.InvokeResponseChannel;
import org.apache.ode.bpel.runtime.channels.PickResponseChannel;
import org.apache.ode.bpel.runtime.channels.TimerResponseChannel;
import org.apache.ode.bpel.runtime.extension.AbstractExtensionBundle;
-import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.apache.ode.jacob.JacobRunnable;
import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
@@ -1204,52 +1202,7 @@
_forceFlush = true;
}
- public void executeExtension(QName extensionId, ExtensionContext context, Element element, ExtensionResponseChannel extResponseChannel) throws FaultException {
- __log.debug("Execute extension activity");
- final String channelId = extResponseChannel.export();
- ExtensionOperation ea = createExtensionActivityImplementation(extensionId);
- if (ea == null) {
- if (_bpelProcess._mustUnderstandExtensions.contains(extensionId.getNamespaceURI())) {
- //TODO
- __log.warn("Lookup of extension activity " + extensionId + " failed.");
- throw new FaultException(new QName("urn:bpel20", "extlookup-failed"), "Lookup of extension activity " + extensionId + " failed.");
- } else {
- // act like <empty> - do nothing
- completeExtensionExecution(channelId, null);
- return;
- }
- }
-
- try {
- ea.run(context, element);
- completeExtensionExecution(channelId, null);
- } catch (RuntimeException e) {
- __log.error("Error during execution of extension activity.", e);
- completeExtensionExecution(channelId, e);
- }
- }
-
- private void completeExtensionExecution(final String channelId, final Throwable t) {
- if (t != null) {
- _vpu.inject(new BpelJacobRunnable() {
- private static final long serialVersionUID = -1L;
-
- public void run() {
- importChannel(channelId, ExtensionResponseChannel.class).onFailure(t);
- }
- });
- } else {
- _vpu.inject(new BpelJacobRunnable() {
- private static final long serialVersionUID = -1L;
-
- public void run() {
- importChannel(channelId, ExtensionResponseChannel.class).onCompleted();
- }
- });
- }
- }
-
- private ExtensionOperation createExtensionActivityImplementation(QName name) {
+ public ExtensionOperation createExtensionActivityImplementation(QName name) {
if (name == null) {
return null;
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java Wed Nov 28 11:16:43 2007
@@ -18,8 +18,6 @@
*/
package org.apache.ode.bpel.runtime;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.List;
import javax.xml.namespace.QName;
@@ -27,7 +25,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.FaultException;
-import org.apache.ode.bpel.compiler.bom.Bpel20QNames;
+import org.apache.ode.bpel.compiler.bom.ExtensibilityQNames;
import org.apache.ode.bpel.evt.PartnerLinkModificationEvent;
import org.apache.ode.bpel.evt.ScopeEvent;
import org.apache.ode.bpel.evt.VariableModificationEvent;
@@ -45,10 +43,9 @@
import org.apache.ode.bpel.o.OMessageVarType.Part;
import org.apache.ode.bpel.o.OProcess.OProperty;
import org.apache.ode.bpel.o.OScope.Variable;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannel;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannelListener;
import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.Namespaces;
import org.apache.ode.utils.msg.MessageBundle;
@@ -581,31 +578,25 @@
}
private void invokeExtensionAssignOperation(OAssign.ExtensionAssignOperation eao) throws FaultException {
+ final ExtensionContext context = new ExtensionContextImpl(_self, _scopeFrame, getBpelRuntimeContext());
+ final QName extensionId = DOMUtils.getElementQName(eao.nestedElement.getElement());
try {
- final ExtensionContext helper = new ExtensionContextImpl(_self.o, _scopeFrame, getBpelRuntimeContext());
- final ExtensionResponseChannel responseChannel = newChannel(ExtensionResponseChannel.class);
-
- getBpelRuntimeContext().executeExtension(DOMUtils.getElementQName(eao.nestedElement.getElement()), helper, eao.nestedElement.getElement(), responseChannel);
-
- object(new ExtensionResponseChannelListener(responseChannel) {
- private static final long serialVersionUID = 1L;
-
- public void onCompleted() {
- _self.parent.completed(null, CompensationHandler.emptySet());
- }
-
- public void onFailure(Throwable t) {
- StringWriter sw = new StringWriter();
- t.printStackTrace(new PrintWriter(sw));
- FaultData fault = createFault(new QName(Bpel20QNames.NS_WSBPEL2_0, "subLanguageExecutionFault"), _self.o, sw.getBuffer().toString());
- _self.parent.completed(fault, CompensationHandler.emptySet());
- };
- });
+ ExtensionOperation ea = getBpelRuntimeContext().createExtensionActivityImplementation(extensionId);
+ if (ea == null) {
+ if (eao.getOwner().mustUnderstandExtensions.contains(extensionId.getNamespaceURI())) {
+ __log.warn("Lookup of extension activity " + extensionId + " failed.");
+ throw new FaultException(ExtensibilityQNames.UNKNOWN_EA_FAULT_NAME, "Lookup of extension activity " + extensionId + " failed. No implementation found.");
+ } else {
+ // act like <empty> - do nothing
+ context.complete();
+ return;
+ }
+ }
+ ea.run(context, eao.nestedElement.getElement());
} catch (FaultException fault) {
__log.error(fault);
- FaultData faultData = createFault(fault.getQName(), _self.o, fault.getMessage());
- _self.parent.completed(faultData, CompensationHandler.emptySet());
+ context.completeWithFault(fault);
}
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java Wed Nov 28 11:16:43 2007
@@ -18,31 +18,29 @@
*/
package org.apache.ode.bpel.runtime;
+import java.util.Collection;
+import java.util.Date;
+
+import javax.wsdl.Operation;
+import javax.xml.namespace.QName;
+
import org.apache.ode.bpel.common.CorrelationKey;
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.evt.ProcessInstanceEvent;
import org.apache.ode.bpel.o.OMessageVarType;
-import org.apache.ode.bpel.o.OMessageVarType.Part;
import org.apache.ode.bpel.o.OPartnerLink;
import org.apache.ode.bpel.o.OProcess;
import org.apache.ode.bpel.o.OScope;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannel;
+import org.apache.ode.bpel.o.OMessageVarType.Part;
+import org.apache.ode.bpel.runtime.channels.ActivityRecoveryChannel;
import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.channels.InvokeResponseChannel;
import org.apache.ode.bpel.runtime.channels.PickResponseChannel;
import org.apache.ode.bpel.runtime.channels.TimerResponseChannel;
-import org.apache.ode.bpel.runtime.channels.ActivityRecoveryChannel;
-import org.apache.ode.bpel.runtime.extension.ExtensionContext;
-import org.apache.ode.utils.SerializableElement;
+import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import javax.wsdl.Operation;
-import java.util.Collection;
-import java.util.Date;
-
-import javax.xml.namespace.QName;
-
/**
* <p>A facade for accessing all the BPEL functionality that is not implemented
* directly in the JACOB framework, but rather "natively" . Things that are so
@@ -260,5 +258,7 @@
void releasePartnerMex(String mexId);
- void executeExtension(QName extensionId, ExtensionContext context, Element element, ExtensionResponseChannel extResponseChannel) throws FaultException;
+ //void executeExtension(QName extensionId, ExtensionContext context, Element element, ExtensionResponseChannel extResponseChannel) throws FaultException;
+
+ ExtensionOperation createExtensionActivityImplementation(QName name);
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EXTENSIONACTIVITY.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EXTENSIONACTIVITY.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EXTENSIONACTIVITY.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EXTENSIONACTIVITY.java Wed Nov 28 11:16:43 2007
@@ -18,22 +18,16 @@
*/
package org.apache.ode.bpel.runtime;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.FaultException;
-import org.apache.ode.bpel.compiler.bom.Bpel20QNames;
+import org.apache.ode.bpel.compiler.bom.ExtensibilityQNames;
import org.apache.ode.bpel.o.OExtensionActivity;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannel;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannelListener;
-import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.apache.ode.utils.DOMUtils;
-import org.apache.ode.utils.SerializableElement;
/**
* JacobRunnable that delegates the work of the <code>extensionActivity</code> activity
@@ -54,31 +48,25 @@
}
public final void run() {
- try {
- final ExtensionResponseChannel responseChannel = newChannel(ExtensionResponseChannel.class);
- final ExtensionContext helper = new ExtensionContextImpl(_self.o, _scopeFrame, getBpelRuntimeContext());
-
- getBpelRuntimeContext().executeExtension(DOMUtils.getElementQName(_oext.nestedElement.getElement()), helper, _oext.nestedElement.getElement(), responseChannel);
-
- object(new ExtensionResponseChannelListener(responseChannel) {
- private static final long serialVersionUID = -1L;
-
- public void onCompleted() {
- _self.parent.completed(null, CompensationHandler.emptySet());
- }
-
- public void onFailure(Throwable t) {
- StringWriter sw = new StringWriter();
- t.printStackTrace(new PrintWriter(sw));
- FaultData fault = createFault(new QName(Bpel20QNames.NS_WSBPEL2_0, "subLanguageExecutionFault"), _oext, sw.getBuffer().toString());
- _self.parent.completed(fault, CompensationHandler.emptySet());
- };
- });
+ final ExtensionContext context = new ExtensionContextImpl(_self, _scopeFrame, getBpelRuntimeContext());
+ final QName extensionId = DOMUtils.getElementQName(_oext.nestedElement.getElement());
+ try {
+ ExtensionOperation ea = getBpelRuntimeContext().createExtensionActivityImplementation(extensionId);
+ if (ea == null) {
+ if (_oext.getOwner().mustUnderstandExtensions.contains(extensionId.getNamespaceURI())) {
+ __log.warn("Lookup of extension activity " + extensionId + " failed.");
+ throw new FaultException(ExtensibilityQNames.UNKNOWN_EA_FAULT_NAME, "Lookup of extension activity " + extensionId + " failed. No implementation found.");
+ } else {
+ // act like <empty> - do nothing
+ context.complete();
+ return;
+ }
+ }
+ ea.run(context, _oext.nestedElement.getElement());
} catch (FaultException fault) {
__log.error(fault);
- FaultData faultData = createFault(fault.getQName(), _oext, fault.getMessage());
- _self.parent.completed(faultData, CompensationHandler.emptySet());
+ context.completeWithFault(fault);
}
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExtensionContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExtensionContextImpl.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExtensionContextImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExtensionContextImpl.java Wed Nov 28 11:16:43 2007
@@ -18,15 +18,24 @@
*/
package org.apache.ode.bpel.runtime;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
+import javax.xml.namespace.QName;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.compiler.bom.Bpel20QNames;
+import org.apache.ode.bpel.evt.ScopeEvent;
+import org.apache.ode.bpel.evt.VariableModificationEvent;
import org.apache.ode.bpel.o.OActivity;
-import org.apache.ode.bpel.o.OLink;
import org.apache.ode.bpel.o.OScope;
import org.apache.ode.bpel.o.OProcess.OProperty;
import org.apache.ode.bpel.o.OScope.Variable;
+import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.w3c.dom.Node;
@@ -35,15 +44,18 @@
* @author Tammo van Lessen (University of Stuttgart)
*/
public class ExtensionContextImpl implements ExtensionContext {
-
+ private static final Log __log = LogFactory.getLog(ExtensionContextImpl.class);
+
private BpelRuntimeContext _context;
private ScopeFrame _scopeFrame;
- private OActivity _activity;
+ private ActivityInfo _activityInfo;
+
+ private boolean hasCompleted = false;
- public ExtensionContextImpl(OActivity activity, ScopeFrame scopeFrame, BpelRuntimeContext context) {
+ public ExtensionContextImpl(ActivityInfo activityInfo, ScopeFrame scopeFrame, BpelRuntimeContext context) {
+ _activityInfo = activityInfo;
_context = context;
_scopeFrame = scopeFrame;
- _activity = activity;
}
public Long getProcessId() {
@@ -68,11 +80,6 @@
return visVars;
}
- public boolean isLinkActive(OLink olink) throws FaultException {
- // TODO Auto-generated method stub
- return false;
- }
-
public String readMessageProperty(Variable variable, OProperty property)
throws FaultException {
VariableInstance vi = _scopeFrame.resolve(variable);
@@ -100,6 +107,9 @@
throws FaultException {
VariableInstance vi = _scopeFrame.resolve(variable);
_context.commitChanges(vi, value);
+ VariableModificationEvent vme = new VariableModificationEvent(variable.name);
+ vme.setNewValue(value);
+ sendEvent(vme);
}
private Variable getVisibleVariable(String varName) {
@@ -107,14 +117,60 @@
}
public String getActivityName() {
- return _activity.name;
+ return _activityInfo.o.name;
}
public OActivity getOActivity() {
- return _activity;
+ return _activityInfo.o;
}
public BpelRuntimeContext getBpelRuntimeContext() {
return _context;
+ }
+
+ public void sendEvent(ScopeEvent event) {
+ if (event.getLineNo() == -1 && _activityInfo.o.debugInfo != null) {
+ event.setLineNo(_activityInfo.o.debugInfo.startLine);
+ }
+ _scopeFrame.fillEventInfo(event);
+ getBpelRuntimeContext().sendEvent(event);
+ }
+
+ public void complete() {
+ if (!hasCompleted) {
+ _activityInfo.parent.completed(null, CompensationHandler.emptySet());
+ hasCompleted = true;
+ } else {
+ if (__log.isWarnEnabled()) {
+ __log.warn("Activity '" + _activityInfo.o.name + "' has already been completed.");
+ }
+ }
+ }
+
+ public void completeWithFault(Throwable t) {
+ if (!hasCompleted) {
+ StringWriter sw = new StringWriter();
+ t.printStackTrace(new PrintWriter(sw));
+ FaultData fault = new FaultData(new QName(Bpel20QNames.NS_WSBPEL2_0, "subLanguageExecutionFault"), _activityInfo.o, sw.getBuffer().toString());
+ _activityInfo.parent.completed(fault, CompensationHandler.emptySet());
+ hasCompleted = true;
+ } else {
+ if (__log.isWarnEnabled()) {
+ __log.warn("Activity '" + _activityInfo.o.name + "' has already been completed.");
+ }
+ }
+ }
+
+ public void completeWithFault(FaultException ex) {
+ if (!hasCompleted) {
+ FaultData fault = new FaultData(ex.getQName(), _activityInfo.o, ex.getMessage());
+ _activityInfo.parent.completed(fault, CompensationHandler.emptySet());
+ hasCompleted = true;
+ } else {
+ if (__log.isWarnEnabled()) {
+ __log.warn("Activity '" + _activityInfo.o.name + "' has already been completed.");
+ }
+ }
+
}
}
Copied: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractAsyncExtensionOperation.java (from r599070, ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractExtensionOperation.java)
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractAsyncExtensionOperation.java?p2=ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractAsyncExtensionOperation.java&p1=ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractExtensionOperation.java&r1=599070&r2=599101&rev=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractExtensionOperation.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractAsyncExtensionOperation.java Wed Nov 28 11:16:43 2007
@@ -18,20 +18,25 @@
*/
package org.apache.ode.bpel.runtime.extension;
+import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.compiler.api.CompilationException;
import org.apache.ode.bpel.compiler.api.ExtensionValidator;
import org.apache.ode.bpel.compiler.bom.ExtensibleElement;
+import org.w3c.dom.Element;
/**
- * Base class for creating new extension implementations.
+ * Base class for creating new asynchronous extension implementations.
*
* @author Tammo van Lessen (University of Stuttgart)
*/
-public abstract class AbstractExtensionOperation implements ExtensionValidator,
+public abstract class AbstractAsyncExtensionOperation implements ExtensionValidator,
ExtensionOperation {
public void validate(ExtensibleElement element) throws CompilationException {
// default behavior: pass
}
+ public abstract void run(ExtensionContext context, Element element)
+ throws FaultException;
+
}
Added: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractSyncExtensionOperation.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractSyncExtensionOperation.java?rev=599101&view=auto
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractSyncExtensionOperation.java (added)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/AbstractSyncExtensionOperation.java Wed Nov 28 11:16:43 2007
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.runtime.extension;
+
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.compiler.api.CompilationException;
+import org.apache.ode.bpel.compiler.api.ExtensionValidator;
+import org.apache.ode.bpel.compiler.bom.ExtensibleElement;
+import org.w3c.dom.Element;
+
+/**
+ * Base class for creating new extension implementations.
+ *
+ * @author Tammo van Lessen (University of Stuttgart)
+ */
+public abstract class AbstractSyncExtensionOperation implements ExtensionValidator,
+ ExtensionOperation {
+
+ public void validate(ExtensibleElement element) throws CompilationException {
+ // default behavior: pass
+ }
+
+ protected abstract void runSync(ExtensionContext context, Element element) throws FaultException;
+
+ public void run(ExtensionContext context, Element element)
+ throws FaultException {
+ try {
+ runSync(context, element);
+ context.complete();
+ } catch (FaultException f) {
+ context.completeWithFault(f);
+ } catch (Exception e) {
+ context.completeWithFault(e);
+ }
+ }
+}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionContext.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionContext.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionContext.java Wed Nov 28 11:16:43 2007
@@ -103,16 +103,6 @@
throws FaultException;
/**
- * Obtain the status of a control link.
- *
- * @param olink
- * link to check
- * @return <code>true</code> if the link is active, <code>false</code>
- * otherwise.
- */
- boolean isLinkActive(OLink olink) throws FaultException;
-
- /**
* Reads the current process instance id.
* @return instance id
*/
@@ -131,6 +121,10 @@
BpelRuntimeContext getBpelRuntimeContext();
+
//ScopeFrame getScopeFrame();
+ void complete();
+ void completeWithFault(Throwable t);
+ void completeWithFault(FaultException fault);
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionOperation.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionOperation.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionOperation.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/extension/ExtensionOperation.java Wed Nov 28 11:16:43 2007
@@ -36,4 +36,5 @@
public interface ExtensionOperation {
void run(ExtensionContext context, Element element) throws FaultException;
+
}
Modified: ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java (original)
+++ ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java Wed Nov 28 11:16:43 2007
@@ -43,12 +43,11 @@
import org.apache.ode.bpel.o.OThrow;
import org.apache.ode.bpel.o.OMessageVarType.Part;
import org.apache.ode.bpel.runtime.channels.ActivityRecoveryChannel;
-import org.apache.ode.bpel.runtime.channels.ExtensionResponseChannel;
import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.bpel.runtime.channels.InvokeResponseChannel;
import org.apache.ode.bpel.runtime.channels.PickResponseChannel;
import org.apache.ode.bpel.runtime.channels.TimerResponseChannel;
-import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
import org.apache.ode.jacob.vpu.JacobVPU;
import org.w3c.dom.Element;
@@ -418,11 +417,9 @@
}
- public void executeExtension(QName extensionId, ExtensionContext context,
- Element element,
- ExtensionResponseChannel extResponseChannel) throws FaultException {
+ public ExtensionOperation createExtensionActivityImplementation(QName name) {
// TODO Auto-generated method stub
-
+ return null;
}
}
Modified: ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java (original)
+++ ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java Wed Nov 28 11:16:43 2007
@@ -38,6 +38,8 @@
*/
public class MockExtensionContext implements ExtensionContext {
private Map<String, Node> variables = new HashMap<String, Node>();
+ public boolean completed;
+ public boolean faulted;
public Map<String, Node> getVariables() {
return variables;
@@ -91,4 +93,19 @@
public void writeVariable(Variable variable, Node value) throws FaultException {
throw new UnsupportedOperationException("This method is not available in this mock implementation.");
}
+
+ public void complete() {
+ this.completed = true;
+ }
+
+ public void completeWithFault(Throwable t) {
+ this.completed = true;
+ this.faulted = true;
+ }
+
+ public void completeWithFault(FaultException fault) {
+ this.completed = true;
+ this.faulted = true;
+ }
+
}
Modified: ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExtensibilityTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExtensibilityTest.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExtensibilityTest.java (original)
+++ ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExtensibilityTest.java Wed Nov 28 11:16:43 2007
@@ -18,15 +18,13 @@
*/
package org.apache.ode.test;
-import javax.xml.namespace.QName;
-
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.compiler.api.CompilationException;
import org.apache.ode.bpel.compiler.api.CompilationMessage;
import org.apache.ode.bpel.compiler.bom.ExtensibleElement;
import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.bpel.runtime.extension.AbstractAsyncExtensionOperation;
import org.apache.ode.bpel.runtime.extension.AbstractExtensionBundle;
-import org.apache.ode.bpel.runtime.extension.AbstractExtensionOperation;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.apache.ode.bpel.runtime.extension.ExtensionOperation;
import org.apache.ode.utils.DOMUtils;
@@ -126,6 +124,7 @@
public void run(ExtensionContext context,
Element element) throws FaultException {
TestExtensionBundle.wasExecuted = true;
+ context.complete();
}
}
@@ -142,16 +141,19 @@
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
+ } finally {
+ context.complete();
}
}
}
- public static class TestExtensionValidatorActivity extends AbstractExtensionOperation {
+ public static class TestExtensionValidatorActivity extends AbstractAsyncExtensionOperation {
private static final long serialVersionUID = 1L;
public void run(ExtensionContext context,
Element element) throws FaultException {
TestExtensionBundle.wasExecuted = true;
+ context.complete();
}
@Override
Modified: ode/trunk/extensions/README.extensions
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/README.extensions?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/extensions/README.extensions (original)
+++ ode/trunk/extensions/README.extensions Wed Nov 28 11:16:43 2007
@@ -1 +1,22 @@
-TODO
\ No newline at end of file
+=============================================
+ Apache ODE - Extension Installation Guide
+=============================================
+
+BPEL 2.0 introduces extensibility mechanisms, which allow you to extend
+the set of activities and/or variable assignment mechanisms.
+With BPEL 2.0 it is possible to extend the language by user-defined
+activities and custom assignment logic.
+
+Since version 1.2 Apache ODE supports these extensibility mechanismns
+and provides a plug-in architecture that allows for registering
+third-party extensions.
+
+1.) Installation of extensions (WAR)
+ 1) Copy the extension
+ TBC
+
+2.) Installation of extensions (JBI)
+ TBW
+
+3.) Writing ODE extensions
+ TBW
\ No newline at end of file
Modified: ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java (original)
+++ ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java Wed Nov 28 11:16:43 2007
@@ -21,7 +21,7 @@
import javax.xml.namespace.QName;
import org.apache.ode.bpel.common.FaultException;
-import org.apache.ode.bpel.runtime.extension.AbstractExtensionOperation;
+import org.apache.ode.bpel.runtime.extension.AbstractSyncExtensionOperation;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
@@ -36,9 +36,9 @@
*
* @author Tammo van Lessen (University of Stuttgart)
*/
-public class JSExtensionOperation extends AbstractExtensionOperation {
+public class JSExtensionOperation extends AbstractSyncExtensionOperation {
- public void run(ExtensionContext context, Element element) throws FaultException {
+ public void runSync(ExtensionContext context, Element element) throws FaultException {
CustomContextFactory.init();
Context ctx = Context.enter();
Modified: ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java?rev=599101&r1=599100&r2=599101&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java (original)
+++ ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java Wed Nov 28 11:16:43 2007
@@ -22,7 +22,6 @@
import org.apache.ode.test.MockExtensionContext;
import org.apache.ode.utils.DOMUtils;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.Element;
@@ -44,6 +43,8 @@
jso.run(c, e);
String res = DOMUtils.domToString(c.getVariables().get("request"));
Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<message><TestPart>Hello World</TestPart></message>", res);
+ Assert.assertTrue(c.completed);
+ Assert.assertFalse(c.faulted);
}
@Test public void testArrayCopy() throws Exception {
@@ -62,6 +63,8 @@
jso.run(c, e);
String res = DOMUtils.domToString(c.getVariables().get("items"));
Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<message><TestPart><items><item><name>WSDL consulting</name><price>2500</price></item><item hyped=\"true\"><name>BPEL consulting</name><price>6000</price></item></items></TestPart></message>", res);
+ Assert.assertTrue(c.completed);
+ Assert.assertFalse(c.faulted);
}
}