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/04/06 03:20:52 UTC
svn commit: r391872 - in /incubator/tuscany/java/sca/core/src:
main/java/org/apache/tuscany/core/config/impl/
main/java/org/apache/tuscany/core/loader/
main/java/org/apache/tuscany/core/loader/system/
main/java/org/apache/tuscany/core/system/assembly/ ...
Author: jboynes
Date: Wed Apr 5 18:20:49 2006
New Revision: 391872
URL: http://svn.apache.org/viewcvs?rev=391872&view=rev
Log:
simplify System implementation by moving introspection to loader
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java Wed Apr 5 18:20:49 2006
@@ -29,6 +29,8 @@
import org.apache.tuscany.core.config.ComponentTypeIntrospector;
import org.apache.tuscany.core.config.ConfigurationException;
import org.apache.tuscany.core.config.JavaIntrospectionHelper;
+import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
+import org.apache.tuscany.core.system.annotation.Autowire;
import org.apache.tuscany.model.assembly.AssemblyFactory;
import org.apache.tuscany.model.assembly.ComponentType;
import org.apache.tuscany.model.assembly.Multiplicity;
@@ -44,13 +46,22 @@
*
* @version $Rev$ $Date$
*/
+@org.osoa.sca.annotations.Service(interfaces = {ComponentTypeIntrospector.class})
public class Java5ComponentTypeIntrospector implements ComponentTypeIntrospector {
- private final AssemblyFactory factory;
+ private AssemblyFactory factory;
+
+ public Java5ComponentTypeIntrospector() {
+ }
public Java5ComponentTypeIntrospector(AssemblyFactory factory) {
this.factory = factory;
}
+ @Autowire
+ public void setFactory(SystemAssemblyFactory factory) {
+ this.factory = factory;
+ }
+
/**
* Returns a component type for the given class
*
@@ -141,9 +152,7 @@
}
// no @Service annotation, add all implemented interfaces with an @Remotable annotation
- Class[] interfaces = implClass.getInterfaces();
- for (int i = 0; i < interfaces.length; i++) {
- Class<?> intf = interfaces[i];
+ for (Class<?> intf : implClass.getInterfaces()) {
if (intf.isAnnotationPresent(Remotable.class)) {
addService(services, intf);
}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java Wed Apr 5 18:20:49 2006
@@ -40,6 +40,9 @@
import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
import org.apache.tuscany.core.system.assembly.SystemImplementation;
import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
import org.apache.tuscany.model.assembly.AssemblyModelContext;
import org.apache.tuscany.model.assembly.Component;
import org.apache.tuscany.model.assembly.EntryPoint;
@@ -95,40 +98,48 @@
public static ModuleComponent bootstrapLoader(String name, AssemblyModelContext context) {
SystemAssemblyFactory factory = new SystemAssemblyFactoryImpl();
+ ComponentTypeIntrospector introspector = new Java5ComponentTypeIntrospector(factory);
+
Module module = factory.createModule();
module.setName("org.apache.tuscany.core.system.loader");
List<Component> components = module.getComponents();
- components.add(bootstrapLoader(factory, ComponentLoader.class));
- components.add(bootstrapLoader(factory, ComponentTypeLoader.class));
- components.add(bootstrapLoader(factory, EntryPointLoader.class));
- components.add(bootstrapLoader(factory, ExternalServiceLoader.class));
- components.add(bootstrapLoader(factory, InterfaceJavaLoader.class));
- components.add(bootstrapLoader(factory, InterfaceWSDLLoader.class));
- components.add(bootstrapLoader(factory, ModuleFragmentLoader.class));
- components.add(bootstrapLoader(factory, ModuleLoader.class));
- components.add(bootstrapLoader(factory, PropertyLoader.class));
- components.add(bootstrapLoader(factory, ReferenceLoader.class));
- components.add(bootstrapLoader(factory, ServiceLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ComponentLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ComponentTypeLoader.class));
+ components.add(bootstrapLoader(factory, introspector, EntryPointLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ExternalServiceLoader.class));
+ components.add(bootstrapLoader(factory, introspector, InterfaceJavaLoader.class));
+ components.add(bootstrapLoader(factory, introspector, InterfaceWSDLLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ModuleFragmentLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ModuleLoader.class));
+ components.add(bootstrapLoader(factory, introspector, PropertyLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ReferenceLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ServiceLoader.class));
- components.add(bootstrapLoader(factory, SystemImplementationLoader.class));
- components.add(bootstrapLoader(factory, SystemBindingLoader.class));
+ components.add(bootstrapLoader(factory, introspector, SystemImplementationLoader.class));
+ components.add(bootstrapLoader(factory, introspector, SystemBindingLoader.class));
bootstrapService(factory, module, StAXLoaderRegistry.class, StAXLoaderRegistryImpl.class);
bootstrapService(factory, module, SystemAssemblyFactory.class, SystemAssemblyFactoryImpl.class);
+ bootstrapService(factory, module, ComponentTypeIntrospector.class, Java5ComponentTypeIntrospector.class);
+
ModuleComponent mc = factory.createModuleComponent();
mc.setName(name);
mc.setModuleImplementation(module);
-
mc.initialize(context);
return mc;
}
- private static Component bootstrapLoader(SystemAssemblyFactory factory, Class<?> loaderClass) {
+ private static Component bootstrapLoader(SystemAssemblyFactory factory, ComponentTypeIntrospector introspector, Class<?> loaderClass) {
SystemImplementation implementation = factory.createSystemImplementation();
implementation.setImplementationClass(loaderClass);
+ try {
+ implementation.setComponentType(introspector.introspect(loaderClass));
+ } catch (ConfigurationException e) {
+ throw (AssertionError) new AssertionError("Invalid bootstrap loader").initCause(e);
+ }
Component component = factory.createSimpleComponent();
component.setName(loaderClass.getName());
component.setComponentImplementation(implementation);
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java Wed Apr 5 18:20:49 2006
@@ -22,10 +22,13 @@
import org.osoa.sca.annotations.Scope;
+import org.apache.tuscany.common.resource.ResourceLoader;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.ConfigurationLoadException;
import org.apache.tuscany.core.loader.StAXUtil;
+import org.apache.tuscany.core.system.annotation.Autowire;
import org.apache.tuscany.core.system.assembly.SystemImplementation;
-import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.common.resource.ResourceLoader;
/**
* @version $Rev$ $Date$
@@ -34,6 +37,13 @@
public class SystemImplementationLoader extends AbstractLoader {
public static final QName SYSTEM_IMPLEMENTATION = new QName("http://org.apache.tuscany/xmlns/system/0.9", "implementation.system");
+ private ComponentTypeIntrospector introspector;
+
+ @Autowire
+ public void setIntrospector(ComponentTypeIntrospector introspector) {
+ this.introspector = introspector;
+ }
+
public QName getXMLType() {
return SYSTEM_IMPLEMENTATION;
}
@@ -46,9 +56,18 @@
assert SYSTEM_IMPLEMENTATION.equals(reader.getName());
SystemImplementation implementation = factory.createSystemImplementation();
String implClass = reader.getAttributeValue(null, "class");
+ Class<?> implementationClass;
try {
- implementation.setImplementationClass(resourceLoader.loadClass(implClass));
+ implementationClass = resourceLoader.loadClass(implClass);
+ implementation.setImplementationClass(implementationClass);
} catch (ClassNotFoundException e) {
+ throw (ConfigurationLoadException) new ConfigurationLoadException(e.getMessage()).initCause(e);
+ }
+
+ // todo we should allow componentType sidefiles for system implementations
+ try {
+ implementation.setComponentType(introspector.introspect(implementationClass));
+ } catch (ConfigurationException e) {
throw (ConfigurationLoadException) new ConfigurationLoadException(e.getMessage()).initCause(e);
}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java Wed Apr 5 18:20:49 2006
@@ -28,11 +28,11 @@
/**
* Returns the implementation class of the system component
*/
- Class getImplementationClass();
+ Class<?> getImplementationClass();
/**
* Sets the implementation class of the system component
*/
- void setImplementationClass(Class value);
+ void setImplementationClass(Class<?> value);
}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java Wed Apr 5 18:20:49 2006
@@ -45,50 +45,12 @@
protected SystemImplementationImpl() {
}
- public Class getImplementationClass() {
+ public Class<?> getImplementationClass() {
return implementationClass;
}
- public void setImplementationClass(Class value) {
+ public void setImplementationClass(Class<?> value) {
checkNotFrozen();
implementationClass = value;
- }
-
- public void initialize(AssemblyModelContext context) {
- if (isInitialized())
- return;
- this.modelContext = context;
- // Initialize the component type
- ComponentType componentType = getComponentType();
- if (componentType == null) {
- componentType = createComponentType(implementationClass);
- setComponentType(componentType);
- }
- super.initialize(modelContext);
- }
-
- /**
- * Creates the component type
- */
- private ComponentType createComponentType(Class<?> implClass) {
- ComponentType componentType;
- String baseName = JavaIntrospectionHelper.getBaseName(implClass);
- URL componentTypeFile = implClass.getResource(baseName + ".componentType");
- if (componentTypeFile != null) {
- componentType = modelContext.getAssemblyLoader().loadComponentType(componentTypeFile.toString());
- // FIXME workaround for TUSCANY-46 where the scope is not read - default system implementations to MODULE scope
- for (Service service : componentType.getServices()) {
- service.getServiceContract().setScope(Scope.MODULE);
- }
- } else {
- AssemblyFactory factory = new AssemblyFactoryImpl();
- ComponentTypeIntrospector introspector = new Java5ComponentTypeIntrospector(factory);
- try {
- componentType = introspector.introspect(implClass);
- } catch (ConfigurationException e) {
- throw new IllegalArgumentException("Unable to introspect implementation class: " + implClass.getName(), e);
- }
- }
- return componentType;
}
}
Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java Wed Apr 5 18:20:49 2006
@@ -26,6 +26,9 @@
import org.apache.tuscany.common.resource.ResourceLoader;
import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
import org.apache.tuscany.core.config.ConfigurationLoadException;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
import org.apache.tuscany.core.system.assembly.SystemImplementation;
import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
@@ -47,6 +50,7 @@
private SystemAssemblyFactory assemblyFactory;
private ResourceLoader resourceLoader;
private AssemblyModelContext modelContext;
+ private ComponentTypeIntrospector introspector;
public void testStringProperty() throws XMLStreamException, ConfigurationLoadException {
String xml = "<properties><propString>HelloWorld</propString></properties>";
@@ -91,7 +95,12 @@
private Component createFooComponent() {
SystemImplementation impl = assemblyFactory.createSystemImplementation();
impl.setImplementationClass(ServiceImpl.class);
- impl.initialize(modelContext);
+ try {
+ impl.setComponentType(introspector.introspect(ServiceImpl.class));
+ } catch (ConfigurationException e) {
+ throw new AssertionError();
+ }
+ impl.initialize(null);
Component component = assemblyFactory.createSimpleComponent();
component.setComponentImplementation(impl);
return component;
@@ -105,6 +114,7 @@
loader = new ComponentLoader();
loader.setFactory(assemblyFactory);
modelContext = new AssemblyModelContextImpl(assemblyFactory, null, resourceLoader);
+ introspector = new Java5ComponentTypeIntrospector(assemblyFactory);
}
public static interface Service {