You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/05/27 17:19:39 UTC
svn commit: r409831 [1/2] - in /incubator/tuscany/sandbox/jboynes/sca:
containers/container.java/src/main/java/org/apache/tuscany/container/java/
core2/src/main/java/org/apache/tuscany/core/bootstrap/
core2/src/main/java/org/apache/tuscany/core/composi...
Author: jboynes
Date: Sat May 27 08:19:37 2006
New Revision: 409831
URL: http://svn.apache.org/viewvc?rev=409831&view=rev
Log:
Add simple testcase for bootstrap deployer loading a system service and component.
Migrated property factory implementations.
Tightened generics on loader implementations.
Refactored componentType sidefile loading into the extension so it can be reused.
Added:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java (with props)
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java (with props)
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UnexpectedElementException.java (with props)
Modified:
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/CompositeImplementation.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/Implementation.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ModelObject.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/Property.java
Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/JavaComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -16,22 +16,13 @@
*/
package org.apache.tuscany.container.java;
-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.loader.AssemblyConstants;
import org.apache.tuscany.core.model.PojoComponentType;
import org.apache.tuscany.core.util.JavaIntrospectionHelper;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.loader.UnrecognizedElementException;
-import org.apache.tuscany.spi.model.ComponentType;
/**
* @version $Rev$ $Date$
@@ -42,70 +33,24 @@
super();
}
- public void load(JavaImplementation implementation, DeploymentContext deploymentContext) {
+ public void load(JavaImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
Class<?> implClass = implementation.getImplementationClass();
URL resource = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
- try {
- if (resource == null) {
- loadByIntrospection(implementation);
- } else {
- loadFromSidefile(implementation, resource, deploymentContext);
- }
- } catch (LoaderException e) {
- // throw new TuscanyRuntimeException(e);
+ PojoComponentType componentType;
+ if (resource == null) {
+ componentType = loadByIntrospection(implementation);
+ } else {
+ componentType = loadFromSidefile(PojoComponentType.class, resource, deploymentContext);
}
- }
-
- protected void loadByIntrospection(JavaImplementation implementation) {
- Class<?> implClass = implementation.getImplementationClass();
- PojoComponentType componentType = null; // FIXME: introspector.introspect(implClass);
implementation.setComponentType(componentType);
}
- protected ComponentType loadFromSidefile(JavaImplementation implementation, URL sidefile, DeploymentContext deploymentContext)
- throws LoaderException {
- try {
- XMLStreamReader reader;
- InputStream is;
- is = sidefile.openStream();
- try {
- XMLInputFactory factory = deploymentContext.getXmlFactory();
- reader = factory.createXMLStreamReader(is);
- try {
- reader.nextTag();
- if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
- UnrecognizedElementException e = new UnrecognizedElementException(reader.getName());
- e.setResourceURI(sidefile.toString());
- throw e;
- }
- return (ComponentType) loaderRegistry.load(reader, deploymentContext);
- } finally {
- try {
- reader.close();
- } catch (XMLStreamException e) {
- // ignore
- }
- }
- } finally {
- try {
- is.close();
- } catch (IOException e) {
- // ignore
- }
- }
- } catch (IOException e) {
- LoaderException sfe = new LoaderException(e.getMessage());
- sfe.setResourceURI(sidefile.toString());
- throw sfe;
- } catch (XMLStreamException e) {
- LoaderException sfe = new LoaderException(e.getMessage());
- sfe.setResourceURI(sidefile.toString());
- throw sfe;
- }
+ protected PojoComponentType loadByIntrospection(JavaImplementation implementation) {
+ throw new UnsupportedOperationException();
}
@Override
- protected Class<JavaImplementation> getTypeClass() {
+ protected Class<JavaImplementation> getImplementationClass() {
return JavaImplementation.class;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Sat May 27 08:19:37 2006
@@ -16,41 +16,41 @@
*/
package org.apache.tuscany.core.bootstrap;
-import java.net.URI;
-
import org.apache.tuscany.core.builder.BuilderRegistryImpl;
import org.apache.tuscany.core.builder.Connector;
import org.apache.tuscany.core.builder.ConnectorImpl;
+import org.apache.tuscany.core.composite.loader.CompositeLoader;
import org.apache.tuscany.core.context.WorkContextImpl;
-import org.apache.tuscany.core.context.scope.ModuleScopeContext;
import org.apache.tuscany.core.context.scope.ScopeRegistryImpl;
import org.apache.tuscany.core.deployer.DeployerImpl;
+import org.apache.tuscany.core.loader.AssemblyConstants;
+import org.apache.tuscany.core.loader.ComponentLoader;
+import org.apache.tuscany.core.loader.ComponentTypeElementLoader;
+import org.apache.tuscany.core.loader.InterfaceJavaLoader;
import org.apache.tuscany.core.loader.LoaderRegistryImpl;
-import org.apache.tuscany.core.model.PojoComponentType;
+import org.apache.tuscany.core.loader.PropertyLoader;
+import org.apache.tuscany.core.loader.ReferenceLoader;
+import org.apache.tuscany.core.loader.ServiceLoader;
+import org.apache.tuscany.core.loader.StringParserPropertyFactory;
import org.apache.tuscany.core.system.builder.SystemBindingBuilder;
import org.apache.tuscany.core.system.builder.SystemComponentBuilder;
import org.apache.tuscany.core.system.builder.SystemCompositeBuilder;
import org.apache.tuscany.core.system.loader.SystemComponentTypeLoader;
+import org.apache.tuscany.core.system.loader.SystemImplementationLoader;
+import org.apache.tuscany.core.system.loader.SystemCompositeComponentTypeLoader;
+import org.apache.tuscany.core.system.loader.SystemBindingLoader;
import org.apache.tuscany.core.system.model.SystemBinding;
import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
import org.apache.tuscany.core.system.model.SystemImplementation;
-import org.apache.tuscany.core.system.context.SystemCompositeContext;
import org.apache.tuscany.core.wire.jdk.JDKWireFactoryService;
import org.apache.tuscany.core.wire.system.WireServiceImpl;
import org.apache.tuscany.spi.builder.BuilderRegistry;
-import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
-import org.apache.tuscany.spi.context.ScopeContext;
import org.apache.tuscany.spi.context.ScopeRegistry;
import org.apache.tuscany.spi.deployer.Deployer;
-import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderRegistry;
-import org.apache.tuscany.spi.model.BoundService;
-import org.apache.tuscany.spi.model.Component;
-import org.apache.tuscany.spi.model.CompositeComponentType;
-import org.apache.tuscany.spi.model.JavaServiceContract;
-import org.apache.tuscany.spi.model.Service;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.monitor.MonitorFactory;
/**
* @version $Rev$ $Date$
@@ -66,13 +66,21 @@
this.connector = connector;
}
- public DefaultBootstrapper() {
+ public DefaultBootstrapper(MonitorFactory monitorFactory) {
this.builderRegistry = getDefaultBuilderRegistry();
- this.loaderRegistry = getDefaultLoaderRegistry();
+ this.loaderRegistry = getDefaultLoaderRegistry(monitorFactory, new StringParserPropertyFactory());
this.connector = getDefaultConnector();
}
- public static BuilderRegistry getDefaultBuilderRegistry() {
+ public Deployer createDeployer() {
+ DeployerImpl deployer = new DeployerImpl();
+ deployer.setBuilderRegistry(builderRegistry);
+ deployer.setLoaderRegistry(loaderRegistry);
+ deployer.setConnector(connector);
+ return deployer;
+ }
+
+ protected BuilderRegistry getDefaultBuilderRegistry() {
WireService wireService = new WireServiceImpl(new JDKWireFactoryService());
ScopeRegistry scopeRegistry = new ScopeRegistryImpl(new WorkContextImpl());
BuilderRegistry builderRegistry = new BuilderRegistryImpl(wireService, scopeRegistry);
@@ -82,37 +90,29 @@
return builderRegistry;
}
- public static LoaderRegistry getDefaultLoaderRegistry() {
- LoaderRegistry loaderRegistry = new LoaderRegistryImpl();
+ protected LoaderRegistry getDefaultLoaderRegistry(MonitorFactory monitorFactory, StAXPropertyFactory propertyFactory) {
+ LoaderRegistryImpl loaderRegistry = new LoaderRegistryImpl();
+ loaderRegistry.setMonitor(monitorFactory.getMonitor(LoaderRegistryImpl.Monitor.class));
+
+ // register component type loaders
loaderRegistry.registerLoader(SystemImplementation.class, new SystemComponentTypeLoader());
- return loaderRegistry;
- }
+ loaderRegistry.registerLoader(SystemCompositeImplementation.class, new SystemCompositeComponentTypeLoader(loaderRegistry));
- public static Connector getDefaultConnector() {
- return new ConnectorImpl();
- }
+ // register element loaders
+ loaderRegistry.registerLoader(AssemblyConstants.COMPONENT, new ComponentLoader(loaderRegistry, propertyFactory));
+ loaderRegistry.registerLoader(AssemblyConstants.COMPONENT_TYPE, new ComponentTypeElementLoader(loaderRegistry));
+ loaderRegistry.registerLoader(AssemblyConstants.COMPOSITE, new CompositeLoader(loaderRegistry));
+ loaderRegistry.registerLoader(AssemblyConstants.INTERFACE_JAVA, new InterfaceJavaLoader(loaderRegistry));
+ loaderRegistry.registerLoader(AssemblyConstants.PROPERTY, new PropertyLoader(loaderRegistry));
+ loaderRegistry.registerLoader(AssemblyConstants.REFERENCE, new ReferenceLoader(loaderRegistry));
+ loaderRegistry.registerLoader(AssemblyConstants.SERVICE, new ServiceLoader(loaderRegistry));
- public Context<Deployer> createDeployer(String name, CompositeContext<?> parent) {
- ScopeContext moduleScope = new ModuleScopeContext();
- DeploymentContext deploymentContext = new DeploymentContext(null, null, moduleScope);
- CompositeComponentType composite = new CompositeComponentType();
-
- // expose the deployer as a system service
- composite.add(new BoundService<SystemBinding>("deployer", new JavaServiceContract(Deployer.class), new SystemBinding(), URI.create("deployerImpl")));
-
- // create the deployer component
- composite.add(createdeployer());
-
- Component<SystemCompositeImplementation> deployerComposite = new Component<SystemCompositeImplementation>(name, new SystemCompositeImplementation(composite));
- SystemCompositeContext<Deployer> context = (SystemCompositeContext<Deployer>) builderRegistry.build(parent, deployerComposite, deploymentContext);
- context.setScopeContext(moduleScope);
- connector.connect(context);
- return context;
+ loaderRegistry.registerLoader(SystemImplementationLoader.SYSTEM_IMPLEMENTATION, new SystemImplementationLoader(loaderRegistry));
+ loaderRegistry.registerLoader(SystemBindingLoader.SYSTEM_BINDING, new SystemBindingLoader(loaderRegistry));
+ return loaderRegistry;
}
- protected Component<SystemImplementation> createdeployer() {
- PojoComponentType type = new PojoComponentType();
- type.add(new Service("default", new JavaServiceContract(Deployer.class)));
- return new Component<SystemImplementation>("deployerImpl", new SystemImplementation(type, DeployerImpl.class));
+ protected Connector getDefaultConnector() {
+ return new ConnectorImpl();
}
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/composite/loader/CompositeLoader.java Sat May 27 08:19:37 2006
@@ -31,6 +31,7 @@
import org.apache.tuscany.spi.model.Implementation;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
import org.apache.tuscany.core.loader.AssemblyConstants;
@@ -38,6 +39,13 @@
* @version $Rev$ $Date$
*/
public class CompositeLoader extends LoaderExtension<CompositeComponentType> {
+ public CompositeLoader() {
+ }
+
+ public CompositeLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
protected QName getXMLType() {
return AssemblyConstants.COMPOSITE;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Sat May 27 08:19:37 2006
@@ -26,6 +26,7 @@
import org.apache.tuscany.spi.deployer.Deployer;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.model.Component;
import org.apache.tuscany.spi.model.Implementation;
@@ -54,7 +55,7 @@
this.connector = connector;
}
- public <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) {
+ public <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) throws LoaderException {
ScopeContext moduleScope = new ModuleScopeContext();
DeploymentContext deploymentContext = new DeploymentContext(null, null, moduleScope);
load(component, deploymentContext);
@@ -70,7 +71,7 @@
* @param component the component being deployed
* @param deploymentContext the current deployment context
*/
- protected <I extends Implementation<?>> void load(Component<I> component, DeploymentContext deploymentContext) {
+ protected <I extends Implementation<?>> void load(Component<I> component, DeploymentContext deploymentContext) throws LoaderException {
loaderRegistry.loadComponentType(component.getImplementation(), deploymentContext);
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2006 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.core.injection;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.ObjectCreationException;
+
+/**
+ * An implementation of ObjectFactory that creates instances
+ * by looking them up in a JNDI context.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JNDIObjectFactory<T> implements ObjectFactory<T> {
+ private final Context context;
+ private final String name;
+
+ public JNDIObjectFactory(Context context, String name) {
+ this.context = context;
+ this.name = name;
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public T getInstance() throws ObjectCreationException {
+ try {
+ return (T) context.lookup(name);
+ } catch (NamingException e) {
+ throw new ObjectCreationException(e);
+ }
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/JNDIObjectFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/AssemblyConstants.java Sat May 27 08:19:37 2006
@@ -27,7 +27,6 @@
public static final QName COMPONENT = new QName(SCA_NAMESPACE, "component");
public static final QName COMPONENT_TYPE = new QName(SCA_NAMESPACE, "componentType");
public static final QName COMPOSITE = new QName(SCA_NAMESPACE, "composite");
- public static final QName IMPORT_WSDL = new QName(SCA_NAMESPACE, "import.wsdl");
public static final QName INTERFACE_JAVA = new QName(SCA_NAMESPACE, "interface.java");
public static final QName INTERFACE_WSDL = new QName(SCA_NAMESPACE, "interface.wsdl");
public static final QName PROPERTY = new QName(SCA_NAMESPACE, "property");
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat May 27 08:19:37 2006
@@ -25,6 +25,15 @@
import javax.xml.stream.XMLStreamReader;
import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.InvalidReferenceException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.MissingImplementationException;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.UndefinedPropertyException;
import org.apache.tuscany.spi.model.Component;
import org.apache.tuscany.spi.model.ComponentType;
import org.apache.tuscany.spi.model.Implementation;
@@ -32,22 +41,21 @@
import org.apache.tuscany.spi.model.Property;
import org.apache.tuscany.spi.model.PropertyValue;
import org.apache.tuscany.spi.model.ReferenceTarget;
-import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.loader.InvalidReferenceException;
-import org.apache.tuscany.spi.deployer.DeploymentContext;
-import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.extension.LoaderExtension;
-import org.apache.tuscany.spi.loader.MissingImplementationException;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
-import org.osoa.sca.annotations.Scope;
/**
* @version $Rev$ $Date$
*/
-@Scope("MODULE")
-public class ComponentLoader extends LoaderExtension {
+public class ComponentLoader extends LoaderExtension<Component<?>> {
private StAXPropertyFactory defaultPropertyFactory;
+ public ComponentLoader() {
+ }
+
+ public ComponentLoader(LoaderRegistry registry, StAXPropertyFactory propertyFactory) {
+ super(registry);
+ this.defaultPropertyFactory = propertyFactory;
+ }
+
@Autowire
public void setDefaultPropertyFactory(StAXPropertyFactory defaultPropertyFactory) {
this.defaultPropertyFactory = defaultPropertyFactory;
@@ -70,21 +78,27 @@
Implementation<?> impl = (Implementation<?>) o;
Component<?> component = new Component<Implementation<?>>(impl);
component.setName(name);
+ registry.loadComponentType(impl, deploymentContext);
- while (true) {
- switch (reader.next()) {
- case START_ELEMENT:
- QName qname = reader.getName();
- if (AssemblyConstants.PROPERTY.equals(qname)) {
- loadProperty(reader, deploymentContext, component);
- } else if (AssemblyConstants.REFERENCE.equals(qname)) {
- loadReference(reader, deploymentContext, component);
- }
- reader.next();
- break;
- case END_ELEMENT:
- return component;
+ try {
+ while (true) {
+ switch (reader.next()) {
+ case START_ELEMENT:
+ QName qname = reader.getName();
+ if (AssemblyConstants.PROPERTY.equals(qname)) {
+ loadProperty(reader, deploymentContext, component);
+ } else if (AssemblyConstants.REFERENCE.equals(qname)) {
+ loadReference(reader, deploymentContext, component);
+ }
+ reader.next();
+ break;
+ case END_ELEMENT:
+ return component;
+ }
}
+ } catch (LoaderException e) {
+ e.addContextName(component.getName());
+ throw e;
}
}
@@ -93,6 +107,11 @@
Implementation<?> implementation = component.getImplementation();
ComponentType componentType = implementation.getComponentType();
Property<?> property = componentType.getProperties().get(name);
+ if (property == null) {
+ LoaderException e = new UndefinedPropertyException(name);
+ e.setIdentifier(name);
+ throw e;
+ }
component.add(createPropertyValue(reader, property, name));
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java Sat May 27 08:19:37 2006
@@ -29,12 +29,20 @@
import org.apache.tuscany.spi.model.Service;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class ComponentTypeElementLoader extends LoaderExtension {
+public class ComponentTypeElementLoader extends LoaderExtension<ComponentType> {
+ public ComponentTypeElementLoader() {
+ }
+
+ public ComponentTypeElementLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public QName getXMLType() {
return AssemblyConstants.COMPONENT_TYPE;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/InterfaceJavaLoader.java Sat May 27 08:19:37 2006
@@ -23,12 +23,20 @@
import org.apache.tuscany.spi.model.JavaServiceContract;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class InterfaceJavaLoader extends LoaderExtension {
+public class InterfaceJavaLoader extends LoaderExtension<JavaServiceContract> {
+ public InterfaceJavaLoader() {
+ }
+
+ public InterfaceJavaLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public QName getXMLType() {
return AssemblyConstants.INTERFACE_JAVA;
}
@@ -47,7 +55,10 @@
name = reader.getAttributeValue(null, "callbackInterface");
serviceContract.setCallbackName(name);
- serviceContract.setCallbackClass(StAXUtil.loadClass(name, deploymentContext.getClassLoader()));
+ if (name != null) {
+ serviceContract.setCallbackClass(StAXUtil.loadClass(name, deploymentContext.getClassLoader()));
+ }
+ StAXUtil.skipToEndElement(reader);
return serviceContract;
}
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2006 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.core.loader;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.core.injection.JNDIObjectFactory;
+
+/**
+ * A StAXPropertyFactory that creates property values by looking them
+ * up in the default JNDI InitialContext.
+ *
+ * This can be used to locate resources in a J2EE environment and inject
+ * them as configuration properties. For example, to access a database
+ * a component could write:
+ * <code>
+ * &at;Property DataSource myDB;
+ * </code>
+ * and configure with
+ * <code>
+ * <properties>
+ * <v:myDb>java:comp/env/jdbc/MyDatabase</v:myDB>
+ * </properties>
+ * </code>
+ *
+ * @version $Rev$ $Date$
+ */
+public class JNDIPropertyFactory implements StAXPropertyFactory {
+ public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader, Property<T> property) throws XMLStreamException, LoaderException {
+ Class<T> type = property.getJavaType();
+ assert type != null : "property type is null";
+ String text = reader.getElementText();
+ try {
+ Context context = new InitialContext();
+ return new JNDIObjectFactory<T>(context, text);
+ } catch (NamingException e) {
+ throw new LoaderException(e);
+ }
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java Sat May 27 08:19:37 2006
@@ -76,7 +76,7 @@
}
@SuppressWarnings("unchecked")
- public <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) {
+ public <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) throws LoaderException {
Class<I> key = (Class<I>) implementation.getClass();
ComponentTypeLoader<I> loader = (ComponentTypeLoader<I>) componentTypeLoaders.get(key);
if (loader == null) {
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/PropertyLoader.java Sat May 27 08:19:37 2006
@@ -24,12 +24,20 @@
import org.apache.tuscany.spi.model.Property;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class PropertyLoader extends LoaderExtension {
+public class PropertyLoader extends LoaderExtension<Property> {
+ public PropertyLoader() {
+ }
+
+ public PropertyLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public QName getXMLType() {
return PROPERTY;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java Sat May 27 08:19:37 2006
@@ -28,12 +28,20 @@
import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class ReferenceLoader extends LoaderExtension {
+public class ReferenceLoader extends LoaderExtension<Reference> {
+ public ReferenceLoader() {
+ }
+
+ public ReferenceLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public QName getXMLType() {
return AssemblyConstants.REFERENCE;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java Sat May 27 08:19:37 2006
@@ -25,34 +25,50 @@
import org.apache.tuscany.spi.model.ModelObject;
import org.apache.tuscany.spi.model.Service;
import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.Binding;
+import org.apache.tuscany.spi.model.BoundService;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class ServiceLoader extends LoaderExtension {
+public class ServiceLoader extends LoaderExtension<Service> {
+ public ServiceLoader() {
+ }
+
+ public ServiceLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public QName getXMLType() {
return AssemblyConstants.SERVICE;
}
public Service load(XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
assert AssemblyConstants.SERVICE.equals(reader.getName());
- Service service = new Service();
- service.setName(reader.getAttributeValue(null, "name"));
-
+ String name = reader.getAttributeValue(null, "name");
+ Binding binding = null;
+ ServiceContract serviceContract = null;
while (true) {
int i = reader.next();
switch (i) {
case START_ELEMENT:
ModelObject o = registry.load(reader, deploymentContext);
if (o instanceof ServiceContract) {
- service.setServiceContract((ServiceContract) o);
+ serviceContract = (ServiceContract) o;
+ } else if (o instanceof Binding) {
+ binding = (Binding) o;
}
break;
case END_ELEMENT:
- return service;
+ if (binding != null) {
+ return new BoundService<Binding>(name, serviceContract, binding, null);
+ } else {
+ return new Service(name, serviceContract);
+ }
}
}
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java Sat May 27 08:19:37 2006
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2006 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.core.loader;
+
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.model.Property;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class StringParserPropertyFactory implements StAXPropertyFactory {
+ public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader, Property<T> property) throws XMLStreamException, LoaderException {
+ Class<T> type = property.getJavaType();
+ assert type != null : "property type is null";
+ String text = reader.getElementText();
+
+ // degenerate case where we are returning a String
+ if (String.class.equals(type)) {
+ return new SingletonObjectFactory<T>(type.cast(text));
+ }
+
+ // special handler to convert hexBinary to a byte[]
+ if (byte[].class.equals(type)) {
+ byte[] instance = new byte[text.length() >> 1];
+ for (int i = 0; i < instance.length; i++) {
+ instance[i] = (byte) (Character.digit(text.charAt(i << 1), 16) << 4 | Character.digit(text.charAt((i << 1) + 1), 16));
+ }
+ return new SingletonObjectFactory<T>(type.cast(instance));
+ }
+
+ // does this type have a static valueOf(String) method?
+ try {
+ Method valueOf = type.getMethod("valueOf", String.class);
+ if (Modifier.isStatic(valueOf.getModifiers())) {
+ try {
+ return new SingletonObjectFactory<T>(type.cast(valueOf.invoke(null, text)));
+ } catch (IllegalAccessException e) {
+ throw new AssertionError("getMethod returned an inaccessible method");
+ } catch (InvocationTargetException e) {
+ // FIXME we should throw something better
+ throw new LoaderException(e.getCause());
+ }
+ }
+ } catch (NoSuchMethodException e) {
+ // try something else
+ }
+
+ // does this type have a constructor that takes a String?
+ try {
+ Constructor<T> ctr = type.getConstructor(String.class);
+ return new SingletonObjectFactory<T>(ctr.newInstance(text));
+ } catch (NoSuchMethodException e) {
+ // try something else
+ } catch (IllegalAccessException e) {
+ throw new AssertionError("getConstructor returned an inaccessible method");
+ } catch (InstantiationException e) {
+ throw new LoaderException("Property type cannot be instantiated: " + type.getName());
+ } catch (InvocationTargetException e) {
+ // FIXME we should throw something better
+ throw new LoaderException(e.getCause());
+ }
+
+ // do we have a property editor for it?
+ PropertyEditor editor = PropertyEditorManager.findEditor(type);
+ if (editor != null) {
+ try {
+ editor.setAsText(text);
+ return new SingletonObjectFactory<T>(type.cast(editor.getValue()));
+ } catch (IllegalArgumentException e) {
+ // FIXME we should throw something better
+ throw new LoaderException(e);
+
+ }
+ }
+
+ // FIXME we should throw something better
+ throw new LoaderException("Do not have a way to parse a String into a " + type.getName());
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java Sat May 27 08:19:37 2006
@@ -46,7 +46,6 @@
this.destroyInvoker = destroyInvoker;
}
-
public List<Injector> getInjectors() {
return injectors;
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java Sat May 27 08:19:37 2006
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2006 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.core.system.loader;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.core.system.model.SystemBinding;
+import org.apache.tuscany.core.loader.StAXUtil;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SystemBindingLoader extends LoaderExtension<SystemBinding> {
+ public static final QName SYSTEM_BINDING = new QName("http://tuscany.apache.org/xmlns/system/0.9", "binding.system");
+
+ public SystemBindingLoader() {
+ }
+
+ public SystemBindingLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
+ protected QName getXMLType() {
+ return SYSTEM_BINDING;
+ }
+
+ public SystemBinding load(XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+ StAXUtil.skipToEndElement(reader);
+ return new SystemBinding();
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemBindingLoader.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -18,33 +18,38 @@
import java.net.URL;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.core.system.model.SystemImplementation;
import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.core.model.PojoComponentType;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.Property;
/**
* @version $Rev$ $Date$
*/
public class SystemComponentTypeLoader extends ComponentTypeLoaderExtension<SystemImplementation> {
- protected Class<SystemImplementation> getTypeClass() {
+ protected Class<SystemImplementation> getImplementationClass() {
return SystemImplementation.class;
}
- public void load(SystemImplementation implementation, DeploymentContext deploymentContext) {
+ public void load(SystemImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
Class<?> implClass = implementation.getImplementationClass();
- URL resource = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
- if (resource == null) {
- loadByIntrospection(implementation);
+ URL sidefile = implClass.getResource(JavaIntrospectionHelper.getBaseName(implClass) + ".componentType");
+ PojoComponentType componentType;
+ if (sidefile == null) {
+ componentType = loadByIntrospection(implementation);
} else {
- loadFromSidefile(implementation, resource);
+ componentType = loadFromSidefile(PojoComponentType.class, sidefile, deploymentContext);
}
+ implementation.setComponentType(componentType);
}
- protected void loadByIntrospection(SystemImplementation implementation) {
- }
-
- protected void loadFromSidefile(SystemImplementation implementation, URL sidefile) {
- throw new UnsupportedOperationException();
+ protected PojoComponentType loadByIntrospection(SystemImplementation implementation) {
+ PojoComponentType componentType = new PojoComponentType();
+ return componentType;
}
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2006 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.core.system.loader;
+
+import java.net.URL;
+
+import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
+import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.CompositeComponentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SystemCompositeComponentTypeLoader extends ComponentTypeLoaderExtension<SystemCompositeImplementation> {
+ public SystemCompositeComponentTypeLoader() {
+ }
+
+ public SystemCompositeComponentTypeLoader(LoaderRegistry loaderRegistry) {
+ super(loaderRegistry);
+ }
+
+ protected Class<SystemCompositeImplementation> getImplementationClass() {
+ return SystemCompositeImplementation.class;
+ }
+
+ public void load(SystemCompositeImplementation implementation, DeploymentContext deploymentContext) throws LoaderException {
+ URL scdlLocation = implementation.getScdlLocation();
+ CompositeComponentType componentType = loadFromSidefile(CompositeComponentType.class, scdlLocation, deploymentContext);
+ implementation.setComponentType(componentType);
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemCompositeComponentTypeLoader.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemImplementationLoader.java Sat May 27 08:19:37 2006
@@ -24,12 +24,20 @@
import org.apache.tuscany.core.system.model.SystemImplementation;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.extension.LoaderExtension;
/**
* @version $Rev$ $Date$
*/
-public class SystemImplementationLoader extends LoaderExtension {
+public class SystemImplementationLoader extends LoaderExtension<SystemImplementation> {
+ public SystemImplementationLoader() {
+ }
+
+ public SystemImplementationLoader(LoaderRegistry registry) {
+ super(registry);
+ }
+
public static final QName SYSTEM_IMPLEMENTATION = new QName("http://tuscany.apache.org/xmlns/system/0.9", "implementation.system");
protected QName getXMLType() {
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemBinding.java Sat May 27 08:19:37 2006
@@ -1,5 +1,7 @@
package org.apache.tuscany.core.system.model;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.spi.model.Binding;
/**
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemCompositeImplementation.java Sat May 27 08:19:37 2006
@@ -16,18 +16,31 @@
*/
package org.apache.tuscany.core.system.model;
+import java.net.URL;
+
import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.model.Implementation;
/**
- * Represents a system composite type
+ * Represents a system composite type.
+ *
* @version $Rev$ $Date$
*/
public class SystemCompositeImplementation extends Implementation<CompositeComponentType> {
+ private URL scdlLocation;
+
public SystemCompositeImplementation() {
}
public SystemCompositeImplementation(CompositeComponentType componentType) {
super(componentType);
+ }
+
+ public URL getScdlLocation() {
+ return scdlLocation;
+ }
+
+ public void setScdlLocation(URL scdlLocation) {
+ this.scdlLocation = scdlLocation;
}
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java Sat May 27 08:19:37 2006
@@ -19,6 +19,8 @@
import junit.framework.TestCase;
import org.apache.tuscany.core.system.context.SystemCompositeContext;
import org.apache.tuscany.core.system.context.SystemCompositeContextImpl;
+import org.apache.tuscany.core.deployer.DeployerImpl;
+import org.apache.tuscany.core.monitor.NullMonitorFactory;
import org.apache.tuscany.spi.deployer.Deployer;
import org.apache.tuscany.spi.bootstrap.ContextNames;
@@ -29,21 +31,11 @@
private DefaultBootstrapper bootstrapper;
public void testDeployerBootstrap() {
- SystemCompositeContext parent = new SystemCompositeContextImpl("test", null, null);
- SystemCompositeContext<Deployer> context =
- (SystemCompositeContext<Deployer>) bootstrapper.createDeployer(ContextNames.TUSCANY_DEPLOYER, parent);
- assertEquals("tuscany.deployer", context.getName());
- context.start();
-
- // todo this should work
-// Deployer deployer = context.getService();
-// assertNotNull(deployer);
- Deployer deployer = context.resolveExternalInstance(Deployer.class);
- assertNotNull(deployer);
+ DeployerImpl deployer = (DeployerImpl) bootstrapper.createDeployer();
}
protected void setUp() throws Exception {
super.setUp();
- bootstrapper = new DefaultBootstrapper();
+ bootstrapper = new DefaultBootstrapper(new NullMonitorFactory());
}
}
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Sat May 27 08:19:37 2006
@@ -0,0 +1,71 @@
+/**
+ *
+ * Copyright 2006 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.core.deployer;
+
+import java.net.URL;
+import java.util.Map;
+import javax.xml.stream.XMLInputFactory;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.bootstrap.DefaultBootstrapper;
+import org.apache.tuscany.core.mock.component.BasicInterface;
+import org.apache.tuscany.core.monitor.NullMonitorFactory;
+import org.apache.tuscany.core.system.model.SystemBinding;
+import org.apache.tuscany.core.system.model.SystemCompositeImplementation;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.BoundService;
+import org.apache.tuscany.spi.model.Component;
+import org.apache.tuscany.spi.model.CompositeComponentType;
+import org.apache.tuscany.spi.model.Service;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BootstrapDeployerTestCase extends TestCase {
+ private DeployerImpl deployer;
+ private DeploymentContext deploymentContext;
+ private Component<SystemCompositeImplementation> component;
+ private SystemCompositeImplementation implementation;
+
+ public void testBoot1() throws LoaderException {
+ URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
+ implementation.setScdlLocation(scdl);
+ deployer.load(component, deploymentContext);
+ CompositeComponentType componentType = implementation.getComponentType();
+ assertNotNull(componentType);
+ assertEquals("simple", componentType.getName());
+ Map<String, Service> services = componentType.getServices();
+ assertEquals(1, services.size());
+ BoundService service = (BoundService) services.get("service");
+ assertNotNull(service);
+ assertEquals("service", service.getName());
+ assertEquals(BasicInterface.class, service.getServiceContract().getInterfaceClass());
+ assertTrue(service.getBinding() instanceof SystemBinding);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
+ DefaultBootstrapper bootstrapper = new DefaultBootstrapper(new NullMonitorFactory());
+ deployer = (DeployerImpl) bootstrapper.createDeployer();
+ deploymentContext = new DeploymentContext(getClass().getClassLoader(), xmlFactory, null);
+ implementation = new SystemCompositeImplementation();
+ component = new Component<SystemCompositeImplementation>(implementation);
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java Sat May 27 08:19:37 2006
@@ -0,0 +1,28 @@
+/**
+ *
+ * Copyright 2006 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.core.mock.component;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface BasicInterface {
+ String returnsProperty();
+
+ BasicInterface returnsReference();
+
+ int returnsInt();
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterface.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java Sat May 27 08:19:37 2006
@@ -0,0 +1,54 @@
+/**
+ *
+ * Copyright 2006 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.core.mock.component;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BasicInterfaceImpl implements BasicInterface {
+ protected String protectedProperty;
+
+ public String publicProperty;
+
+ private String privateProperty;
+
+ public void setPrivateProperty(String privateProperty) {
+ this.privateProperty = privateProperty;
+ }
+
+ protected BasicInterface protectedReference;
+
+ public BasicInterface publicReference;
+
+ private BasicInterface privateReference;
+
+ public void setPrivateReference(BasicInterface privateReference) {
+ this.privateReference = privateReference;
+ }
+
+ public String returnsProperty() {
+ return privateProperty;
+ }
+
+ public BasicInterface returnsReference() {
+ return privateReference;
+ }
+
+ public int returnsInt() {
+ return 0;
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev,Date
Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl Sat May 27 08:19:37 2006
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 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.
+ -->
+<composite xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:system="http://tuscany.apache.org/xmlns/system/0.9"
+ name="simple">
+ <service name="service">
+ <interface.java interface="org.apache.tuscany.core.mock.component.BasicInterface"/>
+ <system:binding.system/>
+ </service>
+
+ <component name="component">
+ <system:implementation.system class="org.apache.tuscany.core.mock.component.BasicInterfaceImpl"/>
+<!--
+ <property name="publicProperty">propval</property>
+ <reference name="publicReference" target="target"/>
+-->
+ </component>
+</composite>
\ No newline at end of file
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java Sat May 27 08:19:37 2006
@@ -19,6 +19,7 @@
import org.apache.tuscany.spi.context.CompositeContext;
import org.apache.tuscany.spi.model.Component;
import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.loader.LoaderException;
/**
* Interface that can be used to deploy SCA bundles to a runtime.
@@ -32,5 +33,5 @@
* @param parent the parent context
* @param component the component definition
*/
- <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component);
+ <I extends Implementation<?>> void deploy(CompositeContext<?> parent, Component<I> component) throws LoaderException;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentTypeLoaderExtension.java Sat May 27 08:19:37 2006
@@ -16,34 +16,100 @@
*/
package org.apache.tuscany.spi.extension;
+import java.net.URL;
+import java.io.InputStream;
+import java.io.IOException;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.namespace.QName;
+
import org.osoa.sca.annotations.Init;
import org.osoa.sca.annotations.Property;
import org.osoa.sca.annotations.Destroy;
import org.apache.tuscany.spi.loader.ComponentTypeLoader;
import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.UnrecognizedElementException;
import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
/**
* @version $Rev$ $Date$
*/
-public abstract class ComponentTypeLoaderExtension<T extends Implementation> implements ComponentTypeLoader<T> {
+public abstract class ComponentTypeLoaderExtension<I extends Implementation> implements ComponentTypeLoader<I> {
protected LoaderRegistry loaderRegistry;
+ protected ComponentTypeLoaderExtension() {
+ }
+
+ protected ComponentTypeLoaderExtension(LoaderRegistry loaderRegistry) {
+ this.loaderRegistry = loaderRegistry;
+ }
+
@Property
public void setLoaderRegistry(LoaderRegistry loaderRegistry) {
this.loaderRegistry = loaderRegistry;
}
- protected abstract Class<T> getTypeClass();
-
+ protected abstract Class<I> getImplementationClass();
+
@Init
public void start() {
- loaderRegistry.registerLoader(getTypeClass(), this);
+ loaderRegistry.registerLoader(getImplementationClass(), this);
}
@Destroy
public void stop() {
- loaderRegistry.unregisterLoader(getTypeClass());
+ loaderRegistry.unregisterLoader(getImplementationClass());
}
+
+ protected <CT extends ComponentType> CT loadFromSidefile(Class<CT> type, URL sidefile, DeploymentContext deploymentContext) throws LoaderException {
+ try {
+ XMLStreamReader reader;
+ InputStream is;
+ is = sidefile.openStream();
+ try {
+ XMLInputFactory factory = deploymentContext.getXmlFactory();
+ reader = factory.createXMLStreamReader(is);
+ try {
+ reader.nextTag();
+ QName name = reader.getName();
+ ModelObject mo = loaderRegistry.load(reader, deploymentContext);
+ if (type.isInstance(mo)) {
+ return type.cast(mo);
+ } else {
+ UnrecognizedElementException e = new UnrecognizedElementException(name);
+ e.setResourceURI(sidefile.toString());
+ throw e;
+ }
+ } finally {
+ try {
+ reader.close();
+ } catch (XMLStreamException e) {
+ // ignore
+ }
+ }
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ } catch (IOException e) {
+ LoaderException sfe = new LoaderException(e.getMessage());
+ sfe.setResourceURI(sidefile.toString());
+ throw sfe;
+ } catch (XMLStreamException e) {
+ LoaderException sfe = new LoaderException(e.getMessage());
+ sfe.setResourceURI(sidefile.toString());
+ throw sfe;
+ }
+ }
+
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/LoaderExtension.java Sat May 27 08:19:37 2006
@@ -33,6 +33,13 @@
public abstract class LoaderExtension<T extends ModelObject> implements StAXElementLoader<T> {
protected LoaderRegistry registry;
+ protected LoaderExtension() {
+ }
+
+ protected LoaderExtension(LoaderRegistry registry) {
+ this.registry = registry;
+ }
+
@Autowire
public void setRegistry(LoaderRegistry registry) {
this.registry = registry;
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/ComponentTypeLoader.java Sat May 27 08:19:37 2006
@@ -28,6 +28,7 @@
*
* @param implementation the implementation whose component type information should be loaded
* @param deploymentContext the current deployment context
+ * @throws LoaderException if there was a problem loading the configuration type
*/
- void load(I implementation, DeploymentContext deploymentContext);
+ void load(I implementation, DeploymentContext deploymentContext) throws LoaderException;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java?rev=409831&r1=409830&r2=409831&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderRegistry.java Sat May 27 08:19:37 2006
@@ -75,5 +75,5 @@
<I extends Implementation<?>> void unregisterLoader(Class<I> key);
- <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext);
+ <I extends Implementation<?>> void loadComponentType(I implementation, DeploymentContext deploymentContext) throws LoaderException;
}
Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java?rev=409831&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java Sat May 27 08:19:37 2006
@@ -0,0 +1,26 @@
+/**
+ *
+ * Copyright 2006 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.spi.loader;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class UndefinedPropertyException extends LoaderException {
+ public UndefinedPropertyException(String name) {
+ super(name);
+ }
+}
Propchange: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/UndefinedPropertyException.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