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$
*/
[EMAIL PROTECTED](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 {