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