You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2007/06/05 18:00:25 UTC

svn commit: r544528 - in /incubator/tuscany/java/sca: modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ samples/helloworld-ws-reference/src/main/java/helloworld/ samples/helloworld-ws-reference/src/main/resources/ samples/hellowor...

Author: antelder
Date: Tue Jun  5 09:00:23 2007
New Revision: 544528

URL: http://svn.apache.org/viewvc?view=rev&rev=544528
Log:
Change implementation-crud sample to use extension-helper instead of core spi (hoping that may prompt some review comments on if the extension-helper needs changes)

Added:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java   (with props)
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java   (with props)
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator
      - copied, changed from r544134, incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
Removed:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationFactory.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/DefaultCRUDImplementationFactory.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/impl/
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/module/
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/provider/
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
Modified:
    incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java
    incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java
    incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java
    incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite
    incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite
    incubator/tuscany/java/sca/samples/implementation-crud/pom.xml

Modified: incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java (original)
+++ incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java Tue Jun  5 09:00:23 2007
@@ -68,7 +68,7 @@
 
             Class<Implementation> implClass = implementationActivator.getImplementationClass();
             QName scdlQName = implementationActivator.getSCDLQName();
-            staxProcessors.addArtifactProcessor(new SCDLProcessor(assemblyFactory, scdlQName, implClass));
+            staxProcessors.addArtifactProcessor(new SCDLProcessor(assemblyFactory, scdlQName, implClass, registry, factories));
 
             if (implementationActivator.getImplementationClass() != null && providerFactories != null) {
                 addImplementationProvider(implementationActivator, providerFactories);

Modified: incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java Tue Jun  5 09:00:23 2007
@@ -21,10 +21,13 @@
 
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -37,6 +40,8 @@
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.spi.utils.AbstractStAXArtifactProcessor;
 import org.apache.tuscany.sca.spi.utils.DynamicImplementation;
 
@@ -48,14 +53,18 @@
 
     protected QName scdlQName;
     protected Class<Implementation> implementationClass;
+    protected ExtensionPointRegistry registry;
+    protected ModelFactoryExtensionPoint factories;
 
     protected Map<String, Method> attributeSetters;
     protected Method elementTextSetter;
 
-    public SCDLProcessor(AssemblyFactory assemblyFactory, QName scdlQName, Class<Implementation> implementationClass) {
+    public SCDLProcessor(AssemblyFactory assemblyFactory, QName scdlQName, Class<Implementation> implementationClass, ExtensionPointRegistry registry, ModelFactoryExtensionPoint factories) {
         super(assemblyFactory);
         this.scdlQName = scdlQName;
         this.implementationClass = implementationClass;
+        this.registry = registry;
+        this.factories = factories;
         initAttributes();
     }
 
@@ -72,6 +81,23 @@
         }
     }
 
+    private Object[] getImplConstrArgs() {
+        Constructor[] cs = implementationClass.getConstructors();
+        if (cs.length != 1) {
+            throw new IllegalArgumentException("Implementation class must have a single constructor: "+ implementationClass.getName());
+        }
+        List args = new ArrayList();
+        for (Class c : cs[0].getParameterTypes()) {
+            Object o = factories.getFactory(c);
+            if (o == null) {
+                o = registry.getExtensionPoint(c);
+            }
+            args.add(o);
+        }
+        return args.toArray();
+    }
+
+    
     public QName getArtifactType() {
         return scdlQName;
     }
@@ -83,7 +109,7 @@
     public Implementation read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
         Implementation impl;
         try {
-            impl = implementationClass.newInstance();
+            impl = (Implementation)implementationClass.getConstructors()[0].newInstance(getImplConstrArgs());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }

Modified: incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java (original)
+++ incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java Tue Jun  5 09:00:23 2007
@@ -30,8 +30,10 @@
         SCADomain scaDomain = SCADomain.newInstance("helloworldwsclient.composite");
         HelloWorldService helloWorldService = scaDomain.getService(HelloWorldService.class, "HelloWorldServiceComponent");
 
-        String value = helloWorldService.getGreetings("World");
-        System.out.println(value);
+//        String value = helloWorldService.getGreetings("World");
+//        System.out.println(value);
+        
+        Thread.sleep(900000);
 
         scaDomain.close();
     }

Modified: incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite (original)
+++ incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite Tue Jun  5 09:00:23 2007
@@ -22,13 +22,18 @@
 	xmlns:hw="http://helloworld"
 	name="helloworldwsclient">
     
+    <service name="HelloWorldService" promote="HelloWorldServiceComponent">
+        <interface.java interface="helloworld.HelloWorldService" />
+        <binding.console/>
+    </service>
+
     <component name="HelloWorldServiceComponent">
       <implementation.java class="helloworld.HelloWorldServiceComponent"/>
     </component>
 
     <reference name="HelloWorldService" promote="HelloWorldServiceComponent/helloWorldService">
         <interface.java interface="helloworld.HelloWorldService" />
-        <binding.ws wsdlElement="http://helloworld#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/>
+        <binding.console/>
     </reference>
 
 </composite>

Modified: incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite (original)
+++ incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite Tue Jun  5 09:00:23 2007
@@ -22,11 +22,12 @@
 	xmlns:hw="http://helloworld"
     name="helloworldws">
 
-    <component name="HelloWorldServiceComponent">
-	    <service name="HelloWorldService">
+	    <service name="HelloWorldService" promote="HelloWorldServiceComponent">
 	        <interface.wsdl interface="http://helloworld#wsdl.interface(HelloWorld)" />
 	        <binding.ws />
 	    </service>
+
+    <component name="HelloWorldServiceComponent">
         <implementation.java class="helloworld.HelloWorldImpl" />
     </component>
 

Modified: incubator/tuscany/java/sca/samples/implementation-crud/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/pom.xml?view=diff&rev=544528&r1=544527&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/pom.xml (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/pom.xml Tue Jun  5 09:00:23 2007
@@ -36,15 +36,10 @@
     </repositories>
 
     <dependencies>
-        <dependency>
-            <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>sca-api</artifactId>
-            <version>1.0-incubating-SNAPSHOT</version>
-        </dependency>        
 
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>tuscany-host-embedded</artifactId>
+            <artifactId>tuscany-extension-helper</artifactId>
             <version>1.0-incubating-SNAPSHOT</version>
         </dependency>
 
@@ -52,7 +47,7 @@
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-interface-java-xml</artifactId>
             <version>1.0-incubating-SNAPSHOT</version>
-        </dependency>        
+        </dependency>
 
         <dependency>
             <groupId>junit</groupId>

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java?view=auto&rev=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java Tue Jun  5 09:00:23 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;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.sca.interfacedef.java.introspect.ExtensibleJavaInterfaceIntrospector;
+import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospector;
+import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospectorExtensionPoint;
+import org.apache.tuscany.sca.spi.utils.AbstractImplementation;
+
+
+/**
+ * The model representing a sample CRUD implementation in an SCA assembly model.
+ */
+public class CRUDImplementation extends AbstractImplementation {
+
+    private Service crudService;
+    private String directory;
+
+    public CRUDImplementation(AssemblyFactory assemblyFactory,
+                              JavaInterfaceIntrospectorExtensionPoint visitors) {
+
+            // CRUD implementation always provide a single service exposing
+            // the CRUD interface, and have no references and properties
+            crudService = assemblyFactory.createService();
+            crudService.setName("CRUD");
+
+            JavaInterfaceFactory javaFactory = new DefaultJavaInterfaceFactory();
+            JavaInterfaceIntrospector introspector = new ExtensibleJavaInterfaceIntrospector(javaFactory, visitors);
+
+            JavaInterface javaInterface;
+            try {
+                javaInterface = introspector.introspect(CRUD.class);
+            } catch (InvalidInterfaceException e) {
+                throw new IllegalArgumentException(e);
+            }
+            JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
+            interfaceContract.setInterface(javaInterface);
+            crudService.setInterfaceContract(interfaceContract);
+    }
+    
+    public String getDirectory() {
+        return directory;
+    }
+
+    public void setDirectory(String directory) {
+        this.directory = directory;
+    }
+
+    public List<Service> getServices() {
+        // The sample CRUD implementation provides a single fixed CRUD service
+        return Collections.singletonList(crudService);
+    }
+}

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java?view=auto&rev=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java Tue Jun  5 09:00:23 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;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.spi.ImplementationActivator;
+import org.apache.tuscany.sca.spi.InvokerFactory;
+
+import crud.backend.ResourceManager;
+
+public class CRUDImplementationActivator implements ImplementationActivator<CRUDImplementation> {
+
+    private static final QName IMPLEMENTATION_CRUD = new QName("http://crud", "implementation.crud");
+    
+    public InvokerFactory createInvokerFactory(RuntimeComponent rc, final CRUDImplementation implementation) {
+        return new InvokerFactory() {
+            public Invoker createInvoker(Operation operation) {
+                return new CRUDInvoker(operation, new ResourceManager(implementation.getDirectory()));
+            }};
+    }
+
+    public Class<CRUDImplementation> getImplementationClass() {
+        return CRUDImplementation.class;
+    }
+
+    public QName getSCDLQName() {
+        return IMPLEMENTATION_CRUD;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java?view=auto&rev=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java Tue Jun  5 09:00:23 2007
@@ -0,0 +1,77 @@
+/*
+ * 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;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.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.
+ */
+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/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator (from r544134, incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator?view=diff&rev=544528&p1=incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator&r1=544134&p2=incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator&r2=544528
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator Tue Jun  5 09:00:23 2007
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License. 
 # Implementation class for the ExtensionActivator
-crud.module.CRUDModuleActivator
+crud.CRUDImplementationActivator



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


Re: Build break, was: svn commit: r544528 - in /incubator/tuscany/java/sca: modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ samples/helloworld-ws-reference/src/main/java/helloworld/ samples/helloworld-ws-reference/src/main/resources/ samples/hellowor...

Posted by Simon Nash <na...@hursley.ibm.com>.
+1 for reverting implementation-crud back to the official SPIs and
adding another sample for the simplified extension layer.

   Simon

Jean-Sebastien Delfino wrote:

> Ant,
> 
> This commit introduced breaking changes to the helloworld-ws-reference 
> and helloworld-ws-service samples, using some kind of <binding.console>. 
> Probably an oversight :)
> 
> More important, I think we should revert to the official Tuscany SPIs in 
> the implementation-crud sample, as it is our main sample to show people 
> how to develop extensions using these SPIs.
> 
> I'll be happy to have another new sample showing how to use the new 
> simplified extension layer, as I think that this new layer will be very 
> useful.
> 
> This will avoid confusion, and will also allow people to compare and 
> choose between the two layers and ways to develop extensions.
> 
> Thanks...
> 
> antelder@apache.org wrote:
> 
>> Author: antelder
>> Date: Tue Jun  5 09:00:23 2007
>> New Revision: 544528
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=544528
>> Log:
>> Change implementation-crud sample to use extension-helper instead of 
>> core spi (hoping that may prompt some review comments on if the 
>> extension-helper needs changes)
>>
>> (cut)
>>     



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


Build break, was: svn commit: r544528 - in /incubator/tuscany/java/sca: modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ samples/helloworld-ws-reference/src/main/java/helloworld/ samples/helloworld-ws-reference/src/main/resources/ samples/hellowor...

Posted by Jean-Sebastien Delfino <js...@apache.org>.
Ant,

This commit introduced breaking changes to the helloworld-ws-reference 
and helloworld-ws-service samples, using some kind of <binding.console>. 
Probably an oversight :)

More important, I think we should revert to the official Tuscany SPIs in 
the implementation-crud sample, as it is our main sample to show people 
how to develop extensions using these SPIs.

I'll be happy to have another new sample showing how to use the new 
simplified extension layer, as I think that this new layer will be very 
useful.

This will avoid confusion, and will also allow people to compare and 
choose between the two layers and ways to develop extensions.

Thanks...

antelder@apache.org wrote:
> Author: antelder
> Date: Tue Jun  5 09:00:23 2007
> New Revision: 544528
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=544528
> Log:
> Change implementation-crud sample to use extension-helper instead of core spi (hoping that may prompt some review comments on if the extension-helper needs changes)
>
> Added:
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java   (with props)
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java   (with props)
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator
>       - copied, changed from r544134, incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
> Removed:
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationFactory.java
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/DefaultCRUDImplementationFactory.java
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/impl/
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/module/
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/provider/
>     incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
> Modified:
>     incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java
>     incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java
>     incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java
>     incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite
>     incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite
>     incubator/tuscany/java/sca/samples/implementation-crud/pom.xml
>
> Modified: incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java (original)
> +++ incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/ImplementationsActivator.java Tue Jun  5 09:00:23 2007
> @@ -68,7 +68,7 @@
>  
>              Class<Implementation> implClass = implementationActivator.getImplementationClass();
>              QName scdlQName = implementationActivator.getSCDLQName();
> -            staxProcessors.addArtifactProcessor(new SCDLProcessor(assemblyFactory, scdlQName, implClass));
> +            staxProcessors.addArtifactProcessor(new SCDLProcessor(assemblyFactory, scdlQName, implClass, registry, factories));
>  
>              if (implementationActivator.getImplementationClass() != null && providerFactories != null) {
>                  addImplementationProvider(implementationActivator, providerFactories);
>
> Modified: incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java (original)
> +++ incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/spi/impl/SCDLProcessor.java Tue Jun  5 09:00:23 2007
> @@ -21,10 +21,13 @@
>  
>  import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
>  
> +import java.lang.reflect.Constructor;
>  import java.lang.reflect.Method;
> +import java.util.ArrayList;
>  import java.util.Arrays;
>  import java.util.HashMap;
>  import java.util.HashSet;
> +import java.util.List;
>  import java.util.Map;
>  import java.util.Set;
>  
> @@ -37,6 +40,8 @@
>  import org.apache.tuscany.sca.assembly.Implementation;
>  import org.apache.tuscany.sca.contribution.service.ContributionReadException;
>  import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
> +import org.apache.tuscany.sca.core.ExtensionPointRegistry;
> +import org.apache.tuscany.sca.core.ModelFactoryExtensionPoint;
>  import org.apache.tuscany.sca.spi.utils.AbstractStAXArtifactProcessor;
>  import org.apache.tuscany.sca.spi.utils.DynamicImplementation;
>  
> @@ -48,14 +53,18 @@
>  
>      protected QName scdlQName;
>      protected Class<Implementation> implementationClass;
> +    protected ExtensionPointRegistry registry;
> +    protected ModelFactoryExtensionPoint factories;
>  
>      protected Map<String, Method> attributeSetters;
>      protected Method elementTextSetter;
>  
> -    public SCDLProcessor(AssemblyFactory assemblyFactory, QName scdlQName, Class<Implementation> implementationClass) {
> +    public SCDLProcessor(AssemblyFactory assemblyFactory, QName scdlQName, Class<Implementation> implementationClass, ExtensionPointRegistry registry, ModelFactoryExtensionPoint factories) {
>          super(assemblyFactory);
>          this.scdlQName = scdlQName;
>          this.implementationClass = implementationClass;
> +        this.registry = registry;
> +        this.factories = factories;
>          initAttributes();
>      }
>  
> @@ -72,6 +81,23 @@
>          }
>      }
>  
> +    private Object[] getImplConstrArgs() {
> +        Constructor[] cs = implementationClass.getConstructors();
> +        if (cs.length != 1) {
> +            throw new IllegalArgumentException("Implementation class must have a single constructor: "+ implementationClass.getName());
> +        }
> +        List args = new ArrayList();
> +        for (Class c : cs[0].getParameterTypes()) {
> +            Object o = factories.getFactory(c);
> +            if (o == null) {
> +                o = registry.getExtensionPoint(c);
> +            }
> +            args.add(o);
> +        }
> +        return args.toArray();
> +    }
> +
> +    
>      public QName getArtifactType() {
>          return scdlQName;
>      }
> @@ -83,7 +109,7 @@
>      public Implementation read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
>          Implementation impl;
>          try {
> -            impl = implementationClass.newInstance();
> +            impl = (Implementation)implementationClass.getConstructors()[0].newInstance(getImplConstrArgs());
>          } catch (Exception e) {
>              throw new RuntimeException(e);
>          }
>
> Modified: incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java (original)
> +++ incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/java/helloworld/HelloWorldClient.java Tue Jun  5 09:00:23 2007
> @@ -30,8 +30,10 @@
>          SCADomain scaDomain = SCADomain.newInstance("helloworldwsclient.composite");
>          HelloWorldService helloWorldService = scaDomain.getService(HelloWorldService.class, "HelloWorldServiceComponent");
>  
> -        String value = helloWorldService.getGreetings("World");
> -        System.out.println(value);
> +//        String value = helloWorldService.getGreetings("World");
> +//        System.out.println(value);
> +        
> +        Thread.sleep(900000);
>  
>          scaDomain.close();
>      }
>
> Modified: incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite (original)
> +++ incubator/tuscany/java/sca/samples/helloworld-ws-reference/src/main/resources/helloworldwsclient.composite Tue Jun  5 09:00:23 2007
> @@ -22,13 +22,18 @@
>  	xmlns:hw="http://helloworld"
>  	name="helloworldwsclient">
>      
> +    <service name="HelloWorldService" promote="HelloWorldServiceComponent">
> +        <interface.java interface="helloworld.HelloWorldService" />
> +        <binding.console/>
> +    </service>
> +
>      <component name="HelloWorldServiceComponent">
>        <implementation.java class="helloworld.HelloWorldServiceComponent"/>
>      </component>
>  
>      <reference name="HelloWorldService" promote="HelloWorldServiceComponent/helloWorldService">
>          <interface.java interface="helloworld.HelloWorldService" />
> -        <binding.ws wsdlElement="http://helloworld#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/>
> +        <binding.console/>
>      </reference>
>  
>  </composite>
>
> Modified: incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite (original)
> +++ incubator/tuscany/java/sca/samples/helloworld-ws-service/src/main/resources/helloworldws.composite Tue Jun  5 09:00:23 2007
> @@ -22,11 +22,12 @@
>  	xmlns:hw="http://helloworld"
>      name="helloworldws">
>  
> -    <component name="HelloWorldServiceComponent">
> -	    <service name="HelloWorldService">
> +	    <service name="HelloWorldService" promote="HelloWorldServiceComponent">
>  	        <interface.wsdl interface="http://helloworld#wsdl.interface(HelloWorld)" />
>  	        <binding.ws />
>  	    </service>
> +
> +    <component name="HelloWorldServiceComponent">
>          <implementation.java class="helloworld.HelloWorldImpl" />
>      </component>
>  
>
> Modified: incubator/tuscany/java/sca/samples/implementation-crud/pom.xml
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/pom.xml?view=diff&rev=544528&r1=544527&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/implementation-crud/pom.xml (original)
> +++ incubator/tuscany/java/sca/samples/implementation-crud/pom.xml Tue Jun  5 09:00:23 2007
> @@ -36,15 +36,10 @@
>      </repositories>
>  
>      <dependencies>
> -        <dependency>
> -            <groupId>org.apache.tuscany.sca</groupId>
> -            <artifactId>sca-api</artifactId>
> -            <version>1.0-incubating-SNAPSHOT</version>
> -        </dependency>        
>  
>          <dependency>
>              <groupId>org.apache.tuscany.sca</groupId>
> -            <artifactId>tuscany-host-embedded</artifactId>
> +            <artifactId>tuscany-extension-helper</artifactId>
>              <version>1.0-incubating-SNAPSHOT</version>
>          </dependency>
>  
> @@ -52,7 +47,7 @@
>              <groupId>org.apache.tuscany.sca</groupId>
>              <artifactId>tuscany-interface-java-xml</artifactId>
>              <version>1.0-incubating-SNAPSHOT</version>
> -        </dependency>        
> +        </dependency>
>  
>          <dependency>
>              <groupId>junit</groupId>
>
> Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java?view=auto&rev=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java (added)
> +++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java Tue Jun  5 09:00:23 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;
> +
> +import java.util.Collections;
> +import java.util.List;
> +
> +import org.apache.tuscany.sca.assembly.AssemblyFactory;
> +import org.apache.tuscany.sca.assembly.Service;
> +import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
> +import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
> +import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
> +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
> +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
> +import org.apache.tuscany.sca.interfacedef.java.introspect.ExtensibleJavaInterfaceIntrospector;
> +import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospector;
> +import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospectorExtensionPoint;
> +import org.apache.tuscany.sca.spi.utils.AbstractImplementation;
> +
> +
> +/**
> + * The model representing a sample CRUD implementation in an SCA assembly model.
> + */
> +public class CRUDImplementation extends AbstractImplementation {
> +
> +    private Service crudService;
> +    private String directory;
> +
> +    public CRUDImplementation(AssemblyFactory assemblyFactory,
> +                              JavaInterfaceIntrospectorExtensionPoint visitors) {
> +
> +            // CRUD implementation always provide a single service exposing
> +            // the CRUD interface, and have no references and properties
> +            crudService = assemblyFactory.createService();
> +            crudService.setName("CRUD");
> +
> +            JavaInterfaceFactory javaFactory = new DefaultJavaInterfaceFactory();
> +            JavaInterfaceIntrospector introspector = new ExtensibleJavaInterfaceIntrospector(javaFactory, visitors);
> +
> +            JavaInterface javaInterface;
> +            try {
> +                javaInterface = introspector.introspect(CRUD.class);
> +            } catch (InvalidInterfaceException e) {
> +                throw new IllegalArgumentException(e);
> +            }
> +            JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
> +            interfaceContract.setInterface(javaInterface);
> +            crudService.setInterfaceContract(interfaceContract);
> +    }
> +    
> +    public String getDirectory() {
> +        return directory;
> +    }
> +
> +    public void setDirectory(String directory) {
> +        this.directory = directory;
> +    }
> +
> +    public List<Service> getServices() {
> +        // The sample CRUD implementation provides a single fixed CRUD service
> +        return Collections.singletonList(crudService);
> +    }
> +}
>
> Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java?view=auto&rev=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java (added)
> +++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java Tue Jun  5 09:00:23 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;
> +
> +import javax.xml.namespace.QName;
> +
> +import org.apache.tuscany.sca.interfacedef.Operation;
> +import org.apache.tuscany.sca.invocation.Invoker;
> +import org.apache.tuscany.sca.runtime.RuntimeComponent;
> +import org.apache.tuscany.sca.spi.ImplementationActivator;
> +import org.apache.tuscany.sca.spi.InvokerFactory;
> +
> +import crud.backend.ResourceManager;
> +
> +public class CRUDImplementationActivator implements ImplementationActivator<CRUDImplementation> {
> +
> +    private static final QName IMPLEMENTATION_CRUD = new QName("http://crud", "implementation.crud");
> +    
> +    public InvokerFactory createInvokerFactory(RuntimeComponent rc, final CRUDImplementation implementation) {
> +        return new InvokerFactory() {
> +            public Invoker createInvoker(Operation operation) {
> +                return new CRUDInvoker(operation, new ResourceManager(implementation.getDirectory()));
> +            }};
> +    }
> +
> +    public Class<CRUDImplementation> getImplementationClass() {
> +        return CRUDImplementation.class;
> +    }
> +
> +    public QName getSCDLQName() {
> +        return IMPLEMENTATION_CRUD;
> +    }
> +
> +}
>
> Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationActivator.java
> ------------------------------------------------------------------------------
>     svn:keywords = Rev Date
>
> Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java?view=auto&rev=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java (added)
> +++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java Tue Jun  5 09:00:23 2007
> @@ -0,0 +1,77 @@
> +/*
> + * 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;
> +
> +import java.lang.reflect.InvocationTargetException;
> +
> +import org.apache.tuscany.sca.interfacedef.Operation;
> +import org.apache.tuscany.sca.invocation.Invoker;
> +import org.apache.tuscany.sca.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.
> + */
> +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/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java
> ------------------------------------------------------------------------------
>     svn:keywords = Rev Date
>
> Copied: incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator (from r544134, incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator)
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator?view=diff&rev=544528&p1=incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator&r1=544134&p2=incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator&r2=544528
> ==============================================================================
> --- incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator (original)
> +++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/META-INF/services/org.apache.tuscany.sca.spi.ImplementationActivator Tue Jun  5 09:00:23 2007
> @@ -15,4 +15,4 @@
>  # specific language governing permissions and limitations
>  # under the License. 
>  # Implementation class for the ExtensionActivator
> -crud.module.CRUDModuleActivator
> +crud.CRUDImplementationActivator
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>
>
>   


-- 
Jean-Sebastien


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