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/03 05:29:39 UTC

svn commit: r534699 - in /incubator/tuscany/java/sca/samples: binding-echo/src/main/java/echo/ implementation-crud/src/main/java/crud/

Author: jsdelfino
Date: Wed May  2 20:29:38 2007
New Revision: 534699

URL: http://svn.apache.org/viewvc?view=rev&rev=534699
Log:
Separating the pure model part from the runtime provider part in the crud and echo binding samples.

Added:
    incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java   (with props)
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java   (with props)
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDInvoker.java   (with props)
Removed:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java
Modified:
    incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/DefaultEchoBindingFactory.java
    incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingImpl.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java

Modified: incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/DefaultEchoBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/DefaultEchoBindingFactory.java?view=diff&rev=534699&r1=534698&r2=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/DefaultEchoBindingFactory.java (original)
+++ incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/DefaultEchoBindingFactory.java Wed May  2 20:29:38 2007
@@ -27,7 +27,7 @@
 public class DefaultEchoBindingFactory implements EchoBindingFactory {
 
     public EchoBinding createEchoBinding() {
-        return new EchoBindingImpl();
+        return new EchoBindingProvider();
     }
 
 }

Modified: incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingImpl.java?view=diff&rev=534699&r1=534698&r2=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingImpl.java (original)
+++ incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingImpl.java Wed May  2 20:29:38 2007
@@ -19,65 +19,59 @@
 
 package echo;
 
-import java.net.URI;
+import java.util.Collections;
+import java.util.List;
 
-import org.apache.tuscany.assembly.Component;
-import org.apache.tuscany.assembly.ComponentReference;
-import org.apache.tuscany.assembly.ComponentService;
-import org.apache.tuscany.assembly.impl.BindingImpl;
-import org.apache.tuscany.core.ReferenceBindingActivator;
-import org.apache.tuscany.core.ReferenceBindingProvider;
-import org.apache.tuscany.core.ServiceBindingActivator;
-import org.apache.tuscany.core.ServiceBindingProvider;
-import org.apache.tuscany.interfacedef.InterfaceContract;
-import org.apache.tuscany.interfacedef.Operation;
-import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.policy.Intent;
+import org.apache.tuscany.policy.PolicySet;
 
 /**
  * Implementation of the Echo binding model.
  *
  * @version $Rev$ $Date$
  */
-public class EchoBindingImpl extends BindingImpl implements EchoBinding, ReferenceBindingActivator,
-    ReferenceBindingProvider, ServiceBindingActivator, ServiceBindingProvider {
+public class EchoBindingImpl implements EchoBinding {
+    
+    private String name;
+    private String uri;
 
-    public Interceptor createInterceptor(Component component,
-                                         ComponentReference reference,
-                                         Operation operation,
-                                         boolean isCallback) {
-        if (isCallback) {
-            throw new UnsupportedOperationException();
-        } else {
-            return new EchoBindingInterceptor();
-        }
+    public String getName() {
+        return name;
     }
 
-    public InterfaceContract getBindingInterfaceContract(ComponentReference reference) {
-        return reference.getInterfaceContract();
+    public String getURI() {
+        return uri;
     }
 
-    public void start(Component component, ComponentReference reference) {
+    public void setName(String name) {
+        this.name = name;
     }
 
-    public void stop(Component component, ComponentReference reference) {
+    public void setURI(String uri) {
+        this.uri = uri;
     }
 
-    public InterfaceContract getBindingInterfaceContract(ComponentService service) {
-        return service.getInterfaceContract();
+    public List<PolicySet> getPolicySets() {
+        // The sample binding does not support policies
+        return Collections.emptyList();
     }
 
-    public void start(Component component, ComponentService service) {
-        URI uri = URI.create(component.getURI() + "#" + service.getName());
-        // Register with the hosting server
-        EchoServer.getServer().register(new EchoService(uri), uri);
+    public List<Intent> getRequiredIntents() {
+        // The sample binding does not support policies
+        return Collections.emptyList();
+    }
+    
+    public List<Object> getExtensions() {
+        // The sample binding does not support extensions
+        return Collections.emptyList();
     }
 
-    public void stop(Component component, ComponentService service) {
-        // Register with the hosting server
-        EchoServer.getServer().unregister(URI.create(component.getURI() + "#" + service.getName()));
+    public boolean isUnresolved() {
+        return false;
     }
 
-    public Object clone() {
-        return this;
+    public void setUnresolved(boolean unresolved) {
+        // The sample binding is always resolved
     }
+
 }

Added: incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java?view=auto&rev=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java (added)
+++ incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java Wed May  2 20:29:38 2007
@@ -0,0 +1,82 @@
+/*
+ * 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 echo;
+
+import java.net.URI;
+
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.core.ReferenceBindingActivator;
+import org.apache.tuscany.core.ReferenceBindingProvider;
+import org.apache.tuscany.core.ServiceBindingActivator;
+import org.apache.tuscany.core.ServiceBindingProvider;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+
+/**
+ * Implementation of the Echo binding provider.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EchoBindingProvider extends EchoBindingImpl implements ReferenceBindingActivator,
+    ReferenceBindingProvider, ServiceBindingActivator, ServiceBindingProvider {
+
+    public Interceptor createInterceptor(Component component,
+                                         ComponentReference reference,
+                                         Operation operation,
+                                         boolean isCallback) {
+        if (isCallback) {
+            throw new UnsupportedOperationException();
+        } else {
+            return new EchoBindingInterceptor();
+        }
+    }
+
+    public InterfaceContract getBindingInterfaceContract(ComponentReference reference) {
+        return reference.getInterfaceContract();
+    }
+
+    public void start(Component component, ComponentReference reference) {
+    }
+
+    public void stop(Component component, ComponentReference reference) {
+    }
+
+    public InterfaceContract getBindingInterfaceContract(ComponentService service) {
+        return service.getInterfaceContract();
+    }
+
+    public void start(Component component, ComponentService service) {
+        URI uri = URI.create(component.getURI() + "#" + service.getName());
+        // Register with the hosting server
+        EchoServer.getServer().register(new EchoService(uri), uri);
+    }
+
+    public void stop(Component component, ComponentService service) {
+        // Register with the hosting server
+        EchoServer.getServer().unregister(URI.create(component.getURI() + "#" + service.getName()));
+    }
+
+    public Object clone() {
+        return this;
+    }
+}

Propchange: incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/binding-echo/src/main/java/echo/EchoBindingProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 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=diff&rev=534699&r1=534698&r2=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java Wed May  2 20:29:38 2007
@@ -22,26 +22,18 @@
 import java.util.List;
 
 import org.apache.tuscany.assembly.AssemblyFactory;
-import org.apache.tuscany.assembly.ComponentService;
 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.assembly.impl.ComponentTypeImpl;
-import org.apache.tuscany.core.ImplementationActivator;
-import org.apache.tuscany.core.ImplementationProvider;
-import org.apache.tuscany.core.RuntimeComponent;
-import org.apache.tuscany.interfacedef.InterfaceContract;
 import org.apache.tuscany.interfacedef.InvalidInterfaceException;
-import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.interfacedef.java.JavaFactory;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
 import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.interfacedef.java.introspect.JavaInterfaceIntrospector;
 import org.apache.tuscany.policy.Intent;
 import org.apache.tuscany.policy.PolicySet;
-import org.apache.tuscany.spi.Scope;
-import org.apache.tuscany.spi.wire.Interceptor;
 
 /**
  * The model representing a sample CRUD implementation in an SCA assembly model.
@@ -55,14 +47,11 @@
  * @version $$Rev$$ $$Date: 2007-04-23 19:18:54 -0700 (Mon, 23 Apr
  *          2007) $$
  */
-public class CRUDImplementation extends ComponentTypeImpl implements Implementation, ImplementationProvider,
-    ImplementationActivator {
+public class CRUDImplementation implements Implementation {
 
     private Service crudService;
     private String directory;
 
-    private AssemblyFactory assemblyFactory;
-
     /**
      * Constructs a new CRUD implementation.
      */
@@ -83,8 +72,6 @@
         JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
         interfaceContract.setInterface(javaInterface);
         crudService.setInterfaceContract(interfaceContract);
-        this.assemblyFactory = assemblyFactory;
-        // createSelfReferences();
     }
 
     /**
@@ -119,6 +106,11 @@
         // CRUD implementations provide a single fixed CRUD service
         return Collections.singletonList(crudService);
     }
+    
+    public List<Reference> getReferences() {
+        // CRUD implementations do not support properties
+        return Collections.emptyList();
+    }
 
     public String getURI() {
         // CRUD implementations don't have a URI
@@ -155,31 +147,6 @@
 
     public void setUnresolved(boolean unresolved) {
         // CRUD implementations are always resolved
-    }
-
-    public Interceptor createInterceptor(RuntimeComponent component,
-                                         ComponentService service,
-                                         Operation operation,
-                                         boolean isCallback) {
-        CRUDImplementation impl = (CRUDImplementation)component.getImplementation();
-        CRUDTargetInvoker invoker = new CRUDTargetInvoker(operation, new ResourceManager(impl.getDirectory()));
-        return invoker;
-    }
-
-    public InterfaceContract getImplementationInterfaceContract(ComponentService 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());
     }
 
 }

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java?view=diff&rev=534699&r1=534698&r2=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java Wed May  2 20:29:38 2007
@@ -56,7 +56,7 @@
         this.assemblyFactory = assemblyFactory;
         this.javaFactory = javaFactory;
         this.introspector = introspector;
-    } 
+    }
 
     public QName getArtifactType() {
         // Returns the qname of the XML element processed by this processor
@@ -78,7 +78,7 @@
             String directory = reader.getAttributeValue(null, "directory");
 
             // Create an initialize the CRUD implementation model
-            CRUDImplementation implementation = new CRUDImplementation(assemblyFactory, javaFactory, introspector);
+            CRUDImplementation implementation = new CRUDImplementationProvider(assemblyFactory, javaFactory, introspector);
             implementation.setDirectory(directory);
             
             // Skip to end element

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java?view=auto&rev=534699
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java Wed May  2 20:29:38 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;
+
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.core.ImplementationActivator;
+import org.apache.tuscany.core.ImplementationProvider;
+import org.apache.tuscany.core.RuntimeComponent;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.java.JavaFactory;
+import org.apache.tuscany.interfacedef.java.introspect.JavaInterfaceIntrospector;
+import org.apache.tuscany.spi.wire.Interceptor;
+
+/**
+ * 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 extends CRUDImplementation implements ImplementationProvider,
+    ImplementationActivator {
+
+    /**
+     * Constructs a new CRUD implementation.
+     */
+    public CRUDImplementationProvider(AssemblyFactory assemblyFactory,
+                              JavaFactory javaFactory,
+                              JavaInterfaceIntrospector introspector) {
+        super(assemblyFactory, javaFactory, introspector);
+    }
+
+    public Interceptor createInterceptor(RuntimeComponent component,
+                                         ComponentService service,
+                                         Operation operation,
+                                         boolean isCallback) {
+        CRUDInvoker invoker = new CRUDInvoker(operation, new ResourceManager(getDirectory()));
+        return invoker;
+    }
+
+    public InterfaceContract getImplementationInterfaceContract(ComponentService 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/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProvider.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=534699
==============================================================================
--- 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 Wed May  2 20:29:38 2007
@@ -0,0 +1,89 @@
+/*
+ * 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.interfacedef.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+
+/**
+ * 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 Interceptor {
+    private Operation operation;
+    private ResourceManager resourceManager;
+    private Interceptor next;
+    
+    public CRUDInvoker(Operation operation, ResourceManager resourceManager) {
+        this.operation = operation;
+        this.resourceManager = resourceManager;
+    }
+    
+    public Message invoke(Message msg) throws InvocationRuntimeException {
+        try {
+            Object resp = doTheWork((Object[])msg.getBody());
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setBodyWithFault(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;
+        }
+    }
+
+    public boolean isOptimizable() {
+        return false;
+    }
+
+    public Interceptor getNext() {
+        return next;
+    }
+
+    public void setNext(Interceptor next) {
+        this.next = next;
+    }
+}

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



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