Added: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java?rev=656959&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
 Fri May 16 01:03:27 2008
@@ -0,0 +1,163 @@
+/*
+ * 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.assembly;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.core.context.ComponentContextImpl;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.provider.EndpointProvider;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+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.RuntimeWire;
+import org.osoa.sca.ServiceUnavailableException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EndpointWireImpl implements RuntimeWire {
+
+    private Endpoint endpoint;
+    private CompositeActivatorImpl compositeActivator;
+    
+    private EndpointProvider endpointProvider;
+    private EndpointReference source;
+    private RuntimeWire wire;
+
+    /**
+     * @param endpoint
+     */
+    public EndpointWireImpl(Endpoint endpoint, CompositeActivator 
compositeActivator) {
+        super();
+        this.endpoint = endpoint;
+        // TODO - improve the SPI to get rid of this cast
+        this.compositeActivator = (CompositeActivatorImpl)compositeActivator;
+        
+        // store source configuration as we have most of this now. We don't 
though know what the 
+        // target is yet. 
+        Reference componentTypeRef = 
endpoint.getSourceComponentReference().getReference();
+        InterfaceContract sourceContract =
+            componentTypeRef == null ? 
endpoint.getSourceComponentReference().getInterfaceContract() : 
componentTypeRef.getInterfaceContract();
+        sourceContract = sourceContract.makeUnidirectional(false);
+
+        source = new 
EndpointReferenceImpl((RuntimeComponent)endpoint.getSourceComponent(), 
+                                            
endpoint.getSourceComponentReference(), 
+                                            null, 
+                                            sourceContract);
+        
+        RuntimeComponentReference runtimeRef = 
((RuntimeComponentReference)endpoint.getSourceComponentReference());
+        endpointProvider = runtimeRef.getEndpointProvider(endpoint);
+        
+    }
+
+    public synchronized List<InvocationChain> getInvocationChains() {
+        // where late binding happens. Find the endpoint provider and
+        // ask it to do the endpoint resolution.
+        if (endpoint.isUnresolved()){
+            
+            // this method should locate a viable target service and complete 
the 
+            // endpoint configuration
+            endpointProvider.start();
+            
+            if (endpoint.isUnresolved()){
+                throw new ServiceUnavailableException("Unable to resolve 
service for component: " +
+                        endpoint.getSourceComponent().getName() +
+                        " reference: " + 
+                        endpoint.getSourceComponentReference().getName() +
+                        " target: " + 
+                        endpoint.getTargetName());
+            } 
+        }
+        
+        if (wire == null){           
+            RuntimeComponentReference runtimeRef = 
((RuntimeComponentReference)endpoint.getSourceComponentReference());
+            
+            // add the resolved binding into the reference
+            runtimeRef.getBindings().add(endpoint.getSourceBinding());
+            
+            // add a binding provider into the reference for the resolved 
binding 
+            
compositeActivator.addReferenceBindingProviderForEndpoint(endpoint);
+            
+            // extract the binding provider that has been created
+            ReferenceBindingProvider bindingProvider = 
runtimeRef.getBindingProvider(endpoint.getSourceBinding());
+            
+            // start the binding provider  
+            bindingProvider.start();
+            
+            // create the wire
+            compositeActivator.addReferenceWireForEndpoint(endpoint);
+            
+            // extract the wire that has been created
+            wire = runtimeRef.getRuntimeWire(endpoint.getSourceBinding());
+        }            
+
+        return wire.getInvocationChains();
+    }
+
+    public InvocationChain getInvocationChain(Operation operation) {
+        if (wire ==null){
+            return null;
+        } else {
+            return wire.getInvocationChain(operation);
+        }
+    }
+
+    public Object invoke(Operation operation, Object[] args) throws 
InvocationTargetException {
+        // not called as the endpoint wire only appears on the reference side
+        return null;
+    }
+
+    public Object invoke(Operation operation, Message msg) throws 
InvocationTargetException {
+        // not called as the endpoint wire only appears on the reference side
+        return null;
+    }
+
+
+    public EndpointReference getSource() {
+        return source;
+    }
+
+    public EndpointReference getTarget() {
+        return null;
+    }
+
+    public void setTarget(EndpointReference target) {
+    }
+
+    public void rebuild() {
+    }
+
+    /**
+     * @see java.lang.Object#clone()
+     */
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        EndpointWireImpl copy = (EndpointWireImpl)super.clone();
+        return copy;
+    }
+}

Propchange: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java
 Fri May 16 01:03:27 2008
@@ -24,10 +24,12 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.assembly.impl.ComponentReferenceImpl;
 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.EndpointProvider;
 import org.apache.tuscany.sca.provider.PolicyProvider;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -43,6 +45,8 @@
     private ArrayList<RuntimeWire> wires;
     private HashMap<Binding, ReferenceBindingProvider> bindingProviders =
         new HashMap<Binding, ReferenceBindingProvider>();
+    private HashMap<Endpoint, EndpointProvider> endpointProviders =
+        new HashMap<Endpoint, EndpointProvider>();    
     private HashMap<Binding, List<PolicyProvider>> policyProviders = new 
HashMap<Binding, List<PolicyProvider>>();
 
     private RuntimeComponent component;
@@ -75,6 +79,14 @@
     public void setBindingProvider(Binding binding, ReferenceBindingProvider 
bindingProvider) {
         bindingProviders.put(binding, bindingProvider);
     }
+    
+    public EndpointProvider getEndpointProvider(Endpoint endpoint){
+        return endpointProviders.get(endpoint);
+    }
+    
+    public void setEndpointProvider(Endpoint endpoint, EndpointProvider 
endpointProvider){
+        endpointProviders.put(endpoint, endpointProvider);
+    }
 
     public Invoker getInvoker(Binding binding, Operation operation) {
         RuntimeWire wire = getRuntimeWire(binding);

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
 Fri May 16 01:03:27 2008
@@ -37,6 +37,7 @@
 import org.apache.tuscany.sca.core.assembly.CompositeActivator;
 import org.apache.tuscany.sca.core.assembly.CompositeActivatorImpl;
 import org.apache.tuscany.sca.core.assembly.EndpointReferenceImpl;
+import org.apache.tuscany.sca.core.assembly.EndpointWireImpl;
 import org.apache.tuscany.sca.core.assembly.ReferenceParametersImpl;
 import org.apache.tuscany.sca.core.conversation.ConversationManager;
 import org.apache.tuscany.sca.core.conversation.ConversationState;
@@ -83,6 +84,8 @@
     private transient RuntimeComponentReference clonedRef;
     private transient ReferenceParameters refParams;
     private transient XMLStreamReader xmlReader;
+    
+    private transient RuntimeWire endpointWire;
 
     /*
      * Public constructor for Externalizable serialization/deserialization
@@ -123,7 +126,7 @@
         // sca:component1/component11/component112/service1?
         this.compositeActivator = compositeActivator;
         this.conversationManager = 
this.compositeActivator.getConversationManager();
-        RuntimeWire wire = this.reference.getRuntimeWire(this.binding);
+        //RuntimeWire wire = this.reference.getRuntimeWire(this.binding);
         // init(wire);
         initCallbackID();
     }
@@ -137,7 +140,9 @@
     public RuntimeWire getRuntimeWire() {
         try {
             resolve();
-            if (reference != null) {
+            if (endpointWire != null){
+                return endpointWire;
+            } else if (reference != null) {
                 return reference.getRuntimeWire(binding);
             } else {
                 return null;
@@ -149,6 +154,10 @@
 
     protected void bind(RuntimeWire wire) {
         if (wire != null) {
+            
+            if (wire instanceof EndpointWireImpl){
+                endpointWire = wire;
+            }
             this.component = wire.getSource().getComponent();
             this.reference = 
(RuntimeComponentReference)wire.getSource().getContract();
             this.binding = wire.getSource().getBinding();

Modified: incubator/tuscany/java/sca/modules/host-embedded/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/pom.xml?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/pom.xml Fri May 16 
01:03:27 2008
@@ -101,6 +101,13 @@
             <version>2.0-incubating-SNAPSHOT</version>
             <scope>runtime</scope>
         </dependency>
+        
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-endpoint</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+            <scope>runtime</scope>
+        </dependency>        
      
 
     </dependencies>

Modified: 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
 Fri May 16 01:03:27 2008
@@ -235,7 +235,7 @@
         for (Composite composite : domainComposite.getIncludes()) {
             try {
                 compositeActivator.activate(composite);
-            } catch (ActivationException e) {
+            } catch (Exception e) {
                 throw new ServiceRuntimeException(e);
             }
         }
@@ -244,7 +244,7 @@
                 for (Component component : composite.getComponents()) {
                     compositeActivator.start(component);
                 }
-            } catch (ActivationException e) {
+            } catch (Exception e) {
                 throw new ServiceRuntimeException(e);
             }
         }

Modified: 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
 Fri May 16 01:03:27 2008
@@ -29,6 +29,8 @@
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.DefaultEndpointFactory;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
 import org.apache.tuscany.sca.assembly.SCABindingFactory;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
@@ -217,9 +219,9 @@
         ModelFactoryExtensionPoint factories = 
registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
         SCABindingFactory scaBindingFactory = 
factories.getFactory(SCABindingFactory.class);
         IntentAttachPointTypeFactory intentAttachPointTypeFactory = 
factories.getFactory(IntentAttachPointTypeFactory.class);
+        EndpointFactory endpointFactory = 
factories.getFactory(EndpointFactory.class);        
         InterfaceContractMapper mapper = new InterfaceContractMapperImpl();
         
-        
         //Create a composite builder
         SCADefinitions aggregatedDefinitions = new SCADefinitionsImpl();
         for ( SCADefinitions definition : 
((List<SCADefinitions>)policyDefinitions) ) {
@@ -228,6 +230,7 @@
         compositeBuilder = 
ReallySmallRuntimeBuilder.createCompositeBuilder(monitor,
                                                                             
assemblyFactory,
                                                                             
scaBindingFactory,
+                                                                            
endpointFactory,
                                                                             
intentAttachPointTypeFactory,
                                                                             
mapper, 
                                                                             
aggregatedDefinitions);

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?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- 
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
 Fri May 16 01:03:27 2008
@@ -31,6 +31,7 @@
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
 import org.apache.tuscany.sca.assembly.SCABindingFactory;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.DomainBuilder;
@@ -151,12 +152,14 @@
     public static CompositeBuilder createCompositeBuilder(Monitor monitor,
                                                           AssemblyFactory 
assemblyFactory,
                                                           SCABindingFactory 
scaBindingFactory,
+                                                          EndpointFactory 
endpointFactory,
                                                           
IntentAttachPointTypeFactory intentAttachPointTypeFactory,
                                                           
InterfaceContractMapper interfaceContractMapper,
                                                           SCADefinitions 
policyDefinitions) {
       
         
         return new CompositeBuilderImpl(assemblyFactory, 
+                                        endpointFactory,
                                         scaBindingFactory, 
                                         intentAttachPointTypeFactory, 
                                         interfaceContractMapper,

Modified: incubator/tuscany/java/sca/modules/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/pom.xml?rev=656959&r1=656958&r2=656959&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/pom.xml Fri May 16 01:03:27 2008
@@ -95,6 +95,7 @@
                 <module>domain-api</module>
                 <module>domain-impl</module>
                 <module>domain-manager</module>
+                <module>endpoint</module>
                 <module>extensibility</module>
                 <module>extension-helper</module>
                 <module>host-embedded</module>


Reply via email to