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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]