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 2006/05/14 20:45:07 UTC
svn commit: r406402 - in
/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany:
container/extension/ container/extension/config/
container/extension/context/ container/extension/loader/
container/groovy/builder/ container/groovy/...
Author: antelder
Date: Sun May 14 11:45:05 2006
New Revision: 406402
URL: http://svn.apache.org/viewcvs?rev=406402&view=rev
Log:
TUSCANY-317, apply latest code changes to Groovy container in the sandbox
Added:
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java
Modified:
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java
incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java
Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/config/AbstractContextFactory.java Sun May 14 11:45:05 2006
@@ -0,0 +1,143 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.container.extension.config;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.core.builder.ContextFactory;
+import org.apache.tuscany.core.context.AtomicContext;
+import org.apache.tuscany.core.context.CompositeContext;
+import org.apache.tuscany.core.wire.SourceWireFactory;
+import org.apache.tuscany.core.wire.TargetWireFactory;
+import org.apache.tuscany.model.assembly.Scope;
+
+/**
+ * Abstract context factory.
+ */
+public abstract class AbstractContextFactory<T extends AtomicContext> implements ContextFactory<T> {
+
+ // Context scope
+ private Scope scope;
+
+ // Context name
+ private String name;
+
+ // SOurce proxy factories
+ private List<SourceWireFactory> sourceProxyFactories = new ArrayList<SourceWireFactory>();
+
+ // Target proxy factories
+ private Map<String, TargetWireFactory> targetProxyFactories = new HashMap<String, TargetWireFactory>();
+
+ /**
+ * Initializes the context factory.
+ *
+ * @param name Context name.
+ * @param scope Context scope.
+ * @param groovyScript Groovy script to run.
+ */
+ public AbstractContextFactory(String name, Scope scope) {
+ this.name = name;
+ this.scope = scope;
+ }
+
+ /**
+ * Returns the context scope.
+ * @return Context scope.
+ */
+ public final Scope getScope() {
+ return scope;
+ }
+
+ /**
+ * Returns the context name.
+ * @return Context name.
+ */
+ public final String getName() {
+ return name;
+ }
+
+ /**
+ * Adds a property.
+ *
+ * @param propertyName Property name.
+ * @param value Property value.
+ */
+ public final void addProperty(String propertyName, Object value) {
+ }
+
+ /**
+ * Adds a target proxy factory.
+ *
+ * @param serviceName Service name.
+ * @param factory Target proxy factory.
+ */
+ public final void addTargetWireFactory(String serviceName, TargetWireFactory factory) {
+ targetProxyFactories.put(serviceName, factory);
+ }
+
+ /**
+ * Gets a target proxy factory by name.
+ *
+ * @param serviceName Service name.
+ * @return Target wire factory for the specified service.
+ */
+ public final TargetWireFactory getTargetWireFactory(String serviceName) {
+ return targetProxyFactories.get(serviceName);
+ }
+
+ /**
+ * Returns all the target wire factories.
+ * @return All the target wire factories for the context.
+ */
+ public final Map<String, TargetWireFactory> getTargetWireFactories() {
+ return targetProxyFactories;
+ }
+
+ /**
+ * Adds a source wire factory.
+ *
+ * @param referenceName Reference name.
+ * @param factory SOurce wire factory.
+ */
+ public final void addSourceWireFactory(String referenceName, SourceWireFactory factory) {
+ sourceProxyFactories.add(factory);
+ }
+
+ /**
+ * Adds all source wire factories.
+ */
+ public final void addSourceWireFactories(String referenceName, Class referenceInterface, List<SourceWireFactory> factory, boolean multiplicity) {
+ sourceProxyFactories.addAll(factory);
+ }
+
+ /**
+ * Returns all the source wire factories.
+ */
+ public final List<SourceWireFactory> getSourceWireFactories() {
+ return sourceProxyFactories;
+ }
+
+ /**
+ * Notification that the parent factory has been activated.
+ */
+ public final void prepare(CompositeContext parent) {
+ }
+
+}
Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/context/AbstractComponentContext.java Sun May 14 11:45:05 2006
@@ -0,0 +1,114 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.container.extension.context;
+
+import java.util.Map;
+
+import org.apache.tuscany.core.context.AtomicContext;
+import org.apache.tuscany.core.context.CoreRuntimeException;
+import org.apache.tuscany.core.context.QualifiedName;
+import org.apache.tuscany.core.context.TargetException;
+import org.apache.tuscany.core.context.event.InstanceCreated;
+import org.apache.tuscany.core.context.impl.AbstractContext;
+import org.apache.tuscany.core.wire.ProxyCreationException;
+import org.apache.tuscany.core.wire.TargetWireFactory;
+import org.apache.tuscany.core.wire.WireFactory;
+
+/**
+ * Abstract component context.
+ *
+ */
+public abstract class AbstractComponentContext extends AbstractContext implements AtomicContext {
+
+ private Map<String, TargetWireFactory> targetProxyFactories;
+
+ public AbstractComponentContext(String name, Map<String, TargetWireFactory> targetProxyFactories) {
+ super(name);
+ this.targetProxyFactories = targetProxyFactories;
+ }
+
+ public Object getInstance(QualifiedName qName) throws TargetException {
+ return getInstance(qName, true);
+ }
+
+ /**
+ * Init method.
+ */
+ public void init() throws TargetException {
+ }
+
+ /**
+ * Detsroy method.
+ */
+ public void destroy() throws TargetException {
+ }
+
+ private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException {
+ String portName = qName.getPortName();
+ WireFactory targetFactory;
+ if (portName != null) {
+ targetFactory = targetProxyFactories.get(portName);
+ } else {
+ targetFactory = targetProxyFactories.values().iterator().next();
+ }
+ if (targetFactory == null) {
+ TargetException e = new TargetException("Target service not found");
+ e.setIdentifier(qName.getPortName());
+ e.addContextName(getName());
+ throw e;
+ }
+ try {
+ Object proxy = targetFactory.createProxy();
+ if (notify) {
+ publish(new InstanceCreated(this));
+ }
+ return proxy;
+ } catch (ProxyCreationException e) {
+ TargetException te = new TargetException("Error returning target", e);
+ e.setIdentifier(qName.getPortName());
+ e.addContextName(getName());
+ throw te;
+ }
+ }
+
+ /**
+ * Whether this context supports eager init.
+ */
+ public boolean isEagerInit() {
+ return false;
+ }
+
+ /**
+ * Whether this context is destroyable.
+ */
+ public boolean isDestroyable() {
+ return false;
+ }
+
+ /**
+ * Starts the context.
+ */
+ public void start() throws CoreRuntimeException {
+ }
+
+ /**
+ * Stops the context.
+ */
+ public void stop() throws CoreRuntimeException {
+ }
+
+}
Added: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java?rev=406402&view=auto
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java (added)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/extension/loader/AbstractImplementationLoader.java Sun May 14 11:45:05 2006
@@ -0,0 +1,160 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.container.extension.loader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.core.config.ConfigurationLoadException;
+import org.apache.tuscany.core.config.InvalidRootElementException;
+import org.apache.tuscany.core.config.MissingResourceException;
+import org.apache.tuscany.core.config.SidefileLoadException;
+import org.apache.tuscany.core.loader.LoaderContext;
+import org.apache.tuscany.core.loader.StAXElementLoader;
+import org.apache.tuscany.core.loader.StAXLoaderRegistry;
+import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
+import org.apache.tuscany.core.system.annotation.Autowire;
+import org.apache.tuscany.model.assembly.ComponentType;
+import org.apache.tuscany.model.assembly.Implementation;
+import org.osoa.sca.annotations.Scope;
+
+/**
+ * Abstract implementation loader.
+ *
+ */
+@Scope("MODULE")
+public abstract class AbstractImplementationLoader<T extends Implementation> implements StAXElementLoader<T> {
+
+ // Injected Stax loader registry.
+ protected StAXLoaderRegistry registry;
+
+ // XML input factory.
+ protected XMLInputFactory xmlFactory;
+
+ /**
+ * Initializes the XML input factory.
+ *
+ */
+ public AbstractImplementationLoader() {
+ xmlFactory = XMLInputFactory.newInstance();
+ }
+
+ /**
+ * Injection method for Stax loader registry.
+ * @param registry Stax loader registry.
+ */
+ @Autowire
+ public void setRegistry(StAXLoaderRegistry registry) {
+ this.registry = registry;
+ }
+
+ /**
+ * Loads the Groovy implementation.
+ *
+ * @param Stax XML stream reader.
+ * @param loaderContext Loader context.
+ * @return Groovy implementation.
+ */
+ public T load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
+
+ T assemblyObject = getAssemblyObject(reader, loaderContext);
+
+ URL componentTypeFile = getSideFile(reader, loaderContext);
+ ComponentType componentType = loadComponentType(componentTypeFile, loaderContext);
+
+ assemblyObject.setComponentType(componentType);
+
+ return assemblyObject;
+
+ }
+
+ /**
+ * Required to be implemented by the concrete classes.
+ * @return Implementation object.
+ */
+ protected abstract T getAssemblyObject(XMLStreamReader reader, LoaderContext loaderContext);
+
+ /**
+ * Gets the side file.
+ *
+ * @param reader Reader for the module file.
+ * @param loaderContext Loader context.
+ * @return Side file Url.
+ * @throws MissingResourceException
+ */
+ protected abstract URL getSideFile(XMLStreamReader reader, LoaderContext loaderContext) throws MissingResourceException;
+
+ /**
+ * Loads the SIDE file to get the component information.
+ *
+ * @param scriptFile SCript file name.
+ * @param loaderContext Loader context.
+ * @return Component information.
+ * @throws SidefileLoadException
+ * @throws MissingResourceException
+ */
+ private ComponentType loadComponentType(URL componentTypeFile, LoaderContext loaderContext) throws SidefileLoadException, MissingResourceException{
+
+ XMLStreamReader reader = null;
+ InputStream is = null;
+
+ try {
+ is = componentTypeFile.openStream();
+ reader = xmlFactory.createXMLStreamReader(is);
+ reader.nextTag();
+ if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
+ InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName());
+ e.setResourceURI(componentTypeFile.toString());
+ throw e;
+ }
+ return (ComponentType) registry.load(reader, loaderContext);
+ } catch (IOException e) {
+ SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+ sfe.setResourceURI(componentTypeFile.toString());
+ throw sfe;
+ } catch (XMLStreamException e) {
+ SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+ sfe.setResourceURI(componentTypeFile.toString());
+ throw sfe;
+ } catch (ConfigurationLoadException e) {
+ SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
+ sfe.setResourceURI(componentTypeFile.toString());
+ throw sfe;
+ } finally {
+ try {
+ if(reader != null) {
+ reader.close();
+ }
+ } catch (XMLStreamException e) {
+ // ignore
+ }
+ try {
+ if(is != null) {
+ is.close();
+ }
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+
+}
Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/builder/GroovyContextFactoryBuilder.java Sun May 14 11:45:05 2006
@@ -19,104 +19,21 @@
import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
import org.apache.tuscany.container.groovy.config.GroovyContextFactory;
import org.apache.tuscany.container.groovy.invoker.GroovyScript;
-import org.apache.tuscany.core.builder.BuilderException;
-import org.apache.tuscany.core.builder.ContextFactoryBuilder;
-import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
-import org.apache.tuscany.core.system.annotation.Autowire;
-import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.core.wire.service.WireFactoryService;
-import org.apache.tuscany.model.assembly.AssemblyObject;
-import org.apache.tuscany.model.assembly.AtomicComponent;
-import org.apache.tuscany.model.assembly.ConfiguredService;
-import org.apache.tuscany.model.assembly.Implementation;
+import org.apache.tuscany.core.builder.ContextFactory;
+import org.apache.tuscany.core.extension.ContextFactoryBuilderSupport;
import org.apache.tuscany.model.assembly.Scope;
-import org.apache.tuscany.model.assembly.Service;
-import org.osoa.sca.annotations.Init;
/**
* Groovy context factory builder.
*
*/
@org.osoa.sca.annotations.Scope("MODULE")
-public class GroovyContextFactoryBuilder implements ContextFactoryBuilder {
+public class GroovyContextFactoryBuilder extends ContextFactoryBuilderSupport<GroovyImplementation> {
- // Context factory builder registry.
- private ContextFactoryBuilderRegistry builderRegistry;
-
- // Wire factory service.
- private WireFactoryService wireFactoryService;
-
- /**
- * Lifecycle method used for registering the builder.
- *
- */
- @Init(eager = true)
- public void init() {
- builderRegistry.register(this);
- }
-
- /**
- * Injection method for builder registry.
- * @param builderRegistry
- */
- @Autowire
- public void setBuilderRegistry(ContextFactoryBuilderRegistry builderRegistry) {
- this.builderRegistry = builderRegistry;
- }
-
- /**
- * Injection method for wire factory service.
- * @param wireFactoryService WIre factory service.
- */
- @Autowire
- public void setWireFactoryService(WireFactoryService wireFactoryService) {
- this.wireFactoryService = wireFactoryService;
- }
-
- /**
- * Builds the groovy component implementation.
- * @param assemblyObject Assembly object.
- */
- public void build(AssemblyObject assemblyObject) throws BuilderException {
-
- if (assemblyObject instanceof AtomicComponent) {
- AtomicComponent component = (AtomicComponent) assemblyObject;
- Implementation impl = component.getImplementation();
- if (impl instanceof GroovyImplementation) {
- buildGroovyComponent(component, (GroovyImplementation) impl);
- } else {
- throw new IllegalArgumentException("Unexpected component type: " +
- impl.getClass());
- }
- }
-
- }
-
- /*
- * Builds the groovy component.
- */
- private void buildGroovyComponent(AtomicComponent component, GroovyImplementation impl) {
-
- Scope scope = impl.getComponentType().getServices().get(0).getServiceContract().getScope();
-
- GroovyScript groovyScript = new GroovyScript(impl.getScript());
- GroovyContextFactory contextFactory = new GroovyContextFactory(component.getName(),
- scope, groovyScript);
-
- addTargetInvocationChains(component, contextFactory);
- component.setContextFactory(contextFactory);
-
- }
-
- /*
- * Add target-side wire chains for each service offered by the implementation
- */
- private void addTargetInvocationChains(AtomicComponent component, GroovyContextFactory contextFactory) {
- for (ConfiguredService configuredService : component.getConfiguredServices()) {
- Service service = configuredService.getPort();
- TargetWireFactory wireFactory = wireFactoryService.createTargetFactory(configuredService);
- contextFactory.addTargetWireFactory(service.getName(), wireFactory);
- }
+ @Override
+ protected ContextFactory createContextFactory(String componentName, GroovyImplementation implementation, Scope scope) {
+ GroovyScript groovyScript = new GroovyScript(implementation.getScript());
+ return new GroovyContextFactory(componentName, scope, groovyScript);
}
}
Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/config/GroovyContextFactory.java Sun May 14 11:45:05 2006
@@ -16,39 +16,19 @@
*/
package org.apache.tuscany.container.groovy.config;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.tuscany.container.extension.config.AbstractContextFactory;
import org.apache.tuscany.container.groovy.context.GroovyComponentContext;
import org.apache.tuscany.container.groovy.invoker.GroovyScript;
import org.apache.tuscany.core.builder.ContextCreationException;
-import org.apache.tuscany.core.builder.ContextFactory;
-import org.apache.tuscany.core.context.CompositeContext;
-import org.apache.tuscany.core.wire.SourceWireFactory;
-import org.apache.tuscany.core.wire.TargetWireFactory;
import org.apache.tuscany.model.assembly.Scope;
/**
* Groovy context factory.
*/
-public class GroovyContextFactory implements ContextFactory<GroovyComponentContext> {
-
- // Context scope
- private Scope scope;
-
- // Context name
- private String name;
+public class GroovyContextFactory extends AbstractContextFactory<GroovyComponentContext> {
// Groovy script to run
private GroovyScript groovyScript;
-
- // SOurce proxy factories
- private List<SourceWireFactory> sourceProxyFactories = new ArrayList<SourceWireFactory>();
-
- // Target proxy factories
- private Map<String, TargetWireFactory> targetProxyFactories = new HashMap<String, TargetWireFactory>();
/**
* Initializes the context factory.
@@ -58,8 +38,7 @@
* @param groovyScript Groovy script to run.
*/
public GroovyContextFactory(String name, Scope scope, GroovyScript groovyScript) {
- this.name = name;
- this.scope = scope;
+ super(name, scope);
this.groovyScript = groovyScript;
}
@@ -67,92 +46,10 @@
* Creates the Groovy component context.
*/
public GroovyComponentContext createContext() throws ContextCreationException {
- return new GroovyComponentContext(name, sourceProxyFactories,
- targetProxyFactories, groovyScript);
- }
-
- /**
- * Returns the context scope.
- * @return Context scope.
- */
- public Scope getScope() {
- return scope;
- }
-
- /**
- * Returns the context name.
- * @return Context name.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Adds a property.
- *
- * @param propertyName Property name.
- * @param value Property value.
- */
- public void addProperty(String propertyName, Object value) {
- }
-
- /**
- * Adds a target proxy factory.
- *
- * @param serviceName Service name.
- * @param factory Target proxy factory.
- */
- public void addTargetWireFactory(String serviceName, TargetWireFactory factory) {
- targetProxyFactories.put(serviceName, factory);
- }
-
- /**
- * Gets a target proxy factory by name.
- *
- * @param serviceName Service name.
- * @return Target wire factory for the specified service.
- */
- public TargetWireFactory getTargetWireFactory(String serviceName) {
- return targetProxyFactories.get(serviceName);
- }
-
- /**
- * Returns all the target wire factories.
- * @return All the target wire factories for the context.
- */
- public Map<String, TargetWireFactory> getTargetWireFactories() {
- return targetProxyFactories;
+ return new GroovyComponentContext(
+ getName(),
+ getTargetWireFactories(),
+ groovyScript);
}
-
- /**
- * Adds a source wire factory.
- *
- * @param referenceName Reference name.
- * @param factory SOurce wire factory.
- */
- public void addSourceWireFactory(String referenceName, SourceWireFactory factory) {
- sourceProxyFactories.add(factory);
- }
-
- /**
- * Adds all source wire factories.
- */
- public void addSourceWireFactories(String referenceName, Class referenceInterface, List<SourceWireFactory> factory, boolean multiplicity) {
- sourceProxyFactories.addAll(factory);
- }
-
- /**
- * Returns all the source wire factories.
- */
- public List<SourceWireFactory> getSourceWireFactories() {
- return sourceProxyFactories;
- }
-
- /**
- * Notification that the parent factory has been activated.
- */
- public void prepare(CompositeContext parent) {
- }
-
}
Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/context/GroovyComponentContext.java Sun May 14 11:45:05 2006
@@ -16,94 +16,41 @@
*/
package org.apache.tuscany.container.groovy.context;
-import java.util.List;
import java.util.Map;
+import org.apache.tuscany.container.extension.context.AbstractComponentContext;
import org.apache.tuscany.container.groovy.invoker.GroovyScript;
-import org.apache.tuscany.core.context.AtomicContext;
-import org.apache.tuscany.core.context.CoreRuntimeException;
-import org.apache.tuscany.core.context.QualifiedName;
import org.apache.tuscany.core.context.TargetException;
-import org.apache.tuscany.core.context.event.InstanceCreated;
-import org.apache.tuscany.core.context.impl.AbstractContext;
-import org.apache.tuscany.core.wire.ProxyCreationException;
-import org.apache.tuscany.core.wire.SourceWireFactory;
import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.core.wire.WireFactory;
-public class GroovyComponentContext extends AbstractContext implements AtomicContext {
-
- private List<SourceWireFactory> sourceProxyFactories;
-
- private Map<String, TargetWireFactory> targetProxyFactories;
+/**
+ * Groovy component context.
+ *
+ */
+public class GroovyComponentContext extends AbstractComponentContext {
+ // Groovy script.
private GroovyScript groovyScript;
+ /**
+ * Initializes the context.
+ *
+ * @param name Component name.
+ * @param targetProxyFactories Target wire factories.
+ * @param groovyScript Groovy script.
+ */
public GroovyComponentContext(String name,
- List<SourceWireFactory> sourceProxyFactories,
Map<String, TargetWireFactory> targetProxyFactories,
GroovyScript groovyScript) {
- super(name);
- this.sourceProxyFactories = sourceProxyFactories;
- this.targetProxyFactories = targetProxyFactories;
+ super(name, targetProxyFactories);
this.groovyScript = groovyScript;
}
- public Object getInstance(QualifiedName qName) throws TargetException {
- return getInstance(qName, true);
- }
-
- public void init() throws TargetException {
- }
-
- public void destroy() throws TargetException {
-
- }
-
- private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException {
- String portName = qName.getPortName();
- WireFactory targetFactory;
- if (portName != null) {
- targetFactory = targetProxyFactories.get(portName);
- } else {
- targetFactory = targetProxyFactories.values().iterator().next();
- }
- if (targetFactory == null) {
- TargetException e = new TargetException("Target service not found");
- e.setIdentifier(qName.getPortName());
- e.addContextName(getName());
- throw e;
- }
- try {
- Object proxy = targetFactory.createProxy();
- if (notify) {
- publish(new InstanceCreated(this));
- }
- return proxy;
- } catch (ProxyCreationException e) {
- TargetException te = new TargetException("Error returning target", e);
- e.setIdentifier(qName.getPortName());
- e.addContextName(getName());
- throw te;
- }
- }
-
+ /**
+ * Gets the target invocation instance.
+ */
public Object getTargetInstance() throws TargetException {
return groovyScript;
- }
-
- public boolean isEagerInit() {
- return false;
- }
-
- public boolean isDestroyable() {
- return false;
- }
-
- public void start() throws CoreRuntimeException {
- }
-
- public void stop() throws CoreRuntimeException {
}
}
Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/container/groovy/loader/GroovyImplementationLoader.java Sun May 14 11:45:05 2006
@@ -16,26 +16,15 @@
*/
package org.apache.tuscany.container.groovy.loader;
-import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
-import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.core.config.InvalidRootElementException;
+import org.apache.tuscany.container.extension.loader.AbstractImplementationLoader;
+import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
import org.apache.tuscany.core.config.MissingResourceException;
-import org.apache.tuscany.core.config.SidefileLoadException;
import org.apache.tuscany.core.loader.LoaderContext;
-import org.apache.tuscany.core.loader.StAXElementLoader;
-import org.apache.tuscany.core.loader.StAXLoaderRegistry;
-import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
-import org.apache.tuscany.core.system.annotation.Autowire;
-import org.apache.tuscany.container.groovy.assembly.GroovyImplementation;
-import org.apache.tuscany.model.assembly.ComponentType;
import org.osoa.sca.annotations.Destroy;
import org.osoa.sca.annotations.Init;
import org.osoa.sca.annotations.Scope;
@@ -45,34 +34,11 @@
*
*/
@Scope("MODULE")
-public class GroovyImplementationLoader implements StAXElementLoader<GroovyImplementation> {
-
+public class GroovyImplementationLoader extends AbstractImplementationLoader<GroovyImplementation> {
+
// Qualified name for the Groovy implementation.
public static final QName NAME = new QName("http://org.apache.tuscany/xmlns/groovy/0.9", "implementation.groovy");
- // Injected Stax loader registry.
- protected StAXLoaderRegistry registry;
-
- // XML input factory.
- private XMLInputFactory xmlFactory;
-
- /**
- * Initializes the XML input factory.
- *
- */
- public GroovyImplementationLoader() {
- xmlFactory = XMLInputFactory.newInstance();
- }
-
- /**
- * Injection method for Stax loader registry.
- * @param registry Stax loader registry.
- */
- @Autowire
- public void setRegistry(StAXLoaderRegistry registry) {
- this.registry = registry;
- }
-
/**
* Lifecycle method registers the implementation loader.
*
@@ -90,93 +56,42 @@
public void stop() {
registry.unregisterLoader(NAME, this);
}
-
- /**
- * Loads the Groovy implementation.
- *
- * @param Stax XML stream reader.
- * @param loaderContext Loader context.
- * @return Groovy implementation.
- */
- public GroovyImplementation load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
-
+
+ /**
+ * Required to be implemented by the concrete classes.
+ * @return Implementation object.
+ */
+ protected GroovyImplementation getAssemblyObject(XMLStreamReader reader, LoaderContext loaderContext) {
+
GroovyImplementation groovyImplementation = new GroovyImplementation();
String script = reader.getAttributeValue(null, "script");
- ComponentType componentType = loadComponentType(script, loaderContext);
groovyImplementation.setScript(script);
- groovyImplementation.setComponentType(componentType);
groovyImplementation.setResourceLoader(loaderContext.getResourceLoader());
-
+
return groovyImplementation;
}
- /**
- * Loads the SIDE file to get the component information.
- *
- * @param scriptFile SCript file name.
- * @param loaderContext Loader context.
- * @return Component information.
- * @throws SidefileLoadException
- * @throws MissingResourceException
- */
- protected ComponentType loadComponentType(String scriptFile, LoaderContext loaderContext) throws SidefileLoadException, MissingResourceException{
-
- URL componentTypeFile = getSideFile(scriptFile, loaderContext);
- XMLStreamReader reader = null;
- InputStream is = null;
-
- try {
- is = componentTypeFile.openStream();
- reader = xmlFactory.createXMLStreamReader(is);
- reader.nextTag();
- if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
- InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName());
- e.setResourceURI(componentTypeFile.toString());
- throw e;
- }
- return (ComponentType) registry.load(reader, loaderContext);
- } catch (IOException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(componentTypeFile.toString());
- throw sfe;
- } catch (XMLStreamException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(componentTypeFile.toString());
- throw sfe;
- } catch (ConfigurationLoadException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(componentTypeFile.toString());
- throw sfe;
- } finally {
- try {
- if(reader != null) {
- reader.close();
- }
- } catch (XMLStreamException e) {
- // ignore
- }
- try {
- if(is != null) {
- is.close();
- }
- } catch (IOException e) {
- // ignore
- }
- }
- }
-
- /*
- * Gets the Side file URL.
+ /**
+ * Gets the side file.
+ *
+ * @param reader Reader for the module file.
+ * @param loaderContext Loader context.
+ * @return Side file Url.
+ * @throws MissingResourceException
*/
- private URL getSideFile(String scriptFile, LoaderContext loaderContext) throws MissingResourceException {
- String sidefile = scriptFile.substring(0, scriptFile.lastIndexOf('.')) + ".componentType";
+ protected URL getSideFile(XMLStreamReader reader, LoaderContext loaderContext)
+ throws MissingResourceException {
+
+ String script = reader.getAttributeValue(null, "script");
+ String sidefile = script.substring(0, script.lastIndexOf('.')) + ".componentType";
URL componentTypeFile = loaderContext.getResourceLoader().getResource(sidefile);
if (componentTypeFile == null) {
throw new MissingResourceException(sidefile);
}
return componentTypeFile;
+
}
}
Modified: incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java?rev=406402&r1=406401&r2=406402&view=diff
==============================================================================
--- incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java (original)
+++ incubator/tuscany/sandbox/container.groovy/src/main/java/org/apache/tuscany/samples/groovy/GreetingClient.java Sun May 14 11:45:05 2006
@@ -29,7 +29,7 @@
/**
* This client program shows how to create an SCA runtime, start it,
- * locate a simple HelloWorld service component and invoke it.
+ * locate a simple groovy service component and invoke it.
*/
public class GreetingClient {