You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/07/17 09:54:49 UTC
svn commit: r556840 - in /incubator/tuscany/java/sca:
itest/contribution-import-export/contrib-composite/src/test/java/hello/
modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/
modules/assembly/src/main/java/org/apache/tuscany/sca/...
Author: rfeng
Date: Tue Jul 17 00:54:40 2007
New Revision: 556840
URL: http://svn.apache.org/viewvc?view=rev&rev=556840
Log:
Apply the patch from Simon Nash for TUSCANY-1441. Thank you, Simon.
Added:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java (with props)
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java (with props)
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java (with props)
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java (with props)
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java (with props)
Modified:
incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java
Modified: incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java Tue Jul 17 00:54:40 2007
@@ -62,6 +62,8 @@
//activate SCA Domain
domain.getDomainCompositeHelper().activateDomain();
+ //Start Components from my composite
+ domain.getDomainCompositeHelper().startComponent(domain.getDomainCompositeHelper().getComponent("HelloServiceComponent"));
}
public void testHello() throws IOException {
Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+
+/**
+ * A processor to read the XML that describes the SCA binding.
+ */
+
+public class SCABindingProcessor extends BaseArtifactProcessor implements StAXArtifactProcessor<SCABinding>{
+
+ private SCABindingFactory scaBindingFactory;
+
+ public SCABindingProcessor(AssemblyFactory assemblyFactory,
+ PolicyFactory policyFactory,
+ SCABindingFactory scaBindingFactory) {
+ super(assemblyFactory, policyFactory, null);
+ this.scaBindingFactory = scaBindingFactory;
+ }
+
+ public QName getArtifactType() {
+ return BINDING_SCA_QNAME;
+ }
+
+ public Class<SCABinding> getModelType() {
+ return SCABinding.class;
+ }
+
+ public SCABinding read(XMLStreamReader reader) throws ContributionReadException {
+ try {
+ SCABinding scaBinding = scaBindingFactory.createSCABinding();
+
+ // Read policies
+ readPolicies(scaBinding, reader);
+
+ // Read binding URI
+ String uri = reader.getAttributeValue(null, URI);
+ if (uri != null && uri.length() > 0) {
+ scaBinding.setURI(uri);
+ }
+
+ // Skip to end element
+ while (reader.hasNext()) {
+ if (reader.next() == END_ELEMENT && BINDING_SCA_QNAME.equals(reader.getName())) {
+ break;
+ }
+ }
+ return scaBinding;
+
+ } catch (XMLStreamException e) {
+ throw new ContributionReadException(e);
+ }
+ }
+
+ public void resolve(SCABinding model, ModelResolver resolver) throws ContributionResolveException {
+ }
+
+ public void write(SCABinding scaBinding, XMLStreamWriter writer) throws ContributionWriteException {
+ try {
+ // Write a <binding.sca>
+ writer.writeStartElement(SCA10_NS, BINDING_SCA);
+
+ // Write binding URI
+ if (scaBinding.getURI() != null) {
+ writer.writeAttribute(URI, scaBinding.getURI());
+ }
+
+ writer.writeEndElement();
+
+ } catch (XMLStreamException e) {
+ throw new ContributionWriteException(e);
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java (added)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.assembly;
+
+/**
+ * Enables a binding to indicate whether or not it has an endpoint.
+ * If the uri attribute is specified, the binding has an endpoint.
+ * In other cases, an endpoint may be specified in a binding-specific way.
+ * This information is needed to make wiring decisions.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface BindingEndpoint {
+
+ /**
+ * Indicate whether or not the binding has an endpoint.
+ *
+ * @return true if the binding has an endpoint, false otherwise
+ */
+ boolean hasEndpoint();
+
+}
Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java Tue Jul 17 00:54:40 2007
@@ -27,6 +27,7 @@
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.BindingEndpoint;
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.ComponentProperty;
import org.apache.tuscany.sca.assembly.ComponentReference;
@@ -663,7 +664,6 @@
scaBinding.setName(componentService.getName());
componentService.getBindings().add(scaBinding);
}
- scaBinding.setURI(uri);
scaBinding.setComponent(component);
// if service has a callback, create and configure an SCA binding for the callback
@@ -678,7 +678,6 @@
}
componentService.getCallback().getBindings().add(scaCallbackBinding);
}
- scaCallbackBinding.setURI(uri);
scaCallbackBinding.setComponent(component);
}
}
@@ -694,7 +693,6 @@
scaBinding.setName(componentReference.getName());
componentReference.getBindings().add(scaBinding);
}
- scaBinding.setURI(uri);
scaBinding.setComponent(component);
// if reference has a callback, create and configure an SCA binding for the callback
@@ -709,7 +707,6 @@
}
componentReference.getCallback().getBindings().add(scaCallbackBinding);
}
- scaCallbackBinding.setURI(uri);
scaCallbackBinding.setComponent(component);
}
}
@@ -1195,12 +1192,15 @@
protected void wireCompositeReferences(Composite composite) {
// Process nested composites recursively
+ // [rfeng] I comment out the following loop as there's no need to do the recursive wiring.
+ /*
for (Component component : composite.getComponents()) {
Implementation implementation = component.getImplementation();
if (implementation instanceof Composite) {
wireCompositeReferences((Composite)implementation);
}
}
+ */
// Process composite references declared in this composite
for (Reference reference : composite.getReferences()) {
@@ -1529,6 +1529,35 @@
*/
private void warning(String message, Object model) {
monitor.problem(new ProblemImpl(Severity.WARNING, message, model));
+ }
+
+ /**
+ * This method encapsulates the logic needed to determine whether a binding
+ * is configured with an endpoint. In most cases, this is determined by
+ * whether the binding's uri attribute was specified. However, some bindings
+ * provide a binding-specific way of setting the target URI, so it's not
+ * sufficient to simply call getURI() on the binding. The hasEndpoint()
+ * method of the BindingEndpoint interface allows the binding to provide
+ * a definite answer.
+ *
+ * @param binding
+ * @return true if the binding has an endpoint, false otherwise
+ */
+ public static boolean bindingHasEndpoint(Binding binding) {
+ // for now, determine this based on knowledge of the various binding types
+ // all bindings should be changed to extend BindingEndpoint and implement hasEndpoint()
+ // evetually, BindingEndpoint should be merged with Binding
+ if (binding instanceof BindingEndpoint) {
+ // call hasEndpoint() to get the definitive answer
+ return ((BindingEndpoint)binding).hasEndpoint();
+ } else {
+ //FIXME: nasty hack to preserve compatibility with old bindings
+ if (binding instanceof SCABinding) {
+ return false;
+ } else {
+ return true;
+ }
+ }
}
}
Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java Tue Jul 17 00:54:40 2007
@@ -22,7 +22,6 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Multiplicity;
-import org.apache.tuscany.sca.assembly.SCABinding;
/**
* This class encapsulates utility methods to deal with reference definitions
@@ -68,7 +67,7 @@
if (count != 1) {
if (count == 0) {
for (Binding binding: bindings) {
- if (!(binding instanceof SCABinding)) {
+ if (CompositeBuilderImpl.bindingHasEndpoint(binding)) {
return true;
}
}
@@ -80,7 +79,7 @@
if (count < 1) {
if (count == 0) {
for (Binding binding: bindings) {
- if (!(binding instanceof SCABinding)) {
+ if (CompositeBuilderImpl.bindingHasEndpoint(binding)) {
return true;
}
}
Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java Tue Jul 17 00:54:40 2007
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.tuscany.sca.assembly.BindingEndpoint;
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.policy.Intent;
@@ -31,7 +32,7 @@
*
* @version $Rev$ $Date$
*/
-public class SCABindingImpl implements SCABinding {
+public class SCABindingImpl implements SCABinding, BindingEndpoint {
private String name;
private String uri;
private List<PolicySet> policySets = new ArrayList<PolicySet>();
@@ -87,5 +88,9 @@
}
public void setUnresolved(boolean unresolved) {
+ }
+
+ public boolean hasEndpoint() {
+ return uri != null;
}
}
Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -417,6 +417,9 @@
}
requestMsg.setBody(args);
+ //FIXME: need somewhere to store the callback URI
+ requestMsg.setFrom(service.getRuntimeWire(wsBinding).getSource());
+
Message workContext = ThreadMessageContext.getMessageContext();
ThreadMessageContext.setMessageContext(requestMsg);
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java Tue Jul 17 00:54:40 2007
@@ -36,6 +36,13 @@
* @return The target operation for this invocation chain
*/
Operation getTargetOperation();
+
+ /**
+ * Updates the target operation for this invocation chain.
+ *
+ * @param operation The new target operation for this invocation chain
+ */
+ void setTargetOperation(Operation operation);
/**
* Returns the source operation for this invocation chain.
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java Tue Jul 17 00:54:40 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.invocation;
import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.runtime.EndpointReference;
/**
@@ -123,10 +124,24 @@
ConversationSequence getConversationSequence();
/**
- * Returns the conversational sequence the message is associated with, NONE, START, CONTINUE, or END
+ * Sets the conversational sequence the message is associated with, NONE, START, CONTINUE, or END
*
* @param sequence The conversational sequence
*/
void setConversationSequence(ConversationSequence sequence);
+
+ /**
+ * Returns the operation that created the message.
+ *
+ * @return The operation that created the message
+ */
+ Operation getOperation();
+
+ /**
+ * Sets the operation that created the message.
+ *
+ * @param op The operation that created the message
+ */
+ void setOperation(Operation op);
}
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java Tue Jul 17 00:54:40 2007
@@ -56,9 +56,21 @@
InterfaceContract getInterfaceContract();
/**
+ * Update the interface contract for the endpoint
+ * @param interfaceContract The updated interface contract
+ */
+ void setInterfaceContract(InterfaceContract interfaceContract);
+
+ /**
* Get the URI for this endpoint
* @return The URI of the endpoint
*/
String getURI();
+
+ /**
+ * Set the URI for this endpoint
+ * @param uri The new URI of the endpoint
+ */
+ void setURI(String uri);
}
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java Tue Jul 17 00:54:40 2007
@@ -24,6 +24,7 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.ComponentReference;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
@@ -76,5 +77,13 @@
* @return The runtime Invoker
*/
Invoker getInvoker(Binding binding, Operation operation);
+
+ /**
+ * Get the callback invocation chain for the given binding and operation
+ * @param binding The assembly model binding
+ * @param operation The assembly model operation
+ * @return The runtime callback invocation chain
+ */
+ InvocationChain getCallbackInvocationChain(Binding binding, Operation operation);
}
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java Tue Jul 17 00:54:40 2007
@@ -24,6 +24,7 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
@@ -81,6 +82,14 @@
* @return The runtime invoker
*/
Invoker getInvoker(Binding binding, Operation operation);
+
+ /**
+ * Get the invocation chain for the given binding and operation
+ * @param binding The assembly model binding
+ * @param operation The assembly model operation
+ * @return The runtime invocation chain
+ */
+ InvocationChain getInvocationChain(Binding binding, Operation operation);
/**
* Get the callback invoker for the given binding and operation
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java Tue Jul 17 00:54:40 2007
@@ -60,9 +60,10 @@
Invoker headInvoker = chain.getHeadInvoker();
msg.setCorrelationID(msgContext.getCorrelationID());
Operation operation = chain.getTargetOperation();
+ msg.setOperation(operation);
Interface contract = operation.getInterface();
if (contract != null && contract.isConversational()) {
- ConversationSequence sequence = chain.getTargetOperation().getConversationSequence();
+ ConversationSequence sequence = operation.getConversationSequence();
if (sequence == ConversationSequence.CONVERSATION_END) {
msg.setConversationSequence(ConversationSequence.CONVERSATION_END);
conversationStarted = false;
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java Tue Jul 17 00:54:40 2007
@@ -51,6 +51,10 @@
return targetOperation;
}
+ public void setTargetOperation(Operation operation) {
+ this.targetOperation = operation;
+ }
+
public void addInterceptor(Interceptor interceptor) {
if (invokerChainHead == null) {
invokerChainHead = interceptor;
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java Tue Jul 17 00:54:40 2007
@@ -75,10 +75,11 @@
RuntimeWire wire = null;
if (from != null) {
wire = wires.get(from.getURI());
- } else { // service with binding
- wire = wires.get(null);
}
- assert wire != null;
+ if (wire == null) {
+ //FIXME: need better exception
+ throw new RuntimeException("Wire for callback cannot be found");
+ }
IdentityHashMap<Operation, InvocationChain> map = wire.getCallbackInvocationMap();
Operation operation = JavaInterfaceUtil.findOperation(method, map.keySet());
InvocationChain chain = map.get(operation);
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java Tue Jul 17 00:54:40 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.core.invocation;
import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.runtime.EndpointReference;
@@ -34,6 +35,7 @@
private boolean isFault;
private ConversationSequence conversationSequence;
private String conversationId;
+ private Operation op;
private EndpointReference from;
private EndpointReference to;
@@ -114,4 +116,11 @@
this.to = to;
}
+ public Operation getOperation() {
+ return op;
+ }
+
+ public void setOperation(Operation op) {
+ this.op = op;
+ }
}
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java Tue Jul 17 00:54:40 2007
@@ -21,6 +21,7 @@
import java.util.LinkedList;
import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Interceptor;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
@@ -166,6 +167,14 @@
}
public void setTo(EndpointReference to) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Operation getOperation() {
+ return null;
+ }
+
+ public void setOperation(Operation op) {
throw new UnsupportedOperationException();
}
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java Tue Jul 17 00:54:40 2007
@@ -29,7 +29,6 @@
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.assembly.SCABindingFactory;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderMonitor;
@@ -91,7 +90,7 @@
super();
this.assemblyFactory = assemblyFactory;
this.scaBindingFactory = scaBindingFactory;
- this.interfaceContractMapper = interfaceContractMapper;
+ this.interfaceContractMapper = interfaceContractMapper;
this.scopeRegistry = scopeRegistry;
this.workScheduler = workScheduler;
this.wireProcessor = wireProcessor;
@@ -235,6 +234,12 @@
}
}
}
+ for (RuntimeWire wire : ((RuntimeComponentService)service).getRuntimeWires()) {
+ wireProcessor.process(wire);
+ }
+ for (RuntimeWire wire : ((RuntimeComponentService)service).getCallbackWires()) {
+ wireProcessor.process(wire);
+ }
}
for (ComponentReference reference : component.getReferences()) {
for (Binding binding : reference.getBindings()) {
@@ -260,6 +265,9 @@
}
}
}
+ for (RuntimeWire wire : ((RuntimeComponentReference)reference).getRuntimeWires()) {
+ wireProcessor.process(wire);
+ }
}
Implementation implementation = component.getImplementation();
@@ -408,121 +416,98 @@
* @param component
* @param reference
* @param binding
+ * @param isCallback
*/
- private void createWires(Component component, ComponentReference reference, Binding binding, boolean isCallback) {
+ private void createWires(Component component, ComponentReference reference, Binding binding,
+ boolean isCallback) {
if (!(reference instanceof RuntimeComponentReference)) {
return;
}
- RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference;
- InterfaceContract bindingContract = getInterfaceContract(reference, binding, isCallback);
-
- if (!(binding instanceof SCABinding)) {
- // Use the interface contract of the reference on the component type
- Reference componentTypeRef = reference.getReference();
- InterfaceContract sourceContract = componentTypeRef == null ? reference.getInterfaceContract()
- : componentTypeRef.getInterfaceContract();
- sourceContract = sourceContract.makeUnidirectional(isCallback);
-
- // Component Reference --> External Service
- EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)component,
- (RuntimeComponentReference)reference, binding,
- sourceContract);
-
- EndpointReference wireTarget = new EndpointReferenceImpl(null, null, binding, bindingContract);
- RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
-
- if (sourceContract.getInterface() != null) {
- for (Operation operation : sourceContract.getInterface().getOperations()) {
- Operation targetOperation = interfaceContractMapper.map(bindingContract.getInterface(), operation);
- InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
- if (operation.isNonBlocking()) {
- addNonBlockingInterceptor(reference, binding, chain);
- }
- addBindingInterceptor(reference, binding, chain, operation);
- wire.getInvocationChains().add(chain);
- }
- }
- if (bindingContract.getCallbackInterface() != null && !(reference.getName().startsWith("$self$."))) {
- for (Operation operation : bindingContract.getCallbackInterface().getOperations()) {
- Operation targetOperation = interfaceContractMapper.map(sourceContract.getCallbackInterface(),
- operation);
- InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
- addImplementationInterceptor(component, null, chain, targetOperation, true);
- wire.addCallbackInvocationChain(chain);
- }
- }
- runtimeRef.getRuntimeWires().add(wire);
- wireProcessor.process(wire);
- // TODO: For non-SCA binding, how do we deal with targets? For now, assuming targets only apply to SCABinding
- return;
- }
- for (ComponentService service : reference.getTargets()) {
- Component target = null;
- SCABinding scaBinding = service.getBinding(SCABinding.class);
- if (scaBinding != null) {
- target = scaBinding.getComponent();
- }
-
- // FIXME: [rfeng] Ignore unresolved services
- if (service.isUnresolved()) {
- continue;
- }
-
- // FIXME: [rfeng] We might need a better way to get the impl interface contract
- InterfaceContract targetContract =
- service.getService().getInterfaceContract().makeUnidirectional(isCallback);
-
- EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)component,
- (RuntimeComponentReference)reference, binding,
- bindingContract);
-
- EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)target,
- (RuntimeComponentService)service, binding,
- targetContract);
-
- RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
-
- if (bindingContract.getInterface() != null) {
- for (Operation operation : bindingContract.getInterface().getOperations()) {
- Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation);
- InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
- if (operation.isNonBlocking()) {
- addNonBlockingInterceptor(reference, binding, chain);
+ if (!reference.getTargets().isEmpty()) {
+ if (isCallback) {
+ createReferenceWire(reference, component, binding, null, null, binding, true);
+ }
+ for (ComponentService service : reference.getTargets()) {
+ // FIXME: [rfeng] Ignore unresolved services
+ if (service.isUnresolved()) {
+ continue;
+ }
+ if (!isCallback) {
+ Binding serviceBinding = service.getBinding(binding.getClass());
+ if (serviceBinding != null) {
+ createReferenceWire(reference, component, binding, service, null, serviceBinding, false);
}
- addBindingInterceptor(reference, binding, chain, operation);
- if (target != null) {
- addImplementationInterceptor(target, service, chain, targetOperation, false);
+ } else {
+ Binding serviceBinding = service.getCallbackBinding(binding.getClass());
+ if (serviceBinding != null) {
+ createServiceWire(service, null, serviceBinding, reference, component, binding, true);
}
- wire.getInvocationChains().add(chain);
}
}
- if (targetContract.getCallbackInterface() != null) {
- for (Operation operation : targetContract.getCallbackInterface().getOperations()) {
- Operation targetOperation = interfaceContractMapper.map(bindingContract.getCallbackInterface(),
- operation);
- InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
- if (operation.isNonBlocking()) {
- addNonBlockingCallbackInterceptor(service, binding, chain);
- }
- if (target != null) {
- addBindingCallbackInterceptor(service, binding, chain, operation);
- }
- // can't create callback implementation interceptor for self-reference
- if (!reference.getName().startsWith("$self$.")) {
- addImplementationInterceptor(component, null, chain, targetOperation, true);
- }
- wire.addCallbackInvocationChain(chain);
- }
+ } else {
+ if (CompositeBuilderImpl.bindingHasEndpoint(binding)) { // create wire if binding has an endpoint
+ createReferenceWire(reference, component, binding, null, null, binding, isCallback);
}
+ }
+ }
+
+ /**
+ * Create a reference wire for a forward call or a callback
+ *
+ * @param component
+ * @param reference
+ * @param referenceBinding
+ * @param service
+ * @param serviceBinding
+ * @param isCallback
+ */
+ private RuntimeWire createReferenceWire(
+ ComponentReference reference, Component refComponent, Binding refBinding,
+ ComponentService service, Component serviceComponent, Binding serviceBinding,
+ boolean isCallback) {
+ RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference;
+ InterfaceContract bindingContract = getInterfaceContract(reference, refBinding, isCallback);
- runtimeRef.getRuntimeWires().add(wire);
- if (!wire.getCallbackInvocationChains().isEmpty()) {
- if (wire.getTarget().getContract() != null) {
- ((RuntimeComponentService) wire.getTarget().getContract()).getCallbackWires().add(wire);
+ // Use the interface contract of the reference on the component type
+ Reference componentTypeRef = reference.getReference();
+ InterfaceContract sourceContract = componentTypeRef == null ? reference.getInterfaceContract()
+ : componentTypeRef.getInterfaceContract();
+ sourceContract = sourceContract.makeUnidirectional(isCallback);
+
+ EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)refComponent,
+ (RuntimeComponentReference)reference,
+ refBinding, sourceContract);
+
+ EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)serviceComponent,
+ (RuntimeComponentService)service,
+ serviceBinding, bindingContract);
+
+ RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
+ if (!isCallback) {
+ for (Operation operation : sourceContract.getInterface().getOperations()) {
+ Operation targetOperation = interfaceContractMapper.map(bindingContract.getInterface(), operation);
+ InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
+ if (operation.isNonBlocking()) {
+ addNonBlockingInterceptor(reference, refBinding, chain);
}
+ addBindingInterceptor(reference, refBinding, chain, operation);
+ wire.getInvocationChains().add(chain);
+ }
+ } else {
+ for (Operation operation : bindingContract.getCallbackInterface().getOperations()) {
+ Operation targetOperation = interfaceContractMapper.map(sourceContract.getCallbackInterface(),
+ operation);
+ InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
+ if (!reference.getName().startsWith("$self$.")) {
+ addImplementationInterceptor(refComponent, null, chain, targetOperation, true);
+ } else {
+ //FIXME: need to invoke the callback object
+ }
+ wire.addCallbackInvocationChain(chain);
}
- wireProcessor.process(wire);
}
+ runtimeRef.getRuntimeWires().add(wire);
+ return wire;
}
/**
@@ -551,24 +536,47 @@
* @param component
* @param service
* @param binding
+ * @param isCallback
*/
private void createWires(Component component, ComponentService service, Binding binding, boolean isCallback) {
if (!(service instanceof RuntimeComponentService)) {
return;
}
+ RuntimeWire wire = createServiceWire(service, component, binding, null, null, binding, isCallback);
+
+ //FIXME: need better way to create the source URI
+ wire.getSource().setURI(binding.getClass().getName());
+ }
+
+ /**
+ * Create a service wire for a forward call or a callback
+ *
+ * @param component
+ * @param service
+ * @param serviceBinding
+ * @param reference
+ * @param referenceBinding
+ * @param isCallback
+ */
+ private RuntimeWire createServiceWire(
+ ComponentService service, Component serviceComponent, Binding serviceBinding,
+ ComponentReference reference, Component refComponent, Binding refBinding,
+ boolean isCallback) {
RuntimeComponentService runtimeService = (RuntimeComponentService)service;
// FIXME: [rfeng] We might need a better way to get the impl interface contract
InterfaceContract targetContract = service.getService().getInterfaceContract().
makeUnidirectional(isCallback);
- InterfaceContract sourceContract = getInterfaceContract(service, binding, isCallback);
-
- EndpointReference wireSource = new EndpointReferenceImpl(null, null, binding, sourceContract);
+ InterfaceContract sourceContract = getInterfaceContract(service, serviceBinding, isCallback);
- EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)component,
- (RuntimeComponentService)service, binding,
- targetContract);
+ EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)refComponent,
+ (RuntimeComponentReference)reference,
+ refBinding, sourceContract);
+
+ EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)serviceComponent,
+ (RuntimeComponentService)service,
+ serviceBinding, targetContract);
RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
@@ -576,7 +584,7 @@
for (Operation operation : sourceContract.getInterface().getOperations()) {
Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation);
InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
- addImplementationInterceptor(component, service, chain, targetOperation, false);
+ addImplementationInterceptor(serviceComponent, service, chain, targetOperation, false);
wire.getInvocationChains().add(chain);
}
runtimeService.getRuntimeWires().add(wire);
@@ -588,16 +596,16 @@
interfaceContractMapper.map(sourceContract.getCallbackInterface(), operation);
InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
if (operation.isNonBlocking()) {
- addNonBlockingCallbackInterceptor(service, binding, chain);
+ addNonBlockingCallbackInterceptor(service, serviceBinding, chain);
}
- addBindingCallbackInterceptor(service, binding, chain, operation);
+ addBindingCallbackInterceptor(service, serviceBinding, chain, operation);
wire.addCallbackInvocationChain(chain);
}
runtimeService.getCallbackWires().add(wire);
}
- wireProcessor.process(wire);
- }
+ return wire;
+ }
/**
* Add the interceptor for a component implementation
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java Tue Jul 17 00:54:40 2007
@@ -50,7 +50,8 @@
this.contract = contract;
this.binding = binding;
this.interfaceContract = interfaceContract;
- this.uri = binding.getURI();
+ this.uri = (component != null ? component.getName() : "") + '/' +
+ (contract != null ? contract.getName() : "");
}
/**
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java Tue Jul 17 00:54:40 2007
@@ -83,4 +83,18 @@
return null;
}
+ public InvocationChain getCallbackInvocationChain(Binding binding, Operation operation) {
+ RuntimeWire wire = getRuntimeWire(binding);
+ if (wire == null) {
+ return null;
+ }
+ for (InvocationChain chain : wire.getCallbackInvocationChains()) {
+ Operation op = chain.getTargetOperation();
+ if (mapper.isCompatible(operation, op, op.getInterface().isRemotable())) {
+ return chain;
+ }
+ }
+ return null;
+ }
+
}
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java Tue Jul 17 00:54:40 2007
@@ -80,6 +80,15 @@
}
public Invoker getInvoker(Binding binding, Operation operation) {
+ InvocationChain chain = getInvocationChain(binding, operation);
+ if (chain != null) {
+ return chain.getHeadInvoker();
+ } else {
+ return null;
+ }
+ }
+
+ public InvocationChain getInvocationChain(Binding binding, Operation operation) {
RuntimeWire wire = getRuntimeWire(binding);
if (wire == null) {
return null;
@@ -87,7 +96,7 @@
for (InvocationChain chain : wire.getInvocationChains()) {
Operation op = chain.getTargetOperation();
if (mapper.isCompatible(operation, op, op.getInterface().isRemotable())) {
- return chain.getHeadInvoker();
+ return chain;
}
}
return null;
Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+
+public class RuntimeSCABindingInvoker implements Interceptor {
+
+ private Invoker next;
+
+ public RuntimeSCABindingInvoker() {
+ }
+
+ public void setNext(Invoker next) {
+ this.next = next;
+ }
+
+ public Invoker getNext() {
+ return next;
+ }
+
+ public Message invoke(Message msg) {
+ return next.invoke(msg);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java Tue Jul 17 00:54:40 2007
@@ -35,13 +35,13 @@
public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference reference,
SCABinding binding) {
- return new RuntimeSCABindingProvider(component, reference, binding);
+ return new RuntimeSCAReferenceBindingProvider(component, reference, binding);
}
public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
RuntimeComponentService service,
SCABinding binding) {
- return null;
+ return new RuntimeSCAServiceBindingProvider(component, service, binding);
}
public Class<SCABinding> getModelType() {
Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider2;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvider2 {
+
+ private RuntimeComponentReference reference;
+ private SCABinding binding;
+ private boolean started = false;
+
+ public RuntimeSCAReferenceBindingProvider(RuntimeComponent component,
+ RuntimeComponentReference reference,
+ SCABinding binding) {
+ this.reference = reference;
+ this.binding = binding;
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ return reference.getInterfaceContract();
+ }
+
+ public boolean supportsAsyncOneWayInvocation() {
+ return true;
+ }
+
+ public Invoker createInvoker(Operation operation) {
+ return new RuntimeSCABindingInvoker();
+ }
+
+ @Deprecated
+ public Invoker createInvoker(Operation operation, boolean isCallback) {
+ if (isCallback) {
+ throw new UnsupportedOperationException();
+ } else {
+ return createInvoker(operation);
+ }
+ }
+
+ public void start() {
+ if (started) {
+ return;
+ } else {
+ started = true;
+ }
+ for (RuntimeWire sourceWire : reference.getRuntimeWires()) {
+ if (sourceWire.getSource().getBinding() == binding) {
+ EndpointReference target = sourceWire.getTarget();
+ if (target != null) {
+ RuntimeComponentService service = (RuntimeComponentService)target.getContract();
+ if (service != null) { // not a callback wire
+ SCABinding scaBinding = service.getBinding(SCABinding.class);
+ RuntimeWire targetWire = service.getRuntimeWire(scaBinding);
+ boolean dynamicService = service.getInterfaceContract().getInterface().isDynamic();
+ for (InvocationChain sourceChain : sourceWire.getInvocationChains()) {
+ InvocationChain targetChain =
+ service.getInvocationChain(scaBinding, sourceChain.getTargetOperation());
+ if (targetChain == null && dynamicService) {
+ targetChain = targetWire.getInvocationChains().get(0);
+ }
+ if (targetChain != null) {
+ ((Interceptor)sourceChain.getTailInvoker()).setNext(targetChain.getHeadInvoker());
+ if (!dynamicService) {
+ sourceChain.setTargetOperation(targetChain.getSourceOperation());
+ }
+ } else {
+ throw new RuntimeException("Incompatible operations for source and target wires");
+ }
+ }
+ if (!dynamicService) {
+ sourceWire.getTarget().setInterfaceContract(targetWire.getSource().getInterfaceContract());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public void stop() {
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider2;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider2 {
+
+ private RuntimeComponentService service;
+ private boolean started = false;
+
+ public RuntimeSCAServiceBindingProvider(RuntimeComponent component,
+ RuntimeComponentService service,
+ SCABinding binding) {
+ this.service = service;
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ return service.getInterfaceContract();
+ }
+
+ public boolean supportsAsyncOneWayInvocation() {
+ return true;
+ }
+
+ public Invoker createCallbackInvoker(Operation operation) {
+ return new RuntimeSCABindingInvoker();
+ }
+
+ public void start() {
+ if (started) {
+ return;
+ } else {
+ started = true;
+ }
+ for (RuntimeWire sourceWire : service.getCallbackWires()) {
+ if (sourceWire.getTarget().getBinding() instanceof SCABinding) {
+ EndpointReference source = sourceWire.getSource();
+ if (source != null) {
+ RuntimeComponentReference reference = (RuntimeComponentReference)source.getContract();
+ if (reference != null) { // a hard-wired callback
+ Binding refBinding = source.getBinding();
+ RuntimeWire targetWire = reference.getRuntimeWire(refBinding);
+ for (InvocationChain sourceChain : sourceWire.getCallbackInvocationChains()) {
+ InvocationChain targetChain =
+ reference.getCallbackInvocationChain(refBinding, sourceChain.getTargetOperation());
+ if (targetChain != null) {
+ ((Interceptor)sourceChain.getTailInvoker()).setNext(targetChain.getHeadInvoker());
+ sourceChain.setTargetOperation(targetChain.getSourceOperation());
+ } else {
+ throw new RuntimeException(
+ "Incompatible operations for source and target callback wires");
+ }
+ }
+ sourceWire.getSource().setInterfaceContract(targetWire.getTarget().getInterfaceContract());
+ }
+ }
+ }
+ }
+ }
+
+ public void stop() {
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java Tue Jul 17 00:54:40 2007
@@ -44,6 +44,7 @@
import org.apache.tuscany.sca.assembly.xml.CompositeProcessor;
import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeDocumentProcessor;
import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeProcessor;
+import org.apache.tuscany.sca.assembly.xml.SCABindingProcessor;
import org.apache.tuscany.sca.contribution.ContributionFactory;
import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
import org.apache.tuscany.sca.contribution.processor.DefaultContributionPostProcessorExtensionPoint;
@@ -56,6 +57,7 @@
import org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
import org.apache.tuscany.sca.contribution.processor.PackageProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.contribution.processor.impl.FolderContributionProcessor;
import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
@@ -121,6 +123,14 @@
RuntimeWireProcessorExtensionPoint wireProcessors = new DefaultWireProcessorExtensionPoint();
registry.addExtensionPoint(wireProcessors);
RuntimeWireProcessor wireProcessor = new ExtensibleWireProcessor(wireProcessors);
+
+ // Add the SCABindingProcessor extension
+ PolicyFactory policyFactory = registry.getExtensionPoint(PolicyFactory.class);
+ SCABindingProcessor scaBindingProcessor = new SCABindingProcessor(assemblyFactory,
+ policyFactory,
+ scaBindingFactory);
+ StAXArtifactProcessorExtensionPoint processors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ processors.addArtifactProcessor(scaBindingProcessor);
// Create a provider factory extension point
ProviderFactoryExtensionPoint providerFactories = new DefaultProviderFactoryExtensionPoint();
Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java Tue Jul 17 00:54:40 2007
@@ -44,12 +44,16 @@
this.operation = operation;
}
- protected Object doInvoke(Object[] objects) throws ScriptException {
+ protected Object doInvoke(Object[] objects, Operation op) throws ScriptException {
if (xmlHelper != null) {
objects[0] = xmlHelper.toScriptXML((OMElement)objects[0]);
}
- Object response = ((Invocable)scriptEngine).invokeFunction(operation.getName(), objects);
+ Operation oper = operation; // static setting
+ if (oper.getName() == null) { // if no static setting
+ oper = op; // use dynamic setting
+ }
+ Object response = ((Invocable)scriptEngine).invokeFunction(oper.getName(), objects);
if (xmlHelper != null) {
response = xmlHelper.toOMElement(response);
@@ -60,7 +64,7 @@
public Message invoke(Message msg) {
try {
- Object resp = doInvoke((Object[])msg.getBody());
+ Object resp = doInvoke((Object[])msg.getBody(), msg.getOperation());
msg.setBody(resp);
} catch (ScriptException e) {
msg.setFaultBody(e.getCause());
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org