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();