Author: jmarino
Date: Tue Feb 28 14:50:42 2006
New Revision: 381805
URL: http://svn.apache.org/viewcvs?rev=381805&view=rev
Log:
Fix wire building where source and target chains only contain two
InvokerInterceptors
Modified:
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/integration/binding/EntryPointToJavaTestCase.java
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockModuleFactory.java
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingBuilder.java
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingWireBuilder.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/DefaultWireBuilder.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/EntryPointRuntimeConfiguration.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/EntryPointContext.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
Modified:
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/integration/binding/EntryPointToJavaTestCase.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/integration/binding/EntryPointToJavaTestCase.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/integration/binding/EntryPointToJavaTestCase.java
(original)
+++
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/integration/binding/EntryPointToJavaTestCase.java
Tue Feb 28 14:50:42 2006
@@ -75,10 +75,6 @@
javaBuilder.setProxyFactoryFactory(proxyFactoryFactory);
MockSyncInterceptor mockInterceptor = new MockSyncInterceptor();
-// MockInterceptorBuilder interceptorBuilder = new
MockInterceptorBuilder(mockInterceptor, true);
-// HierarchicalBuilder refBuilder = new HierarchicalBuilder();
-// refBuilder.addBuilder(interceptorBuilder);
-// javaBuilder.setPolicyBuilder(refBuilder);
builders.add(javaBuilder);
FooBindingBuilder fooBindingBuilder = new FooBindingBuilder();
Modified:
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockModuleFactory.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockModuleFactory.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockModuleFactory.java
(original)
+++
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockModuleFactory.java
Tue Feb 28 14:50:42 2006
@@ -108,7 +108,7 @@
JavaServiceContract targetContract =
factory.createJavaServiceContract();
targetContract.setInterface(HelloWorldService.class);
targetService.setServiceContract(targetContract);
- targetService.setName("HelloWorld");
+ targetService.setName("HelloWorldService");
ConfiguredService cTargetService = factory.createConfiguredService();
cTargetService.setService(targetService);
targetComponent.getConfiguredServices().add(cTargetService);
Modified:
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingBuilder.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingBuilder.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingBuilder.java
(original)
+++
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingBuilder.java
Tue Feb 28 14:50:42 2006
@@ -112,8 +112,6 @@
if (ep.getBindings().size() < 1 || !(ep.getBindings().get(0)
instanceof FooBinding)) {
return;
}
-
- // TODO create entry point context
EntryPointRuntimeConfiguration config = new
FooEntryPointRuntimeConfiguration(ep.getName(), ep.getConfiguredService()
.getService().getName(), messageFactory);
Modified:
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingWireBuilder.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingWireBuilder.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingWireBuilder.java
(original)
+++
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/binding/foo/FooBindingWireBuilder.java
Tue Feb 28 14:50:42 2006
@@ -14,22 +14,14 @@
public void connect(ProxyFactory sourceFactory, ProxyFactory
targetFactory, Class targetType, boolean downScope,
ScopeContext targetScopeContext) throws BuilderConfigException {
- if
(!(FooExternalServiceRuntimeConfiguration.class.isAssignableFrom(targetType) ||
FooEntryPointRuntimeConfiguration.class
- .isAssignableFrom(targetType))) {
+ if
(!FooExternalServiceRuntimeConfiguration.class.isAssignableFrom(targetType)) {
return;
}
for (InvocationConfiguration sourceInvocationConfig :
sourceFactory.getProxyConfiguration().getInvocationConfigurations()
.values()) {
- if
(FooExternalServiceRuntimeConfiguration.class.isAssignableFrom(targetType)) {
- FooESTargetInvoker invoker = new
FooESTargetInvoker(sourceFactory.getProxyConfiguration().getTargetName()
- .getPartName(), targetScopeContext);
- sourceInvocationConfig.setTargetInvoker(invoker);
- } else {
-// FooEPTargetInvoker invoker = new
FooEPTargetInvoker(sourceFactory.getProxyConfiguration().getTargetName()
-// .getPartName(), sourceInvocationConfig.getMethod(),
targetScopeContext);
-// sourceInvocationConfig.setTargetInvoker(invoker);
-
- }
+ FooESTargetInvoker invoker = new
FooESTargetInvoker(sourceFactory.getProxyConfiguration().getTargetName()
+ .getPartName(), targetScopeContext);
+ sourceInvocationConfig.setTargetInvoker(invoker);
// if (downScope) {
// // the source scope is shorter than the target, so the invoker
can cache the target instance
// invoker.setCacheable(true);
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/DefaultWireBuilder.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/DefaultWireBuilder.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/DefaultWireBuilder.java
(original)
+++
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/DefaultWireBuilder.java
Tue Feb 28 14:50:42 2006
@@ -24,6 +24,7 @@
import org.apache.tuscany.core.context.QualifiedName;
import org.apache.tuscany.core.context.ScopeContext;
import org.apache.tuscany.core.invocation.InvocationConfiguration;
+import org.apache.tuscany.core.invocation.impl.InvokerInterceptor;
import org.apache.tuscany.core.invocation.impl.MessageChannelImpl;
import org.apache.tuscany.core.invocation.spi.ProxyFactory;
@@ -38,7 +39,6 @@
// collection configured wire builders
private List<WireBuilder> builders = new ArrayList();
-
public DefaultWireBuilder() {
}
@@ -52,14 +52,15 @@
public void setWireBuilders(List<WireBuilder> builders) {
builders.addAll(builders);
}
-
+
public void connect(ProxyFactory sourceFactory, ProxyFactory
targetFactory, Class targetType, boolean downScope,
ScopeContext targetScopeContext) {
QualifiedName targetName =
sourceFactory.getProxyConfiguration().getTargetName();
// get the proxy chain for the target
if (targetFactory != null) {
// if null, the target side has no interceptors or handlers
- Map<Method, InvocationConfiguration> targetInvocationConfigs =
targetFactory.getProxyConfiguration().getInvocationConfigurations();
+ Map<Method, InvocationConfiguration> targetInvocationConfigs =
targetFactory.getProxyConfiguration()
+ .getInvocationConfigurations();
for (InvocationConfiguration sourceInvocationConfig :
sourceFactory.getProxyConfiguration()
.getInvocationConfigurations().values()) {
// match invocation chains
@@ -77,7 +78,11 @@
e.setIdentifier(targetInvocationConfig.getMethod().getName());
throw e;
}
-
sourceInvocationConfig.addTargetInterceptor(targetInvocationConfig.getTargetInterceptor());
+ if (!(sourceInvocationConfig.getLastTargetInterceptor()
instanceof InvokerInterceptor && targetInvocationConfig
+ .getTargetInterceptor() instanceof
InvokerInterceptor)) {
+ // check that we do not have the case where the only
interceptors are invokers since we just need one
+
sourceInvocationConfig.addTargetInterceptor(targetInvocationConfig.getTargetInterceptor());
+ }
}
}
}
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/EntryPointRuntimeConfiguration.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/EntryPointRuntimeConfiguration.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/EntryPointRuntimeConfiguration.java
(original)
+++
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/EntryPointRuntimeConfiguration.java
Tue Feb 28 14:50:42 2006
@@ -36,22 +36,22 @@
private ProxyFactory proxyFactory;
- private String epServiceName;
-
- private MessageFactory msgFactory;
+ private String referenceName;
- private Map<String,ProxyFactory> sourceProxyFactories;
+ private MessageFactory msgFactory;
- public EntryPointRuntimeConfiguration(String name, String serviceName,
MessageFactory msgFactory) {
+ private Map<String, ProxyFactory> sourceProxyFactories;
+
+ public EntryPointRuntimeConfiguration(String name, String referenceName,
MessageFactory msgFactory) {
assert (name != null) : "Entry point name was null";
assert (msgFactory != null) : "Message factory was null";
this.name = name;
- this.epServiceName = serviceName;
+ this.referenceName = referenceName;
this.msgFactory = msgFactory;
}
public EntryPointContext createInstanceContext() throws
ContextCreationException {
- return new EntryPointContextImpl(name,proxyFactory,msgFactory);
+ return new EntryPointContextImpl(name, proxyFactory, msgFactory);
}
public Scope getScope() {
@@ -66,36 +66,38 @@
}
public void addTargetProxyFactory(String serviceName, ProxyFactory
factory) {
- // no wires to an entry point from with an aggregate
+ // no wires to an entry point from with an aggregate
}
public ProxyFactory getTargetProxyFactory(String serviceName) {
+ // no wires to an entry point from with an aggregate
return null;
}
- public Map<String,ProxyFactory> getTargetProxyFactories() {
+ public Map<String, ProxyFactory> getTargetProxyFactories() {
+ // no wires to an entry point from with an aggregate
return Collections.EMPTY_MAP;
}
- public void addSourceProxyFactory(String referenceName, ProxyFactory
factory) {
- assert (referenceName != null) : "No reference name specified";
+ public void addSourceProxyFactory(String refName, ProxyFactory factory) {
+ assert (refName != null) : "No reference name specified";
assert (factory != null) : "Proxy factory was null";
- this.epServiceName = referenceName; // entry points are configured
with only one reference
+ this.referenceName = refName; // entry points are configured with only
one reference
this.proxyFactory = factory;
}
- public ProxyFactory getSourceProxyFactory(String referenceName) {
- if (this.epServiceName.equals(referenceName)) {
+ public ProxyFactory getSourceProxyFactory(String refName) {
+ if (this.referenceName.equals(refName)) {
return proxyFactory;
} else {
return null;
}
}
- public Map<String,ProxyFactory> getSourceProxyFactories() {
+ public Map<String, ProxyFactory> getSourceProxyFactories() {
if (sourceProxyFactories == null) {
sourceProxyFactories = new HashMap(1);
- sourceProxyFactories.put(epServiceName, proxyFactory);
+ sourceProxyFactories.put(referenceName, proxyFactory);
}
return sourceProxyFactories;
}
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/EntryPointContext.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/EntryPointContext.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/EntryPointContext.java
(original)
+++
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/EntryPointContext.java
Tue Feb 28 14:50:42 2006
@@ -17,11 +17,30 @@
package org.apache.tuscany.core.context;
/**
- * Manages an entry point
+ * The runtime artifact representing an entry point,
<code>EntryPointContext</code> manages invocation handler
+ * instances that expose service operations offered by a component in the
parent aggregate. The invocation handler
+ * instance is responsible for dispatching the request down an invocation
chain to the target instance. The invocation
+ * chain may contain [EMAIL PROTECTED]
org.apache.tuscany.core.invocation.Interceptor}s and
+ * [EMAIL PROTECTED] org.apache.tuscany.core.invocation.MessageHandler}s that
implement policies or perform mediations on the
+ * invocation.
+ * <p>
+ * Entry point contexts are used by transport binding artifacts to invoke an
operation on a service. The transport
+ * binding uses an [EMAIL PROTECTED] java.lang.reflect.InvocationHandler}
instance obtained from the <code>EntryPointContext</code>
+ * to perform the invocation as in:
+ *
+ * <pre>
+ * AggregateContext aggregateContext = ...
+ * EntryPointContext ctx = (EntryPointContext)
aggregateContext.getContext("source");
+ * Assert.assertNotNull(ctx);
+ * InvocationHandler handler = (InvocationHandler)
ctx.getInstance(null);
+ * Object response = handler.invoke(null, operation, new Object[]
{ param });
+ * </pre>
+ *
+ * The <code>Proxy</code> instance passed to <code>InvocationHandler</code>
may be null as the client is invoking
+ * directly on the handler.
*
* @version $Rev$ $Date$
*/
public interface EntryPointContext extends InstanceContext {
}
-
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java?rev=381805&r1=381804&r2=381805&view=diff
==============================================================================
---
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
(original)
+++
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
Tue Feb 28 14:50:42 2006
@@ -203,6 +203,11 @@
public Interceptor getTargetInterceptor() {
return targetInterceptorChainHead;
}
+
+
+ public Interceptor getLastTargetInterceptor() {
+ return targetInterceptorChainTail;
+ }
/**
* Sets the target invoker to pass down the invocation pipeline. When a
service proxy represents a wire,