You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/09/09 07:05:11 UTC
svn commit: r441743 [1/2] - in /incubator/tuscany/java/sca:
containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/
kernel/core/src/main/java/org/apache/tuscany/core/builder/
kernel/core/src/main/java/org/apache/tuscany/core/comp...
Author: jmarino
Date: Fri Sep 8 22:05:09 2006
New Revision: 441743
URL: http://svn.apache.org/viewvc?view=rev&rev=441743
Log:
[PATCH] commit patch by Ignacio for Tuscany-642
Added:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java (with props)
Modified:
incubator/tuscany/java/sca/containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/AsyncGroovyInvoker.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeBindlessBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/AsyncJavaTargetInvoker.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemReferenceImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/AbstractOutboundInvocationHandler.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java
incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/composite.scdl
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/BasicReferenceInvocationHandlerTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationErrorTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationHandlerTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDOutboundInvocationHandlerTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Reference.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Service.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceExtension.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ServiceExtension.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageId.java
incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/sca/composite.scdl
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/ArtifactFactory.java
Modified: incubator/tuscany/java/sca/containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/AsyncGroovyInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/AsyncGroovyInvoker.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/AsyncGroovyInvoker.java (original)
+++ incubator/tuscany/java/sca/containers/container.groovy/src/main/java/org/apache/tuscany/container/groovy/AsyncGroovyInvoker.java Fri Sep 8 22:05:09 2006
@@ -86,7 +86,8 @@
private Object currentMessageId = messageId;
public void run() {
- workContext.setCurrentMessageId(currentMessageId);
+ workContext.setCurrentMessageId(null);
+ workContext.setCurrentCorrelationId(currentMessageId);
CompositeContext oldContext = CurrentCompositeContext.getContext();
try {
BINDER.setContext(currentContext);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Fri Sep 8 22:05:09 2006
@@ -22,12 +22,8 @@
import java.util.List;
import java.util.Map;
-import org.apache.tuscany.core.wire.BridgingInterceptor;
-import org.apache.tuscany.core.wire.InvokerInterceptor;
-import org.apache.tuscany.core.wire.MessageChannelImpl;
-import org.apache.tuscany.core.wire.MessageDispatcher;
-import org.apache.tuscany.core.wire.OutboundAutowire;
-import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
+import org.osoa.sca.annotations.Constructor;
+
import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.BuilderConfigException;
@@ -51,7 +47,15 @@
import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
-import org.osoa.sca.annotations.Constructor;
+
+import org.apache.tuscany.core.implementation.composite.CompositeReference;
+import org.apache.tuscany.core.implementation.composite.CompositeService;
+import org.apache.tuscany.core.wire.BridgingInterceptor;
+import org.apache.tuscany.core.wire.InvokerInterceptor;
+import org.apache.tuscany.core.wire.MessageChannelImpl;
+import org.apache.tuscany.core.wire.MessageDispatcher;
+import org.apache.tuscany.core.wire.OutboundAutowire;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
/**
* The default connector implmentation
@@ -67,8 +71,8 @@
}
@Constructor({"wireService", "postProcessorRegistry"})
- public ConnectorImpl(@Autowire WireService wireService,
- @Autowire WirePostProcessorRegistry postProcessorRegistry) {
+ public ConnectorImpl(@Autowire WireService wireService,
+ @Autowire WirePostProcessorRegistry postProcessorRegistry) {
this.postProcessorRegistry = postProcessorRegistry;
this.wireService = wireService;
}
@@ -111,6 +115,12 @@
chain.setTargetInvoker(invoker);
chain.prepare();
}
+
+ // Now connect the Reference's outbound wire if it is a composite reference
+ if (source instanceof CompositeReference) {
+ CompositeReference compRef = (CompositeReference) source;
+ connect(compRef, compRef.getOutboundWire());
+ }
} else if (source instanceof Service) {
Service<T> service = (Service<T>) source;
InboundWire<T> inboundWire = service.getInboundWire();
@@ -119,7 +129,16 @@
connect(service, outboundWire);
// services have inbound and outbound wires
// NB: this connect must be done after the outbound service chain is connected to its target above
- connect(inboundWire, outboundWire, true);
+ if (!(source instanceof CompositeService)) {
+ connect(inboundWire, outboundWire, true);
+ }
+ /*
+ } else {
+ BuilderConfigException e = new BuilderConfigException("Invalid source context type");
+ e.setIdentifier(source.getName());
+ e.addContextName(parent.getName());
+ throw e;
+ */
}
}
@@ -188,7 +207,6 @@
if (target instanceof Component) {
Component component = (Component) target;
- // FIXME should not relay on annotations
boolean isOneWayOperation = operation.isNonBlocking();
boolean operationHasCallback = contract.getCallbackName() != null;
if (isOneWayOperation && operationHasCallback) {
@@ -203,8 +221,12 @@
} else if (target instanceof Reference) {
Reference reference = (Reference) target;
invoker = reference.createTargetInvoker(targetWire.getServiceContract(), inboundChain.getOperation());
+ } else if (target instanceof CompositeService) {
+ CompositeService compServ = (CompositeService) target;
+ invoker = compServ.createTargetInvoker(targetWire.getServiceContract(), inboundChain.getOperation());
}
- if (source instanceof Service) {
+
+ if (source instanceof Service && !(source instanceof CompositeService)) {
// services are a special case: invoker must go on the inbound chain
connect(outboundChain, inboundChain, null);
Service<?> service = (Service) source;
@@ -234,45 +256,20 @@
TargetInvoker invoker;
invoker = component.createTargetInvoker(null, operation);
connect(outboundChain, inboundChain, invoker);
- } else if (target instanceof Service) {
- throw new UnsupportedOperationException();
- }
- }
-
- /*
- // connect callback wires if they exist
- for (OutboundInvocationChain outboundChain : sourceWire.getSourceCallbackInvocationChains().values()) {
- // match wire chains
- Map<Operation<?>, InboundInvocationChain> chains = sourceWire.getTargetCallbackInvocationChains();
- InboundInvocationChain inboundChain = chains.get(outboundChain.getOperation());
- if (inboundChain == null) {
- BuilderConfigException e =
- new BuilderConfigException("Incompatible source and target interfaces for reference");
- e.setIdentifier(sourceWire.getReferenceName());
- throw e;
- }
- if (source instanceof Component) {
- Component component = (Component) source;
- Operation<?> operation = outboundChain.getOperation();
- boolean isOneWayOperation = operation.isNonBlocking();
- boolean operationHasCallback = contract.getCallbackName() != null;
- if (isOneWayOperation && operationHasCallback) {
- throw new ComponentRuntimeException("Operation cannot be marked one-way and have a callback");
- }
- TargetInvoker invoker;
- if (isOneWayOperation || operationHasCallback) {
- invoker = component.createAsyncTargetInvoker(operation);
- } else {
- Operation<?> inboundOperation = inboundChain.getOperation();
- invoker = component.createTargetInvoker(null, inboundOperation);
- }
+ } else if (source instanceof CompositeReference) {
+ CompositeReference compRef = (CompositeReference) source;
+ TargetInvoker invoker = compRef.createCallbackTargetInvoker(sourceWire.getServiceContract(), operation);
+ connect(outboundChain, inboundChain, invoker);
+ } else if (source instanceof CompositeService) {
+ CompositeService compServ = (CompositeService) source;
+ TargetInvoker invoker =
+ compServ.createCallbackTargetInvoker(sourceWire.getServiceContract(), operation);
connect(outboundChain, inboundChain, invoker);
} else if (target instanceof Service) {
throw new UnsupportedOperationException();
}
}
- */
- }
+ }
public void connect(OutboundInvocationChain sourceChain,
InboundInvocationChain targetChain,
@@ -337,6 +334,13 @@
assert sourceWire.getTargetName() != null : "Wire target name was null";
QualifiedName targetName = sourceWire.getTargetName();
CompositeComponent<?> parent = source.getParent();
+ assert parent != null : "Parent was null";
+ // For a composite reference only, since its outbound wire comes from its parent composite,
+ // the corresponding target would not lie in its parent but rather in its parent's parent
+ if (source instanceof CompositeReference) {
+ parent = parent.getParent();
+ assert parent != null : "Parent of parent was null";
+ }
SCAObject<?> target = parent.getChild(targetName.getPartName());
if (target == null) {
String refName = sourceWire.getReferenceName();
@@ -363,10 +367,34 @@
checkIfWireable(sourceWire, targetWire);
boolean optimizable = isOptimizable(source.getScope(), target.getScope());
connect(source, target, sourceWire, targetWire, optimizable);
+ } else if (target instanceof CompositeComponent) {
+ CompositeComponent composite = (CompositeComponent) target;
+ InboundWire<T> targetWire = null;
+ for (Object child : composite.getChildren()) {
+ if (child instanceof CompositeService) {
+ CompositeService compServ = (CompositeService) child;
+ targetWire = compServ.getInboundWire();
+ assert targetWire != null;
+ Class sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
+ Class targetInterface = targetWire.getServiceContract().getInterfaceClass();
+ if (sourceInterface.isAssignableFrom(targetInterface)) {
+ target = compServ;
+ break;
+ } else {
+ targetWire = null;
+ }
+ }
+ }
+ if (targetWire == null) {
+ throw new BuilderConfigException("No target composite service in composite");
+ }
+ boolean optimizable = isOptimizable(source.getScope(), target.getScope());
+ connect(source, target, sourceWire, targetWire, optimizable);
} else {
String name = sourceWire.getReferenceName();
BuilderConfigException e = new BuilderConfigException("Invalid target type for reference " + name);
e.setIdentifier(targetName.getQualifiedName());
+ throw e;
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java Fri Sep 8 22:05:09 2006
@@ -34,6 +34,7 @@
private static final Object REMOTE_CONTEXT = new Object();
private static final Object MESSAGE_ID = new Object();
+ private static final Object CORRELATION_ID = new Object();
// TODO implement propagation strategy for creating new threads
@@ -60,6 +61,23 @@
workContext.set(map);
}
map.put(MESSAGE_ID, messageId);
+ }
+
+ public Object getCurrentCorrelationId() {
+ Map<Object, Object> map = workContext.get();
+ if (map == null) {
+ return null;
+ }
+ return map.get(CORRELATION_ID);
+ }
+
+ public void setCurrentCorrelationId(Object correlationId) {
+ Map<Object, Object> map = workContext.get();
+ if (map == null) {
+ map = new HashMap<Object, Object>();
+ workContext.set(map);
+ }
+ map.put(CORRELATION_ID, correlationId);
}
public CompositeComponent getRemoteComponent() {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java Fri Sep 8 22:05:09 2006
@@ -26,8 +26,6 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.tuscany.core.component.event.CompositeStart;
-import org.apache.tuscany.core.component.event.CompositeStop;
import org.apache.tuscany.spi.AbstractLifecycle;
import org.apache.tuscany.spi.CoreRuntimeException;
import org.apache.tuscany.spi.component.AtomicComponent;
@@ -36,14 +34,18 @@
import org.apache.tuscany.spi.event.Event;
import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.core.component.event.CompositeStart;
+import org.apache.tuscany.core.component.event.CompositeStop;
+
/**
* A scope context which manages atomic component instances keyed by module
- *
+ *
* @version $Rev$ $Date$
*/
public class ModuleScopeContainer extends AbstractScopeContainer {
private static final InstanceWrapper EMPTY = new EmptyWrapper();
+ private static final ComponentInitComparator COMPARATOR = new ComponentInitComparator();
private final Map<AtomicComponent, InstanceWrapper> instanceWrappers;
@@ -127,27 +129,10 @@
return ctx;
}
- private static class ComponentInitComparator implements Comparator<AtomicComponent> {
- final static ComponentInitComparator INSTANCE = new ComponentInitComparator();
-
- public int compare(AtomicComponent o1, AtomicComponent o2) {
- if (o1.getInitLevel() > o2.getInitLevel()) {
- return -1; // The lower level starts first (except nagative)
- } else if (o1.getInitLevel() < o2.getInitLevel()) {
- return 1;
- } else {
- return 0;
- }
- }
-
- }
-
private void eagerInitComponents() throws CoreRuntimeException {
-
List<AtomicComponent> componentList = new ArrayList<AtomicComponent>(instanceWrappers.keySet());
- Collections.sort(componentList, ComponentInitComparator.INSTANCE);
-
- // start each group
+ Collections.sort(componentList, COMPARATOR);
+ // start each group
for (AtomicComponent component : componentList) {
if (component.getInitLevel() <= 0) {
// Don't eagerly init
@@ -160,6 +145,18 @@
ctx.start();
instanceWrappers.put(component, ctx);
destroyQueue.add(ctx);
+ }
+ }
+ }
+
+ static private class ComponentInitComparator implements Comparator<AtomicComponent> {
+ public int compare(AtomicComponent o1, AtomicComponent o2) {
+ if (o1.getInitLevel() > o2.getInitLevel()) {
+ return -1; // The lower level starts first (except nagative)
+ } else if (o1.getInitLevel() < o2.getInitLevel()) {
+ return 1;
+ } else {
+ return 0;
}
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java Fri Sep 8 22:05:09 2006
@@ -131,7 +131,8 @@
}
String dataBinding = "java.lang.Object";
- DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>("java:parameters", Object[].class, paramDataTypes);
+ DataType<List<DataType<Type>>> inputType =
+ new DataType<List<DataType<Type>>>("java:parameters", Object[].class, paramDataTypes);
Operation<Type> operation =
new Operation<Type>(name, inputType, returnDataType, faultDataTypes, nonBlocking, dataBinding);
operations.put(name, operation);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java Fri Sep 8 22:05:09 2006
@@ -36,6 +36,7 @@
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.ScopeContainer;
import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.TargetException;
import org.apache.tuscany.spi.event.Event;
import org.apache.tuscany.spi.extension.CompositeComponentExtension;
import org.apache.tuscany.spi.model.Operation;
@@ -244,6 +245,14 @@
connector.connect(child);
child.prepare();
}
+ }
+
+ public T getServiceInstance() throws TargetException {
+ Service<T> service = services.get(0);
+ if (service == null) {
+ throw new TargetException("Component has no services");
+ }
+ return (T)service.getServiceInstance();
}
protected void registerAutowireExternal(Class<?> interfaze, SystemService context) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeBindlessBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeBindlessBuilder.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeBindlessBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeBindlessBuilder.java Fri Sep 8 22:05:09 2006
@@ -21,6 +21,7 @@
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.Reference;
import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.model.BindlessServiceDefinition;
import org.apache.tuscany.spi.model.ReferenceDefinition;
@@ -33,6 +34,7 @@
protected BuilderRegistry builderRegistry;
protected WireService wireService;
+ protected WorkContext workContext;
@Autowire
public void setBuilderRegistry(BuilderRegistry registry) {
@@ -44,6 +46,11 @@
this.wireService = wireService;
}
+ @Autowire
+ public void setWorkContext(WorkContext workContext) {
+ this.workContext = workContext;
+ }
+
@Init(eager = true)
public void init() {
builderRegistry.register(this);
@@ -55,12 +62,17 @@
return new CompositeService(definition.getName(),
definition.getServiceContract().getInterfaceClass(),
parent,
- wireService);
+ wireService,
+ workContext);
}
public Reference<?> build(CompositeComponent parent,
ReferenceDefinition definition,
DeploymentContext deploymentContext) {
- return new CompositeReference(definition.getName(), parent, wireService, definition.getServiceContract());
+ return new CompositeReference(definition.getName(),
+ parent,
+ wireService,
+ definition.getServiceContract(),
+ workContext);
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java Fri Sep 8 22:05:09 2006
@@ -18,6 +18,7 @@
import java.lang.reflect.Method;
import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.extension.ReferenceExtension;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.ServiceContract;
@@ -29,16 +30,25 @@
public class CompositeReference<T> extends ReferenceExtension<T> {
+ private WorkContext workContext;
+
public CompositeReference(String name,
CompositeComponent<?> parent,
WireService wireService,
- ServiceContract contract) {
+ ServiceContract contract,
+ WorkContext workContext) {
super(name, (Class<T>) contract.getInterfaceClass(), parent, wireService);
+ this.workContext = workContext;
}
public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
WireObjectFactory wireFactory = new WireObjectFactory(outboundWire, wireService);
Method method = JavaIDLUtils.findMethod(operation, contract.getInterfaceClass().getMethods());
- return new CompositeReferenceTargetInvoker(method, wireFactory);
+ return new CompositeReferenceTargetInvoker(method, inboundWire, wireFactory, workContext);
+ }
+
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ Method method = JavaIDLUtils.findMethod(operation, contract.getCallbackClass().getMethods());
+ return new CompositeReferenceCallbackTargetInvoker(method, contract, inboundWire, wireService, workContext);
}
}
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java?view=auto&rev=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java Fri Sep 8 22:05:09 2006
@@ -0,0 +1,96 @@
+/**
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.tuscany.core.implementation.composite;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.core.wire.PojoTargetInvoker;
+import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.WireService;
+
+public class CompositeReferenceCallbackTargetInvoker extends PojoTargetInvoker {
+
+ private ServiceContract<?> contract;
+ private InboundWire inboundWire;
+ private WireService wireService;
+ private WorkContext workContext;
+
+
+ public CompositeReferenceCallbackTargetInvoker(Method operation,
+ ServiceContract contract,
+ InboundWire inboundWire,
+ WireService wireService,
+ WorkContext workContext) {
+ super(operation);
+ this.contract = contract;
+ this.inboundWire = inboundWire;
+ this.wireService = wireService;
+ this.workContext = workContext;
+ }
+
+ public CompositeReferenceCallbackTargetInvoker clone() throws CloneNotSupportedException {
+ CompositeReferenceCallbackTargetInvoker invoker = (CompositeReferenceCallbackTargetInvoker) super.clone();
+ invoker.contract = this.contract;
+ invoker.inboundWire = this.inboundWire;
+ invoker.wireService = this.wireService;
+ invoker.workContext = this.workContext;
+ return invoker;
+ }
+
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ try {
+ workContext.setCurrentMessageId(msg.getMessageId());
+ workContext.setCurrentCorrelationId(msg.getCorrelationId());
+ Object resp = invokeTarget(msg.getBody());
+ msg.setBody(resp);
+ } catch (InvocationTargetException e) {
+ msg.setBody(e.getCause());
+ } catch (Throwable e) {
+ msg.setBody(e);
+ }
+ return msg;
+ }
+
+ /*
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ try {
+ workContext.setCurrentMessageId(msg.getMessageId());
+ workContext.setCurrentCorrelationId(msg.getCorrelationId());
+ Object resp = invokeTarget(msg.getBody());
+ return (Message) resp;
+ } catch (InvocationTargetException e) {
+ // FIXME need to log exceptions
+ e.printStackTrace();
+ return null;
+ } catch (Throwable e) {
+ // FIXME need to log exceptions
+ e.printStackTrace();
+ return null;
+ }
+ }
+ */
+
+ protected Object getInstance() throws TargetException {
+ Object instance = wireService.createCallbackProxy(contract, inboundWire);
+ return instance;
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvoker.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java Fri Sep 8 22:05:09 2006
@@ -15,25 +15,54 @@
*/
package org.apache.tuscany.core.implementation.composite;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.tuscany.core.injection.WireObjectFactory;
import org.apache.tuscany.core.wire.PojoTargetInvoker;
import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
public class CompositeReferenceTargetInvoker extends PojoTargetInvoker {
+ private InboundWire wire;
private WireObjectFactory wireFactory;
+ private WorkContext workContext;
+
- public CompositeReferenceTargetInvoker(Method operation, WireObjectFactory wireFactory) {
+ public CompositeReferenceTargetInvoker(Method operation,
+ InboundWire wire,
+ WireObjectFactory wireFactory, WorkContext workContext) {
super(operation);
+ this.wire = wire;
this.wireFactory = wireFactory;
+ this.workContext = workContext;
}
public CompositeReferenceTargetInvoker clone() throws CloneNotSupportedException {
CompositeReferenceTargetInvoker invoker = (CompositeReferenceTargetInvoker) super.clone();
+ invoker.wire = this.wire;
invoker.wireFactory = this.wireFactory;
+ invoker.workContext = this.workContext;
return invoker;
+ }
+
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ try {
+ wire.addMapping(msg.getMessageId(), msg.getFromAddress());
+ workContext.setCurrentMessageId(msg.getMessageId());
+ workContext.setCurrentCorrelationId(msg.getCorrelationId());
+ Object resp = invokeTarget(msg.getBody());
+ msg.setBody(resp);
+ } catch (InvocationTargetException e) {
+ msg.setBody(e.getCause());
+ } catch (Throwable e) {
+ msg.setBody(e);
+ }
+ return msg;
}
protected Object getInstance() throws TargetException {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java Fri Sep 8 22:05:09 2006
@@ -18,17 +18,26 @@
import org.apache.tuscany.core.injection.WireObjectFactory;
import org.apache.tuscany.spi.CoreRuntimeException;
import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.extension.ServiceExtension;
+import org.apache.tuscany.spi.idl.java.JavaIDLUtils;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
public class CompositeService<T> extends ServiceExtension<T> {
+
+ private WorkContext workContext;
public CompositeService(String name,
Class<T> interfaze,
CompositeComponent parent,
- WireService wireService) throws CoreRuntimeException {
+ WireService wireService,
+ WorkContext workContext) throws CoreRuntimeException {
super(name, interfaze, parent, wireService);
+ this.workContext = workContext;
}
/**
@@ -38,9 +47,22 @@
* We just reuse CompositeReferenceTargetInvoker for now since it seems the target
* invoker we need does the same thing, if this is confirmed we should give it
* a common name
+ * FIXME !!! Notice that this method is not defined in the SPI !!!
*/
- public TargetInvoker createTargetInvoker(Method operation) {
+ public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
WireObjectFactory wireFactory = new WireObjectFactory(outboundWire, wireService);
- return new CompositeReferenceTargetInvoker(operation, wireFactory);
+ Method method = JavaIDLUtils.findMethod(operation, contract.getInterfaceClass().getMethods());
+ return new CompositeReferenceTargetInvoker(method, inboundWire, wireFactory, workContext);
+ }
+
+ /**
+ */
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ Method method = JavaIDLUtils.findMethod(operation, contract.getCallbackClass().getMethods());
+ return new CompositeReferenceCallbackTargetInvoker(method, contract, inboundWire, wireService, workContext);
+ }
+
+ public T getServiceInstance() throws TargetException {
+ return wireService.createProxy(outboundWire);
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/AsyncJavaTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/AsyncJavaTargetInvoker.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/AsyncJavaTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/AsyncJavaTargetInvoker.java Fri Sep 8 22:05:09 2006
@@ -90,7 +90,8 @@
workScheduler.scheduleWork(new Runnable() {
private Object currentMessageId = messageId;
public void run() {
- workContext.setCurrentMessageId(currentMessageId);
+ workContext.setCurrentMessageId(null);
+ workContext.setCurrentCorrelationId(currentMessageId);
CompositeContext oldContext = CurrentCompositeContext.getContext();
try {
BINDER.setContext(currentContext);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemReferenceImpl.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemReferenceImpl.java Fri Sep 8 22:05:09 2006
@@ -93,6 +93,10 @@
throw new UnsupportedOperationException();
}
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ throw new UnsupportedOperationException();
+ }
+
public TargetInvoker createAsyncTargetInvoker(OutboundWire wire, Operation operation) {
throw new UnsupportedOperationException();
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java Fri Sep 8 22:05:09 2006
@@ -22,9 +22,12 @@
import org.apache.tuscany.spi.component.AbstractSCAObject;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireInvocationHandler;
import org.apache.tuscany.core.implementation.system.wire.SystemInboundWire;
@@ -80,4 +83,8 @@
return inboundWire.getTargetService();
}
+
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ throw new UnsupportedOperationException();
+ }
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/AbstractOutboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/AbstractOutboundInvocationHandler.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/AbstractOutboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/AbstractOutboundInvocationHandler.java Fri Sep 8 22:05:09 2006
@@ -54,9 +54,13 @@
Message msg = new MessageImpl();
msg.setTargetInvoker(invoker);
msg.setFromAddress(getFromAddress());
- if (msg.getMessageId() == null) {
- msg.setMessageId(new MessageId());
+ Object messageId = getMessageId();
+ if (messageId == null) {
+ messageId = new MessageId();
}
+ msg.setMessageId(messageId);
+ Object corrId = getCorrelationId();
+ msg.setCorrelationId(corrId);
msg.setBody(args);
// dispatch the wire down the chain and get the response
if (chain.getTargetRequestChannel() != null) {
@@ -87,4 +91,8 @@
}
protected abstract Object getFromAddress();
+
+ protected abstract Object getMessageId();
+
+ protected abstract Object getCorrelationId();
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java Fri Sep 8 22:05:09 2006
@@ -45,6 +45,8 @@
private WorkContext context;
private InboundWire<?> inboundWire;
+ private Object messageId;
+ private Object correlationId;
public JDKCallbackInvocationHandler(WorkContext context, InboundWire inboundWire) {
this.context = context;
@@ -52,8 +54,10 @@
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- Object correlationId = context.getCurrentMessageId();
+ messageId = context.getCurrentMessageId();
context.setCurrentMessageId(null);
+ correlationId = context.getCurrentCorrelationId();
+ context.setCurrentCorrelationId(null);
Object targetAddress = inboundWire.retrieveMapping(correlationId);
if (targetAddress == null) {
throw new AssertionError("No from address associated with message id [" + correlationId + "]");
@@ -74,5 +78,13 @@
protected Object getFromAddress() {
return inboundWire.getContainerName();
+ }
+
+ protected Object getMessageId() {
+ return messageId;
+ }
+
+ protected Object getCorrelationId() {
+ return correlationId;
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java Fri Sep 8 22:05:09 2006
@@ -24,6 +24,7 @@
import java.util.Map;
import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.component.WorkContext;
import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.wire.OutboundInvocationChain;
@@ -50,9 +51,13 @@
* is not cacheable, the master associated with the wire chains will be used.
*/
private Map<Method, ChainHolder> chains;
+ private WorkContext context;
private Object fromAddress;
+ private Object messageId;
+ private Object correlationId;
- public JDKOutboundInvocationHandler(OutboundWire<?> wire) throws NoMethodForOperationException {
+ public JDKOutboundInvocationHandler(OutboundWire<?> wire, WorkContext context)
+ throws NoMethodForOperationException {
Map<Operation<?>, OutboundInvocationChain> invocationChains = wire.getInvocationChains();
this.chains = new HashMap<Method, ChainHolder>(invocationChains.size());
this.fromAddress = wire.getContainerName();
@@ -66,6 +71,8 @@
}
this.chains.put(method, new ChainHolder(entry.getValue()));
}
+
+ this.context = context;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
@@ -107,17 +114,31 @@
assert chain != null;
invoker = chain.getTargetInvoker();
}
+
+ messageId = context.getCurrentMessageId();
+ context.setCurrentMessageId(null);
+ correlationId = context.getCurrentCorrelationId();
+ context.setCurrentCorrelationId(null);
+
return invoke(chain, invoker, args);
}
public Object invoke(Method method, Object[] args) throws Throwable {
return invoke(null, method, args);
}
-
+
protected Object getFromAddress() {
return fromAddress;
}
+ protected Object getMessageId() {
+ return messageId;
+ }
+
+ protected Object getCorrelationId() {
+ return correlationId;
+ }
+
/**
* A holder used to associate an wire chain with a local copy of a target invoker that was previously cloned from
* the chain master
@@ -132,9 +153,5 @@
}
}
-
-// public int hashCode() {
-// return chains.hashCode();
-// }
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java Fri Sep 8 22:05:09 2006
@@ -56,6 +56,8 @@
import org.apache.tuscany.spi.wire.WireInvocationHandler;
import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.core.implementation.composite.CompositeReference;
+import org.apache.tuscany.core.implementation.composite.CompositeService;
import org.apache.tuscany.core.wire.InboundInvocationChainImpl;
import org.apache.tuscany.core.wire.InboundWireImpl;
import org.apache.tuscany.core.wire.InvokerInterceptor;
@@ -114,7 +116,7 @@
return (T) Proxy.newProxyInstance(cl, new Class[]{interfaze}, handler);
} else if (wire instanceof OutboundWire) {
OutboundWire<T> outbound = (OutboundWire<T>) wire;
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(outbound);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(outbound, context);
Class<?> interfaze = outbound.getServiceContract().getInterfaceClass();
ClassLoader cl = interfaze.getClassLoader();
return (T) Proxy.newProxyInstance(cl, new Class[]{interfaze}, handler);
@@ -142,7 +144,7 @@
return new JDKInboundInvocationHandler(chains);
} else if (wire instanceof OutboundWire) {
OutboundWire<T> outbound = (OutboundWire<T>) wire;
- return new JDKOutboundInvocationHandler(outbound);
+ return new JDKOutboundInvocationHandler(outbound, context);
} else {
ProxyCreationException e = new ProxyCreationException("Invalid wire type");
e.setIdentifier(wire.getClass().getName());
@@ -169,13 +171,26 @@
for (ServiceDefinition service : componentType.getServices().values()) {
InboundWire inboundWire = createWire(service);
inboundWire.setContainerName(component.getName());
+ if (componentType instanceof CompositeComponentType<?, ?, ?>) {
+ // If this is the case, then it means that component has already been returned
+ // by CompositeBuilder and thus its children, in particular composite services,
+ // have been registered
+ CompositeComponent compositeComponent = (CompositeComponent) component;
+ Service<?> serviceChild = (Service) compositeComponent.getChild(service.getName());
+ assert serviceChild != null;
+ if (serviceChild instanceof CompositeService) {
+ serviceChild.setInboundWire(inboundWire);
+ // Notice that now the more immediate container of the wire is the composite service
+ inboundWire.setContainerName(serviceChild.getName());
+ }
+ }
component.addInboundWire(inboundWire);
}
- for (ReferenceTarget reference : definition.getReferenceTargets().values()) {
+ for (ReferenceTarget referenceTarget : definition.getReferenceTargets().values()) {
Map<String, ? extends ReferenceDefinition> references = componentType.getReferences();
- ReferenceDefinition mappedReference = references.get(reference.getReferenceName());
- OutboundWire wire = createWire(reference, mappedReference);
+ ReferenceDefinition mappedReference = references.get(referenceTarget.getReferenceName());
+ OutboundWire wire = createWire(referenceTarget, mappedReference);
wire.setContainerName(component.getName());
component.addOutboundWire(wire);
if (componentType instanceof CompositeComponentType<?, ?, ?>) {
@@ -183,9 +198,13 @@
// by CompositeBuilder and thus its children, in particular composite references,
// have been registered
CompositeComponent compositeComponent = (CompositeComponent) component;
- Reference<?> bindlessReference = (Reference) compositeComponent.getChild(reference.getReferenceName());
- assert bindlessReference != null;
- bindlessReference.setOutboundWire(wire);
+ Reference<?> reference = (Reference) compositeComponent.getChild(referenceTarget.getReferenceName());
+ assert reference != null;
+ if (reference instanceof CompositeReference) {
+ reference.setOutboundWire(wire);
+ // Notice that now the more immediate container of the wire is the composite reference
+ wire.setContainerName(reference.getName());
+ }
}
}
}
@@ -199,6 +218,12 @@
chain.addInterceptor(new InvokerInterceptor());
wire.addInvocationChain(operation, chain);
}
+ // Notice that we skip wire.setCallbackReferenceName
+ // First, an inbound wire's callbackReferenceName is only retrieved by JavaAtomicComponent
+ // to create a callback injector based on the callback reference member; a composite reference
+ // should not need to do that
+ // Second, a reference definition does not have a callback reference name like a service
+ // definition does
reference.setInboundWire(wire);
}
@@ -275,7 +300,25 @@
OutboundInvocationChain outboundChain = createOutboundChain(operation);
outboundWire.addInvocationChain(operation, outboundChain);
}
- service.setInboundWire(inboundWire);
+
+ // Add target callback chain to outbound wire, applicable to both bound and bindless services
+ Class<T> callbackInterface = (Class<T>) contract.getCallbackClass();
+ if (callbackInterface != null) {
+ outboundWire.setCallbackInterface(callbackInterface);
+ for (Operation<?> operation : contract.getCallbackOperations().values()) {
+ InboundInvocationChain callbackTargetChain = createInboundChain(operation);
+// TODO handle policy
+//TODO statement below could be cleaner
+ callbackTargetChain.addInterceptor(new InvokerInterceptor());
+ outboundWire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
+ }
+ }
+
+ // Not clear in any case why this is done here and at the parent composite level as well
+ // But for a composite service, make sure that the inbound wire comes from the parent
+ if (!(service instanceof CompositeService)) {
+ service.setInboundWire(inboundWire);
+ }
service.setOutboundWire(outboundWire);
}
@@ -314,22 +357,20 @@
}
/**
- * The following algorithm is defined the SCA spec:
- * <ol>
+ * Compares two operations for wiring compatibility as defined by the SCA assembly specification, namely: <ol>
* <li>compatibility for the individual method is defined as compatibility of the signature, that is method name,
- * input types, and output types MUST BE the same.
- * <li>the order of the input and output types also MUST BE the same.
- * <li>the set of Faults and Exceptions expected by the source MUST BE the same or be a superset of those specified
- * by the service.
- * </ol>
- *
- * @param operation
- * @return
+ * input types, and output types MUST BE the same. <li>the order of the input and output types also MUST BE the
+ * same. <li>the set of Faults and Exceptions expected by the source MUST BE the same or be a superset of those
+ * specified by the service. </ol>
+ *
+ * @param source the source operation to compare
+ * @param target the target operation to compare
+ * @return true if the two operations are compatibile
*/
public boolean isCompatibleWith(Operation<?> source, Operation<?> target) {
// FIXME:
return source.equals(target);
}
-
+
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/composite.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/composite.scdl?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/composite.scdl (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/composite.scdl Fri Sep 8 22:05:09 2006
@@ -30,6 +30,9 @@
<component name="composite.loader">
<system:implementation.system class="org.apache.tuscany.core.implementation.composite.CompositeLoader"/>
</component>
+ <component name="composite.implementationLoader">
+ <system:implementation.system class="org.apache.tuscany.core.implementation.composite.ImplementationCompositeLoader"/>
+ </component>
<component name="composite.dependencyLoader">
<system:implementation.system class="org.apache.tuscany.core.implementation.composite.DependencyLoader"/>
</component>
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java Fri Sep 8 22:05:09 2006
@@ -19,6 +19,8 @@
package org.apache.tuscany.core.implementation.composite;
import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.tuscany.spi.component.AtomicComponent;
import org.apache.tuscany.spi.component.CompositeComponent;
@@ -44,19 +46,19 @@
import junit.framework.TestCase;
import org.apache.tuscany.core.builder.BuilderRegistryImpl;
+import org.apache.tuscany.core.builder.ConnectorImpl;
import org.apache.tuscany.core.deployer.RootDeploymentContext;
import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.core.implementation.java.JavaComponentBuilder;
import org.apache.tuscany.core.implementation.java.JavaImplementation;
+import org.apache.tuscany.core.implementation.java.mock.components.OtherTarget;
import org.apache.tuscany.core.implementation.java.mock.components.Source;
import org.apache.tuscany.core.implementation.java.mock.components.SourceImpl;
import org.apache.tuscany.core.implementation.java.mock.components.Target;
import org.apache.tuscany.core.implementation.java.mock.components.TargetImpl;
import org.apache.tuscany.core.wire.jdk.JDKWireService;
import org.easymock.EasyMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
+import org.easymock.IAnswer;
/**
* @version $$Rev$$ $$Date$$
@@ -71,7 +73,7 @@
}
@SuppressWarnings("unchecked")
- public void testBuild() throws Exception {
+ public void testBuildConnect() throws Exception {
CompositeComponent parent = new CompositeComponentImpl(null, null, null, null, null);
CompositeBuilder builder = new CompositeBuilder();
@@ -79,7 +81,9 @@
builder.setWireService(wireService);
BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl();
builderRegistry.setWireService(wireService);
- builderRegistry.register(JavaImplementation.class, new JavaComponentBuilder());
+ JavaComponentBuilder jBuilder = new JavaComponentBuilder();
+ jBuilder.setWireService(wireService);
+ builderRegistry.register(JavaImplementation.class, jBuilder);
builderRegistry.register(CompositeImplementation.class, builder);
CompositeBindlessBuilder bindlessBuilder = new CompositeBindlessBuilder();
bindlessBuilder.setWireService(wireService);
@@ -87,11 +91,18 @@
builder.setBuilderRegistry(builderRegistry);
CompositeComponent component =
(CompositeComponent) builder.build(parent, createTopComponentDef(), deploymentContext);
+
+ ConnectorImpl connector = new ConnectorImpl();
+ connector.connect(component);
+
deploymentContext.getModuleScope().start();
component.start();
CompositeComponent sourceComponent = (CompositeComponent) component.getChild("SourceComponent");
Source source = (Source) sourceComponent.getServiceInstance("InnerSourceService");
assertNotNull(source);
+ AtomicComponent innerSourceComponent = (AtomicComponent) sourceComponent.getChild("InnerSourceComponent");
+ Source innerSourceInstance = (Source) deploymentContext.getModuleScope().getInstance(innerSourceComponent);
+ assertNotNull(innerSourceInstance);
component.stop();
}
@@ -114,7 +125,7 @@
new CompositeComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>>();
innerType.add(createInnerSourceComponentDef());
ReferenceDefinition reference = new ReferenceDefinition();
- reference.setName("targetComponentRef");
+ reference.setName("TargetComponentRef");
JavaInterfaceProcessorRegistry registry = new JavaInterfaceProcessorRegistryImpl();
JavaServiceContract targetContract = registry.introspect(Target.class);
reference.setServiceContract(targetContract);
@@ -132,7 +143,7 @@
ComponentDefinition<CompositeImplementation> sourceComponentDefinition =
new ComponentDefinition<CompositeImplementation>("SourceComponent", innerImpl);
ReferenceTarget refTarget = new ReferenceTarget();
- refTarget.setReferenceName("targetComponentRef");
+ refTarget.setReferenceName("TargetComponentRef");
refTarget.addTarget(new URI("TargetComponent"));
sourceComponentDefinition.add(refTarget);
@@ -148,6 +159,8 @@
reference.setName("targetReference");
JavaInterfaceProcessorRegistry registry = new JavaInterfaceProcessorRegistryImpl();
ServiceContract<?> targetContract = registry.introspect(Target.class);
+ targetContract.setCallbackClass(OtherTarget.class);
+ targetContract.setCallbackName("OtherTarget");
reference.setServiceContract(targetContract);
reference.setMember(SourceImpl.class.getMethod("setTarget", Target.class));
sourceType.add(reference);
@@ -181,10 +194,13 @@
JavaInterfaceProcessorRegistry registry = new JavaInterfaceProcessorRegistryImpl();
ServiceContract<?> targetContract = registry.introspect(Target.class);
+ targetContract.setCallbackClass(OtherTarget.class);
+ targetContract.setCallbackName("OtherTarget");
JavaMappedService serviceDefinition = new JavaMappedService();
serviceDefinition.setName("Target");
serviceDefinition.setServiceContract(targetContract);
+ serviceDefinition.setCallbackReferenceName("otherTarget");
targetType.add(serviceDefinition);
targetType.setConstructorDefinition(new ConstructorDefinition<TargetImpl>(TargetImpl.class.getConstructor()));
@@ -197,9 +213,22 @@
private ScopeContainer createMock() {
ScopeContainer container = EasyMock.createMock(ScopeContainer.class);
container.start();
- container.register(isA(AtomicComponent.class));
- expectLastCall().atLeastOnce();
- expect(container.getScope()).andReturn(Scope.MODULE).atLeastOnce();
+ container.register(EasyMock.isA(AtomicComponent.class));
+ EasyMock.expectLastCall().anyTimes();
+ EasyMock.expect(container.getScope()).andReturn(Scope.MODULE).anyTimes();
+ EasyMock.expect(container.getInstance(EasyMock.isA(AtomicComponent.class))).andAnswer(new IAnswer() {
+ private Map<AtomicComponent, Object> cache = new HashMap<AtomicComponent, Object>();
+
+ public Object answer() throws Throwable {
+ AtomicComponent component = (AtomicComponent) EasyMock.getCurrentArguments()[0];
+ Object instance = cache.get(component);
+ if (instance == null) {
+ instance = component.createInstance();
+ cache.put(component, instance);
+ }
+ return instance;
+ }
+ });
EasyMock.replay(container);
return container;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java Fri Sep 8 22:05:09 2006
@@ -68,7 +68,7 @@
*/
public class OutboundWireToJavaTestCase extends TestCase {
private WorkContext workContext = new WorkContextImpl();
- private WireService wireService = new JDKWireService();
+ private WireService wireService = new JDKWireService(new WorkContextImpl(), null);
public void testToStatelessScope() throws Exception {
StatelessScopeContainer scope = new StatelessScopeContainer(workContext);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java Fri Sep 8 22:05:09 2006
@@ -43,6 +43,7 @@
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.core.implementation.PojoConfiguration;
import org.apache.tuscany.core.implementation.java.JavaAtomicComponent;
@@ -65,7 +66,7 @@
*/
public final class MockFactory {
- private static final WireService WIRE_SERVICE = new JDKWireService();
+ private static final WireService WIRE_SERVICE = new JDKWireService(new WorkContextImpl(), null);
private static final JavaInterfaceProcessorRegistry REGISTRY = new JavaInterfaceProcessorRegistryImpl();
private MockFactory() {
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/BasicReferenceInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/BasicReferenceInvocationHandlerTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/BasicReferenceInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/BasicReferenceInvocationHandlerTestCase.java Fri Sep 8 22:05:09 2006
@@ -26,6 +26,7 @@
import org.apache.tuscany.spi.wire.OutboundInvocationChain;
import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.core.mock.component.SimpleTarget;
import org.apache.tuscany.core.mock.component.SimpleTargetImpl;
@@ -61,7 +62,7 @@
OutboundWire wire = new OutboundWireImpl();
wire.addInvocationChain(operation, chain);
wire.setServiceContract(contract);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
assertEquals("foo", handler.invoke(null, echo, new String[]{"foo"}));
assertEquals(1, interceptor.getCount());
assertEquals(1, requestHandler.getCount());
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationErrorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationErrorTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationErrorTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationErrorTestCase.java Fri Sep 8 22:05:09 2006
@@ -28,6 +28,8 @@
import org.apache.tuscany.spi.wire.OutboundWire;
import junit.framework.TestCase;
+
+import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.core.mock.wire.MockHandler;
import org.apache.tuscany.core.mock.wire.MockStaticInvoker;
@@ -67,7 +69,7 @@
wire.setServiceContract(contract);
Operation operation = contract.getOperations().get("checkedException");
wire.addInvocationChain(operation, createChain(checkedMethod, operation));
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
try {
TestBean proxy = (TestBean) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
new Class[]{TestBean.class}, handler);
@@ -85,7 +87,7 @@
Operation operation = contract.getOperations().get("runtimeException");
OutboundInvocationChain chain = createChain(runtimeMethod, operation);
wire.addInvocationChain(operation, chain);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
try {
TestBean proxy = (TestBean) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
new Class[]{TestBean.class}, handler);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationHandlerTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/OutboundInvocationHandlerTestCase.java Fri Sep 8 22:05:09 2006
@@ -35,6 +35,7 @@
import org.apache.tuscany.core.mock.wire.MockStaticInvoker;
import org.apache.tuscany.core.mock.wire.MockSyncInterceptor;
import org.apache.tuscany.core.wire.jdk.JDKOutboundInvocationHandler;
+import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
public class OutboundInvocationHandlerTestCase extends TestCase {
@@ -62,7 +63,7 @@
Operation operation = contract.getOperations().get("hello");
wire.addInvocationChain(operation, createChain(operation));
wire.setServiceContract(contract);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
assertEquals("foo", handler.invoke(hello, new Object[]{"foo"}));
}
@@ -71,7 +72,7 @@
Operation operation = contract.getOperations().get("hello");
wire.addInvocationChain(operation, createChain(operation));
wire.setServiceContract(contract);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
try {
handler.invoke(hello, new Object[]{});
fail("Expected " + IllegalArgumentException.class.getName());
@@ -89,7 +90,7 @@
OutboundWire wire = new OutboundWireImpl();
wire.setServiceContract(contract);
wire.addInvocationChain(operation, source);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
try {
assertEquals("foo", handler.invoke(hello, new Object[]{}));
fail("Expected " + IllegalArgumentException.class.getName());
@@ -107,7 +108,7 @@
OutboundWire wire = new OutboundWireImpl();
wire.setServiceContract(contract);
wire.addInvocationChain(operation, source);
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
assertEquals("foo", handler.invoke(hello, new Object[]{"foo"}));
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDOutboundInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDOutboundInvocationHandlerTestCase.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDOutboundInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDOutboundInvocationHandlerTestCase.java Fri Sep 8 22:05:09 2006
@@ -5,6 +5,8 @@
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
import junit.framework.TestCase;
+
+import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.wire.OutboundWireImpl;
/**
@@ -15,7 +17,7 @@
public void testToString() {
OutboundWireImpl wire = new OutboundWireImpl();
wire.setServiceContract(new JavaServiceContract(Foo.class));
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
Foo foo = (Foo) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Foo.class}, handler);
assertNotNull(foo.toString());
}
@@ -23,7 +25,7 @@
public void testHashCode() {
OutboundWireImpl wire = new OutboundWireImpl();
wire.setServiceContract(new JavaServiceContract(Foo.class));
- JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire);
+ JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(wire, new WorkContextImpl());
Foo foo = (Foo) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Foo.class}, handler);
assertNotNull(foo.hashCode());
}
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Reference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Reference.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Reference.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Reference.java Fri Sep 8 22:05:09 2006
@@ -74,6 +74,11 @@
TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation);
/**
+ * Creates a target invoker for callbacks
+ */
+ TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation);
+
+ /**
* Callback to create a {@link org.apache.tuscany.spi.wire.TargetInvoker} which issues a non-blocking dispatch
*
* @param wire the outbound wire of the invocation source, used for callbacks
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Service.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Service.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Service.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Service.java Fri Sep 8 22:05:09 2006
@@ -18,8 +18,11 @@
*/
package org.apache.tuscany.spi.component;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireInvocationHandler;
/**
@@ -49,5 +52,5 @@
void setOutboundWire(OutboundWire<T> wire);
-
+ TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation);
}
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java Fri Sep 8 22:05:09 2006
@@ -29,6 +29,10 @@
void setCurrentMessageId(Object messageId);
+ Object getCurrentCorrelationId();
+
+ void setCurrentCorrelationId(Object correlationId);
+
/**
* Returns the composite where a remote request came in
*/
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceExtension.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceExtension.java Fri Sep 8 22:05:09 2006
@@ -24,6 +24,7 @@
import org.apache.tuscany.spi.component.TargetException;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
@@ -81,6 +82,10 @@
public WireInvocationHandler getHandler() throws TargetException {
return wireService.createHandler(inboundWire);
+ }
+
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ throw new UnsupportedOperationException();
}
public TargetInvoker createAsyncTargetInvoker(OutboundWire wire, Operation operation) {
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ServiceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ServiceExtension.java?view=diff&rev=441743&r1=441742&r2=441743
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ServiceExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/ServiceExtension.java Fri Sep 8 22:05:09 2006
@@ -23,9 +23,12 @@
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.Service;
import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireInvocationHandler;
import org.apache.tuscany.spi.wire.WireService;
@@ -68,6 +71,10 @@
this.outboundWire = outboundWire;
}
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
+ throw new UnsupportedOperationException();
+ }
+
public T getServiceInstance() throws TargetException {
return wireService.createProxy(inboundWire);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org