You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/05/08 08:15:27 UTC

svn commit: r536080 [2/2] - in /incubator/tuscany/java/sca/modules: binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/ core-spi/src/main/java/org/apache/tuscany/core/ core-spi/src/main/java/org/apache/tuscany/provider/ core/src/main/java/org/apa...

Added: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java?view=auto&rev=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java Mon May  7 23:15:22 2007
@@ -0,0 +1,80 @@
+/*
+ * 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 crud.provider;
+
+import org.apache.tuscany.core.RuntimeComponent;
+import org.apache.tuscany.core.RuntimeComponentService;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.invocation.Invoker;
+import org.apache.tuscany.provider.ImplementationProvider;
+
+import crud.CRUDImplementation;
+import crud.backend.ResourceManager;
+
+/**
+ * The model representing a sample CRUD implementation in an SCA assembly model.
+ * The sample CRUD implementation is not a full blown implementation, it only
+ * supports a subset of what a component implementation can support: - a single
+ * fixed service (as opposed to a list of services typed by different
+ * interfaces) - a directory attribute used to specify where a CRUD component is
+ * going to persist resources - no references or properties - no policy intents
+ * or policy sets
+ * 
+ * @version $$Rev$$ $$Date: 2007-04-23 19:18:54 -0700 (Mon, 23 Apr
+ *          2007) $$
+ */
+public class CRUDImplementationProvider implements ImplementationProvider {
+    
+    private CRUDImplementation implementation;
+
+    /**
+     * Constructs a new CRUD implementation.
+     */
+    public CRUDImplementationProvider(CRUDImplementation implementation) {
+        this.implementation = implementation;
+    }
+
+    public Invoker createInvoker(RuntimeComponent component, RuntimeComponentService service, Operation operation) {
+        CRUDInvoker invoker = new CRUDInvoker(operation, new ResourceManager(implementation.getDirectory()));
+        return invoker;
+    }
+
+    public Invoker createCallbackInvoker(RuntimeComponent component, Operation operation) {
+        CRUDInvoker invoker = new CRUDInvoker(operation, new ResourceManager(implementation.getDirectory()));
+        return invoker;
+    }
+
+    public InterfaceContract getImplementationInterfaceContract(RuntimeComponentService service) {
+        return service.getInterfaceContract();
+    }
+
+    public void start(RuntimeComponent component) {
+        System.out.println("Starting " + component.getName());
+    }
+
+    public void stop(RuntimeComponent component) {
+        System.out.println("Stopping " + component.getName());
+    }
+
+    public void configure(RuntimeComponent component) {
+        System.out.println("Configuring " + component.getName());
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java?view=auto&rev=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java Mon May  7 23:15:22 2007
@@ -0,0 +1,51 @@
+/*
+ * 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 crud.provider;
+
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.interfacedef.java.introspect.JavaInterfaceIntrospector;
+import org.apache.tuscany.provider.ImplementationProvider;
+import org.apache.tuscany.provider.ImplementationProviderFactory;
+
+import crud.impl.CRUDImplementationImpl;
+
+/**
+ * The model representing a sample CRUD implementation in an SCA assembly model.
+ * 
+ * @version $$Rev$$ $$Date: 2007-04-23 19:18:54 -0700 (Mon, 23 Apr
+ *          2007) $$
+ */
+public class CRUDImplementationProviderFactory extends CRUDImplementationImpl implements ImplementationProviderFactory {
+
+    /**
+     * Constructs a new CRUD implementation.
+     */
+    public CRUDImplementationProviderFactory(
+                               AssemblyFactory assemblyFactory,
+                              JavaInterfaceFactory javaFactory,
+                              JavaInterfaceIntrospector introspector) {
+        super(assemblyFactory, javaFactory, introspector);
+    }
+
+    
+    public ImplementationProvider createImplementationProvider() {
+        return new CRUDImplementationProvider(this);
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDImplementationProviderFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java?view=auto&rev=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java Mon May  7 23:15:22 2007
@@ -0,0 +1,79 @@
+/*
+ * 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 crud.provider;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.invocation.Invoker;
+import org.apache.tuscany.invocation.Message;
+
+import crud.backend.ResourceManager;
+
+/**
+ * Implements a target invoker for CRUD component implementations.
+ * 
+ * The target invoker is responsible for dispatching invocations to the particular
+ * component implementation logic. In this example we are simply delegating the
+ * CRUD operation invocations to the corresponding methods on our fake
+ * resource manager.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CRUDInvoker implements Invoker {
+    private Operation operation;
+    private ResourceManager resourceManager;
+    
+    public CRUDInvoker(Operation operation, ResourceManager resourceManager) {
+        this.operation = operation;
+        this.resourceManager = resourceManager;
+    }
+    
+    public Message invoke(Message msg) {
+        try {
+            Object[] args = msg.getBody();
+            Object resp = doTheWork(args);
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setFaultBody(e.getCause());
+        }
+        return msg;
+    }
+
+    public Object doTheWork(Object[] args) throws InvocationTargetException {
+        if (operation.getName().equals("create")) {
+            return resourceManager.createResource(args[0]);
+            
+        } else if (operation.getName().equals("retrieve")) {
+            return resourceManager.retrieveResource((String)args[0]);
+            
+        } else if (operation.getName().equals("update")) {
+            return resourceManager.updateResource((String)args[0], args[1]);
+            
+        } else if (operation.getName().equals("delete")) {
+            resourceManager.deleteResource((String)args[0]);
+            return null;
+            
+        } else {
+            return null;
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/test/java/crud/provider/CRUDInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/host-embedded/src/test/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/test/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/test/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/test/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator Mon May  7 23:15:22 2007
@@ -1,2 +1,2 @@
 # Implementation class for the ExtensionActivator
-crud.CRUDModuleActivator
+crud.module.CRUDModuleActivator

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaComponentInfo.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaComponentInfo.java?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaComponentInfo.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaComponentInfo.java Mon May  7 23:15:22 2007
@@ -38,7 +38,6 @@
 import org.apache.tuscany.core.RuntimeComponentReference;
 import org.apache.tuscany.core.RuntimeComponentService;
 import org.apache.tuscany.core.RuntimeWire;
-import org.apache.tuscany.core.ScopedImplementationProvider;
 import org.apache.tuscany.core.component.ComponentContextImpl;
 import org.apache.tuscany.core.component.ComponentContextProvider;
 import org.apache.tuscany.core.component.ServiceReferenceImpl;
@@ -61,6 +60,7 @@
 import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceUtil;
 import org.apache.tuscany.invocation.ProxyFactory;
+import org.apache.tuscany.provider.ScopedImplementationProvider;
 import org.apache.tuscany.scope.InstanceWrapper;
 import org.apache.tuscany.scope.Scope;
 import org.apache.tuscany.scope.ScopeContainer;

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProvider.java?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProvider.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProvider.java Mon May  7 23:15:22 2007
@@ -23,14 +23,11 @@
 
 import org.apache.tuscany.assembly.ComponentService;
 import org.apache.tuscany.assembly.Service;
-import org.apache.tuscany.core.ImplementationActivator;
 import org.apache.tuscany.core.RuntimeComponent;
 import org.apache.tuscany.core.RuntimeComponentService;
-import org.apache.tuscany.core.ScopedImplementationProvider;
 import org.apache.tuscany.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.implementation.java.JavaImplementation;
 import org.apache.tuscany.implementation.java.context.JavaPropertyValueObjectFactory;
-import org.apache.tuscany.implementation.java.impl.JavaImplementationImpl;
 import org.apache.tuscany.implementation.java.impl.JavaResourceImpl;
 import org.apache.tuscany.implementation.java.injection.ResourceHost;
 import org.apache.tuscany.implementation.java.injection.ResourceObjectFactory;
@@ -38,9 +35,9 @@
 import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.invocation.Invoker;
 import org.apache.tuscany.invocation.ProxyFactory;
+import org.apache.tuscany.provider.ScopedImplementationProvider;
 import org.apache.tuscany.scope.InstanceWrapper;
 import org.apache.tuscany.scope.Scope;
-import org.apache.tuscany.scope.ScopeRegistry;
 import org.apache.tuscany.spi.ObjectFactory;
 import org.apache.tuscany.spi.component.TargetInvokerCreationException;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -49,18 +46,22 @@
 /**
  * @version $Rev$ $Date$
  */
-public class JavaImplementationProvider extends JavaImplementationImpl implements JavaImplementation,
-    ScopedImplementationProvider, ImplementationActivator {
+public class JavaImplementationProvider implements ScopedImplementationProvider {
     private JavaPropertyValueObjectFactory propertyValueObjectFactory;
     private DataBindingExtensionPoint dataBindingRegistry;
     private ProxyFactory proxyService;
     private WorkContext workContext;
+    private JavaImplementation implementation;
+    private JavaComponentInfo atomicComponent;
 
-    public JavaImplementationProvider(ProxyFactory proxyService,
+    public JavaImplementationProvider(
+                                      JavaImplementation implementation,
+                                      ProxyFactory proxyService,
                                       WorkContext workContext,
                                       DataBindingExtensionPoint dataBindingRegistry,
                                       JavaPropertyValueObjectFactory propertyValueObjectFactory) {
         super();
+        this.implementation = implementation;
         this.proxyService = proxyService;
         this.workContext = workContext;
         this.dataBindingRegistry = dataBindingRegistry;
@@ -69,12 +70,12 @@
 
     public void configure(RuntimeComponent component) {
         try {
-            PojoConfiguration configuration = new PojoConfiguration(this);
+            PojoConfiguration configuration = new PojoConfiguration(implementation);
             configuration.setProxyFactory(proxyService);
             configuration.setWorkContext(workContext);
             // FIXME: Group id to be removed
             configuration.setGroupId(URI.create("/"));
-            JavaComponentInfo atomicComponent = new JavaComponentInfo(component, configuration, dataBindingRegistry,
+            atomicComponent = new JavaComponentInfo(component, configuration, dataBindingRegistry,
                                                                       propertyValueObjectFactory);
 
             Scope scope = getScope();
@@ -85,26 +86,25 @@
                 // Check for conversational contract if conversational scope
                 if (scope == Scope.CONVERSATION) {
                     boolean hasConversationalContract = false;
-                    for (Service serviceDef : getServices()) {
+                    for (Service serviceDef : implementation.getServices()) {
                         if (serviceDef.getInterfaceContract().getInterface().isConversational()) {
                             hasConversationalContract = true;
                             break;
                         }
                     }
                     if (!hasConversationalContract) {
-                        String name = getJavaClass().getName();
+                        String name = implementation.getJavaClass().getName();
                         throw new NoConversationalContractException(name);
                     }
                 }
             }
-            component.setImplementationConfiguration(atomicComponent);
 
-            if (getConversationIDMember() != null) {
-                atomicComponent.addConversationIDFactory(getConversationIDMember());
+            if (implementation.getConversationIDMember() != null) {
+                atomicComponent.addConversationIDFactory(implementation.getConversationIDMember());
             }
 
             atomicComponent.configureProperties(component.getProperties());
-            handleResources(this, atomicComponent);
+            handleResources(implementation, atomicComponent);
         } catch (Exception e) {
             throw new IllegalStateException(e);
         }
@@ -137,12 +137,10 @@
     }
 
     public Object createInstance(RuntimeComponent component, ComponentService service) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         return atomicComponent.createInstance();
     }
 
     public Invoker createInvoker(RuntimeComponent component, RuntimeComponentService service, Operation operation) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         try {
             return new TargetInvokerInvoker(atomicComponent.createTargetInvoker(operation));
         } catch (TargetInvokerCreationException e) {
@@ -151,7 +149,6 @@
     }
 
     public Invoker createCallbackInvoker(RuntimeComponent component, Operation operation) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         try {
             return new TargetInvokerInvoker(atomicComponent.createTargetInvoker(operation));
         } catch (TargetInvokerCreationException e) {
@@ -163,30 +160,24 @@
         return service.getInterfaceContract();
     }
 
-    /**
-     * @see org.apache.tuscany.core.ImplementationProvider#getScope()
-     */
     public Scope getScope() {
-        return new Scope(getJavaScope().getScope());
+        return new Scope(implementation.getJavaScope().getScope());
     }
 
     public void start(RuntimeComponent component) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         atomicComponent.start();
     }
 
     public void stop(RuntimeComponent component) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         atomicComponent.stop();
     }
 
     public InstanceWrapper createInstanceWrapper(RuntimeComponent component) {
-        JavaComponentInfo atomicComponent = (JavaComponentInfo)component.getImplementationConfiguration();
         return atomicComponent.createInstanceWrapper();
     }
 
     public boolean isEagerInit(RuntimeComponent component) {
-        return isEagerInit();
+        return implementation.isEagerInit();
     }
 
 }

Added: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java?view=auto&rev=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java (added)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java Mon May  7 23:15:22 2007
@@ -0,0 +1,79 @@
+/*
+ * 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.implementation.java.invocation;
+
+import java.net.URI;
+
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.Service;
+import org.apache.tuscany.core.RuntimeComponent;
+import org.apache.tuscany.core.RuntimeComponentService;
+import org.apache.tuscany.core.scope.CompositeScopeContainer;
+import org.apache.tuscany.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.implementation.java.JavaImplementation;
+import org.apache.tuscany.implementation.java.context.JavaPropertyValueObjectFactory;
+import org.apache.tuscany.implementation.java.impl.JavaImplementationImpl;
+import org.apache.tuscany.implementation.java.impl.JavaResourceImpl;
+import org.apache.tuscany.implementation.java.injection.ResourceHost;
+import org.apache.tuscany.implementation.java.injection.ResourceObjectFactory;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.invocation.Interceptor;
+import org.apache.tuscany.invocation.Invoker;
+import org.apache.tuscany.invocation.ProxyFactory;
+import org.apache.tuscany.provider.ImplementationActivator;
+import org.apache.tuscany.provider.ImplementationProvider;
+import org.apache.tuscany.provider.ImplementationProviderFactory;
+import org.apache.tuscany.provider.ScopedImplementationProvider;
+import org.apache.tuscany.scope.InstanceWrapper;
+import org.apache.tuscany.scope.Scope;
+import org.apache.tuscany.scope.ScopeContainer;
+import org.apache.tuscany.scope.ScopeNotFoundException;
+import org.apache.tuscany.scope.ScopeRegistry;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.osoa.sca.ComponentContext;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JavaImplementationProviderFactory extends JavaImplementationImpl implements JavaImplementation, ImplementationProviderFactory {
+    private JavaPropertyValueObjectFactory propertyValueObjectFactory;
+    private DataBindingExtensionPoint dataBindingRegistry;
+    private ProxyFactory proxyService;
+    private WorkContext workContext;
+
+    public JavaImplementationProviderFactory(
+                                      ProxyFactory proxyService,
+                                      WorkContext workContext,
+                                      DataBindingExtensionPoint dataBindingRegistry,
+                                      JavaPropertyValueObjectFactory propertyValueObjectFactory) {
+        super();
+        this.proxyService = proxyService;
+        this.workContext = workContext;
+        this.dataBindingRegistry = dataBindingRegistry;
+        this.propertyValueObjectFactory = propertyValueObjectFactory;
+    }
+
+    public ImplementationProvider createImplementationProvider() {
+        return new JavaImplementationProvider(this, proxyService, workContext, dataBindingRegistry, propertyValueObjectFactory);
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/JavaImplementationProviderFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/RuntimeJavaImplementationFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/RuntimeJavaImplementationFactory.java?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/RuntimeJavaImplementationFactory.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/invocation/RuntimeJavaImplementationFactory.java Mon May  7 23:15:22 2007
@@ -48,7 +48,8 @@
 
     @Override
     public JavaImplementation createJavaImplementation() {
-        return new JavaImplementationProvider(proxyService, workContext, dataBindingRegistry,
+        return new JavaImplementationProviderFactory(
+                                              proxyService, workContext, dataBindingRegistry,
                                               propertyValueObjectFactory);
     }
 

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/spi/AbstractImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/spi/AbstractImplementation.java?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/spi/AbstractImplementation.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/implementation/spi/AbstractImplementation.java Mon May  7 23:15:22 2007
@@ -22,30 +22,18 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tuscany.assembly.ComponentReference;
 import org.apache.tuscany.assembly.ConstrainingType;
 import org.apache.tuscany.assembly.Implementation;
 import org.apache.tuscany.assembly.Property;
 import org.apache.tuscany.assembly.Reference;
 import org.apache.tuscany.assembly.Service;
-import org.apache.tuscany.core.ImplementationActivator;
-import org.apache.tuscany.core.ImplementationProvider;
-import org.apache.tuscany.core.RuntimeComponent;
-import org.apache.tuscany.core.RuntimeComponentReference;
-import org.apache.tuscany.core.RuntimeComponentService;
-import org.apache.tuscany.core.RuntimeWire;
-import org.apache.tuscany.core.invocation.JDKProxyService;
-import org.apache.tuscany.interfacedef.Interface;
-import org.apache.tuscany.interfacedef.InterfaceContract;
-import org.apache.tuscany.interfacedef.java.JavaInterface;
 import org.apache.tuscany.policy.Intent;
 import org.apache.tuscany.policy.PolicySet;
-import org.apache.tuscany.spi.component.WorkContextTunnel;
 
 /**
  * TODO: couldn't something like this class be provided by the runtime?
  */
-public abstract class AbstractImplementation implements Implementation, ImplementationProvider, ImplementationActivator {
+public abstract class AbstractImplementation implements Implementation {
 
     private List<Service> services = new ArrayList<Service>();
     private List<Reference> references = new ArrayList<Reference>();
@@ -108,38 +96,6 @@
     public void setUnresolved(boolean unresolved) {
         // TODO what is this for?
         this.unresolved = unresolved;
-    }
-
-    public void configure(RuntimeComponent component) {
-        // TODO what is this for?
-    }
-
-    public InterfaceContract getImplementationInterfaceContract(RuntimeComponentService service) {
-        // TODO what is this for?
-        return null;
-    }
-
-    public void start(RuntimeComponent component) {
-    }
-
-    public void stop(RuntimeComponent component) {
-    }
-
-    /**
-     * TODO: yuk yuk yuk
-     * Maybe RuntimeComponentReference could have a createProxy method?
-     */
-    protected Object createReferenceProxy(String name, RuntimeComponent component) {
-        for (ComponentReference reference : component.getReferences()) {
-            if (reference.getName().equals(name)) {
-                List<RuntimeWire> wireList = ((RuntimeComponentReference)reference).getRuntimeWires();
-                RuntimeWire wire = wireList.get(0);
-                JDKProxyService ps = new JDKProxyService(WorkContextTunnel.getThreadWorkContext(), null);
-                Interface iface = reference.getInterfaceContract().getInterface();
-                return ps.createProxy(((JavaInterface)iface).getJavaClass(), wire);
-            }
-        }
-        throw new IllegalStateException("reference " + name + " not found on component: " + component);
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java?view=diff&rev=536080&r1=536079&r2=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java Mon May  7 23:15:22 2007
@@ -18,29 +18,15 @@
  */
 package org.apache.tuscany.sca.implementation.script;
 
-import java.io.StringReader;
-
-import javax.script.Invocable;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
-
-import org.apache.tuscany.assembly.Property;
-import org.apache.tuscany.assembly.Reference;
-import org.apache.tuscany.core.RuntimeComponent;
-import org.apache.tuscany.core.RuntimeComponentService;
 import org.apache.tuscany.implementation.spi.AbstractImplementation;
 import org.apache.tuscany.implementation.spi.PropertyValueObjectFactory;
-import org.apache.tuscany.interfacedef.Operation;
-import org.apache.tuscany.invocation.Invoker;
-import org.apache.tuscany.sca.implementation.script.engines.TuscanyJRubyScriptEngine;
-import org.apache.tuscany.spi.ObjectCreationException;
-import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.provider.ImplementationProvider;
+import org.apache.tuscany.provider.ImplementationProviderFactory;
 
 /**
  * Represents a Script implementation.
  */
-public class ScriptImplementation extends AbstractImplementation {
+public class ScriptImplementation extends AbstractImplementation implements ImplementationProviderFactory {
 
     protected String scriptName;
     protected String scriptSrc;
@@ -48,8 +34,6 @@
 
     protected PropertyValueObjectFactory propertyFactory;
 
-    protected ScriptEngine scriptEngine;
-
     public ScriptImplementation(String scriptName, String scriptLanguage, String scriptSrc, PropertyValueObjectFactory propertyFactory) {
         this.scriptName = scriptName;
         this.scriptLanguage = scriptLanguage;
@@ -73,52 +57,7 @@
         this.scriptSrc = scriptSrc;
     }
 
-    public Invoker createInvoker(RuntimeComponent component, RuntimeComponentService service, Operation operation) {
-        return new ScriptInvoker(this, operation.getName());
-    }
-
-    public Invoker createCallbackInvoker(RuntimeComponent component, Operation operation) {
-        return new ScriptInvoker(this, operation.getName());
-    }
-    
-    public void start(RuntimeComponent component) {
-        try {
-            scriptEngine = getScriptEngineByExtension(getScriptLanguage());
-            if (scriptEngine == null) {
-                throw new ObjectCreationException("no script engine found for language: " + getScriptLanguage());
-            }
-            if (!(scriptEngine instanceof Invocable)) {
-                throw new ObjectCreationException("script engine does not support Invocable: " + scriptEngine);
-            }
-            
-            for (Reference reference : getReferences()) {
-                Object referenceProxy = createReferenceProxy(reference.getName(), component);
-                scriptEngine.put(reference.getName(), referenceProxy);
-            }
-
-            for (Property property : getProperties()) {
-                ObjectFactory<?> propertyValueFactory = propertyFactory.createValueFactory(property);
-                if ( propertyValueFactory != null) {
-                    scriptEngine.put(property.getName(), propertyValueFactory.getInstance());
-                }
-            }
-            
-            scriptEngine.eval(new StringReader(getScriptSrc()));
-
-        } catch (ScriptException e) {
-            throw new ObjectCreationException(e);
-        }
-    }
-
-    /**
-     * Hack for now to work around a problem with the JRuby script engine
-     */
-    private ScriptEngine getScriptEngineByExtension(String scriptExtn) {
-        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
-        if ("rb".equals(scriptExtn)) {
-            return new TuscanyJRubyScriptEngine();
-        } else {
-            return scriptEngineManager.getEngineByExtension(scriptExtn);
-        }
+    public ImplementationProvider createImplementationProvider() {
+        return new ScriptImplementationProvider(this);
     }
 }

Added: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java?view=auto&rev=536080
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java (added)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java Mon May  7 23:15:22 2007
@@ -0,0 +1,135 @@
+/*
+ * 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.implementation.script;
+
+import java.io.StringReader;
+import java.util.List;
+
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.core.RuntimeComponent;
+import org.apache.tuscany.core.RuntimeComponentReference;
+import org.apache.tuscany.core.RuntimeComponentService;
+import org.apache.tuscany.core.RuntimeWire;
+import org.apache.tuscany.core.invocation.JDKProxyService;
+import org.apache.tuscany.interfacedef.Interface;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.invocation.Invoker;
+import org.apache.tuscany.provider.ImplementationProvider;
+import org.apache.tuscany.sca.implementation.script.engines.TuscanyJRubyScriptEngine;
+import org.apache.tuscany.spi.ObjectCreationException;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.component.WorkContextTunnel;
+
+/**
+ * Represents a Script implementation.
+ */
+public class ScriptImplementationProvider implements ImplementationProvider {
+
+    protected ScriptImplementation implementation;
+    protected ScriptEngine scriptEngine;
+
+    public ScriptImplementationProvider(ScriptImplementation implementation) {
+        this.implementation = implementation;
+    }
+
+    public Invoker createInvoker(RuntimeComponent component, RuntimeComponentService service, Operation operation) {
+        return new ScriptInvoker(this, operation.getName());
+    }
+
+    public Invoker createCallbackInvoker(RuntimeComponent component, Operation operation) {
+        return new ScriptInvoker(this, operation.getName());
+    }
+    
+    public void start(RuntimeComponent component) {
+        try {
+            scriptEngine = getScriptEngineByExtension(implementation.getScriptLanguage());
+            if (scriptEngine == null) {
+                throw new ObjectCreationException("no script engine found for language: " + implementation.getScriptLanguage());
+            }
+            if (!(scriptEngine instanceof Invocable)) {
+                throw new ObjectCreationException("script engine does not support Invocable: " + scriptEngine);
+            }
+            
+            for (Reference reference : implementation.getReferences()) {
+                Object referenceProxy = createReferenceProxy(reference.getName(), component);
+                scriptEngine.put(reference.getName(), referenceProxy);
+            }
+
+            for (Property property : implementation.getProperties()) {
+                ObjectFactory<?> propertyValueFactory = implementation.propertyFactory.createValueFactory(property);
+                if ( propertyValueFactory != null) {
+                    scriptEngine.put(property.getName(), propertyValueFactory.getInstance());
+                }
+            }
+            
+            scriptEngine.eval(new StringReader(implementation.getScriptSrc()));
+
+        } catch (ScriptException e) {
+            throw new ObjectCreationException(e);
+        }
+    }
+    
+    public void stop(RuntimeComponent component) {
+    }
+    
+    public void configure(RuntimeComponent component) {
+    }
+    
+    public InterfaceContract getImplementationInterfaceContract(RuntimeComponentService service) {
+        return null;
+    }
+
+    /**
+     * TODO: yuk yuk yuk
+     * Maybe RuntimeComponentReference could have a createProxy method?
+     */
+    private Object createReferenceProxy(String name, RuntimeComponent component) {
+        for (ComponentReference reference : component.getReferences()) {
+            if (reference.getName().equals(name)) {
+                List<RuntimeWire> wireList = ((RuntimeComponentReference)reference).getRuntimeWires();
+                RuntimeWire wire = wireList.get(0);
+                JDKProxyService ps = new JDKProxyService(WorkContextTunnel.getThreadWorkContext(), null);
+                Interface iface = reference.getInterfaceContract().getInterface();
+                return ps.createProxy(((JavaInterface)iface).getJavaClass(), wire);
+            }
+        }
+        throw new IllegalStateException("reference " + name + " not found on component: " + component);
+    }
+
+    /**
+     * Hack for now to work around a problem with the JRuby script engine
+     */
+    private ScriptEngine getScriptEngineByExtension(String scriptExtn) {
+        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
+        if ("rb".equals(scriptExtn)) {
+            return new TuscanyJRubyScriptEngine();
+        } else {
+            return scriptEngineManager.getEngineByExtension(scriptExtn);
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementationProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=536080&r1=536079&r2=536080
==============================================================================
--- 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 Mon May  7 23:15:22 2007
@@ -32,22 +32,22 @@
  */
 public class ScriptInvoker implements Invoker {
 
-    protected ScriptImplementation impl;
+    protected ScriptImplementationProvider provider;
     protected String operationName;
 
     /**
      * TODO: passing in the impl is a bit of a hack to get at scriptEngine as thats all this uses
      * but its not created till the start method which is called after the invokers are created 
      */
-    public ScriptInvoker(ScriptImplementation impl, String operationName) {
-        this.impl = impl;
+    public ScriptInvoker(ScriptImplementationProvider provider, String operationName) {
+        this.provider = provider;
         this.operationName = operationName;
     }
 
     private Object doInvoke(Object[] objects) throws InvocationTargetException {
         try {
 
-            return ((Invocable)impl.scriptEngine).invokeFunction(operationName, objects);
+            return ((Invocable)provider.scriptEngine).invokeFunction(operationName, objects);
 
         } catch (ScriptException e) {
             throw new InvocationTargetException(e);



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org