You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ed...@apache.org on 2011/01/17 14:35:36 UTC
svn commit: r1059921 - in /tuscany/sca-java-2.x/trunk/modules/core: ./
META-INF/ src/main/java/org/apache/tuscany/sca/core/assembly/impl/
Author: edwardsmj
Date: Mon Jan 17 13:35:35 2011
New Revision: 1059921
URL: http://svn.apache.org/viewvc?rev=1059921&view=rev
Log:
Update deserialization of RuntimeEndpointImpl & RuntimeEndpointReferenceImpl to cope with Threads which dont have a ComponentContext available - in support of TUSCANY-3811
Modified:
tuscany/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF
tuscany/sca-java-2.x/trunk/modules/core/pom.xml
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
Modified: tuscany/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF?rev=1059921&r1=1059920&r2=1059921&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF Mon Jan 17 13:35:35 2011
@@ -59,6 +59,7 @@ Import-Package: javax.security.auth,
org.apache.tuscany.sca.interfacedef.wsdl;version="2.0.0",
org.apache.tuscany.sca.invocation;version="2.0.0",
org.apache.tuscany.sca.monitor;version="2.0.0",
+ org.apache.tuscany.sca.node;version="2.0.0",
org.apache.tuscany.sca.policy;version="2.0.0",
org.apache.tuscany.sca.provider;version="2.0.0",
org.apache.tuscany.sca.runtime;version="2.0.0",
Modified: tuscany/sca-java-2.x/trunk/modules/core/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/pom.xml?rev=1059921&r1=1059920&r2=1059921&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/pom.xml Mon Jan 17 13:35:35 2011
@@ -54,6 +54,12 @@
</dependency>
<dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java?rev=1059921&r1=1059920&r2=1059921&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java Mon Jan 17 13:35:35 2011
@@ -43,6 +43,7 @@ import org.apache.tuscany.sca.assembly.C
import org.apache.tuscany.sca.assembly.CompositeReference;
import org.apache.tuscany.sca.assembly.CompositeService;
import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.assembly.Service;
@@ -81,6 +82,7 @@ import org.apache.tuscany.sca.invocation
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.invocation.Phase;
+import org.apache.tuscany.sca.node.NodeFactory;
import org.apache.tuscany.sca.provider.BindingProviderFactory;
import org.apache.tuscany.sca.provider.EndpointAsyncProvider;
import org.apache.tuscany.sca.provider.EndpointProvider;
@@ -91,8 +93,10 @@ import org.apache.tuscany.sca.provider.P
import org.apache.tuscany.sca.provider.PolicyProviderFactory;
import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
import org.apache.tuscany.sca.runtime.EndpointRegistry;
import org.apache.tuscany.sca.runtime.EndpointSerializer;
+import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
@@ -892,18 +896,63 @@ public class RuntimeEndpointImpl extends
if (compositeContext != null) {
bind(compositeContext);
}
- }
+ } // end if
if (serializer != null) {
RuntimeEndpointImpl ep = (RuntimeEndpointImpl)serializer.readEndpoint(xml);
copyFrom(ep);
} else {
- // FIXME: [rfeng] What should we do here?
- }
- }
+ // In this case, we assume that we're running on a detached (non Tuscany) thread and
+ // as a result we need to connect back to the Tuscany environment...
+ for( NodeFactory factory : NodeFactory.getNodeFactories() ) {
+ ExtensionPointRegistry registry = factory.getExtensionPointRegistry();
+ if( registry != null ) {
+ this.registry = registry;
+ UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
+ this.interfaceContractMapper = utilities.getUtility(InterfaceContractMapper.class);
+ this.serializer = utilities.getUtility(EndpointSerializer.class);
+ RuntimeEndpointImpl ep = (RuntimeEndpointImpl)serializer.readEndpoint(xml);
+ // Find the actual Endpoint in the EndpointRegistry
+ ep = findActualEP( ep, registry );
+
+ if( ep != null ){
+ copyFrom( ep );
+ break;
+ } // end if
+ } // end if
+ } // end for
+ } // end if
+ } // end if
super.resolve();
- }
+ } // end method resolve
+
+ /**
+ * Find the actual Endpoint in the EndpointRegistry which corresponds to the configuration described
+ * in a deserialized Endpoint
+ * @param ep The deserialized endpoint
+ * @param registry - the main extension point Registry
+ * @return the corresponding Endpoint from the EndpointRegistry, or null if no match can be found
+ */
+ private RuntimeEndpointImpl findActualEP(RuntimeEndpointImpl ep,
+ ExtensionPointRegistry registry) {
+ // Get the EndpointRegistry
+ DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(registry);
+
+ if( domainRegistryFactory == null ) return null;
+
+ // TODO: For the moment, just use the first (and only!) EndpointRegistry...
+ EndpointRegistry endpointRegistry = (EndpointRegistry) domainRegistryFactory.getEndpointRegistries().toArray()[0];
+
+ if( endpointRegistry == null ) return null;
+
+ for( Endpoint endpoint : endpointRegistry.findEndpoint(ep.getURI()) ) {
+ // TODO: For the present, simply return the first matching endpoint
+ return (RuntimeEndpointImpl) endpoint;
+ } // end for
+
+ return null;
+ } // end method findActualEP
- public InterfaceContract getBindingInterfaceContract() {
+ public InterfaceContract getBindingInterfaceContract() {
resolve();
if (bindingInterfaceContract != null) {
return bindingInterfaceContract;
Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java?rev=1059921&r1=1059920&r2=1059921&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java Mon Jan 17 13:35:35 2011
@@ -38,6 +38,7 @@ import org.apache.tuscany.sca.assembly.C
import org.apache.tuscany.sca.assembly.CompositeReference;
import org.apache.tuscany.sca.assembly.CompositeService;
import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
import org.apache.tuscany.sca.assembly.builder.BuilderContext;
@@ -70,6 +71,7 @@ import org.apache.tuscany.sca.invocation
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.invocation.Phase;
+import org.apache.tuscany.sca.node.NodeFactory;
import org.apache.tuscany.sca.provider.BindingProviderFactory;
import org.apache.tuscany.sca.provider.EndpointReferenceProvider;
import org.apache.tuscany.sca.provider.ImplementationAsyncProvider;
@@ -78,9 +80,11 @@ import org.apache.tuscany.sca.provider.P
import org.apache.tuscany.sca.provider.PolicyProviderFactory;
import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
import org.apache.tuscany.sca.runtime.EndpointReferenceBinder;
import org.apache.tuscany.sca.runtime.EndpointRegistry;
import org.apache.tuscany.sca.runtime.EndpointSerializer;
+import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
@@ -633,11 +637,59 @@ public class RuntimeEndpointReferenceImp
bind(compositeContext);
}
}
- RuntimeEndpointReferenceImpl epr = (RuntimeEndpointReferenceImpl)serializer.readEndpointReference(xml);
- copyFrom(epr);
+ if (serializer != null) {
+ RuntimeEndpointReferenceImpl epr = (RuntimeEndpointReferenceImpl)serializer.readEndpointReference(xml);
+ copyFrom(epr);
+ } else {
+ // In this case, we assume that we're running on a detached (non Tuscany) thread and
+ // as a result we need to connect back to the Tuscany environment...
+ for( NodeFactory factory : NodeFactory.getNodeFactories() ) {
+ ExtensionPointRegistry registry = factory.getExtensionPointRegistry();
+ if( registry != null ) {
+ this.registry = registry;
+ UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
+ this.serializer = utilities.getUtility(EndpointSerializer.class);
+ RuntimeEndpointReferenceImpl epr = (RuntimeEndpointReferenceImpl)serializer.readEndpointReference(xml);
+ // Find the actual Endpoint in the EndpointRegistry
+ epr = findActualEPR( epr, registry );
+
+ if( epr != null ){
+ copyFrom( epr );
+ break;
+ } // end if
+ } // end if
+ } // end for
+ } // end if
}
super.resolve();
- }
+ } // end method resolve
+
+ /**
+ * Find the actual EndpointReference in the EndpointRegistry which corresponds to the configuration described
+ * in a deserialized EndpointReference
+ * @param ep The deserialized endpointReference
+ * @param registry - the main extension point Registry
+ * @return the corresponding EndpointReference from the EndpointRegistry, or null if no match can be found
+ */
+ private RuntimeEndpointReferenceImpl findActualEPR(RuntimeEndpointReferenceImpl epr,
+ ExtensionPointRegistry registry) {
+ // Get the EndpointRegistry
+ DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(registry);
+ if( domainRegistryFactory == null ) return null;
+
+ // TODO: For the moment, just use the first (and only!) EndpointRegistry...
+ EndpointRegistry endpointRegistry = (EndpointRegistry) domainRegistryFactory.getEndpointRegistries().toArray()[0];
+ if( endpointRegistry == null ) return null;
+
+ for( EndpointReference epReference : endpointRegistry.getEndpointReferences() ) {
+ // TODO: For the present, simply return the first matching endpointReference
+ if( epReference.getURI().equals(epr.getURI()) ) {
+ return (RuntimeEndpointReferenceImpl) epReference;
+ } // end if
+ } // end for
+
+ return null;
+ } // end method findActualEPR
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.uri = in.readUTF();