You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/05/15 10:14:33 UTC
svn commit: r406580 - in /incubator/tuscany/sandbox/jboynes/sca:
containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/
containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/
core2/src/main/java/o...
Author: jmarino
Date: Mon May 15 01:14:29 2006
New Revision: 406580
URL: http://svn.apache.org/viewcvs?rev=406580&view=rev
Log:
builder registry refactors
Modified:
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java Mon May 15 01:14:29 2006
@@ -26,7 +26,7 @@
@Scope("MODULE")
public class JavaComponentBuilder extends ComponentBuilderExtension<JavaImplementation> {
- protected JavaAtomicContext createContext(CompositeContext parent, Component<JavaImplementation> component)
+ public JavaAtomicContext build(CompositeContext parent, Component<JavaImplementation> component)
throws BuilderConfigException {
PojoComponentType componentType = component.getImplementation().getComponentType();
Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java Mon May 15 01:14:29 2006
@@ -13,6 +13,7 @@
import org.apache.tuscany.core.model.PojoComponentType;
import org.apache.tuscany.core.wire.jdk.JDKWireFactoryService;
import org.apache.tuscany.core.wire.system.WireServiceImpl;
+import org.apache.tuscany.core.builder.BuilderRegistryImpl;
import org.apache.tuscany.model.Component;
import org.apache.tuscany.model.JavaServiceContract;
import org.apache.tuscany.model.Scope;
@@ -22,6 +23,7 @@
import org.apache.tuscany.spi.context.ScopeRegistry;
import org.apache.tuscany.spi.context.WorkContext;
import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.builder.BuilderRegistry;
/**
* @version $$Rev$$ $$Date$$
@@ -53,10 +55,12 @@
sourceImpl.setImplementationClass(SourceImpl.class);
Component<JavaImplementation> sourceComponent = new Component<JavaImplementation>(sourceImpl);
+ BuilderRegistry builderRegistry = new BuilderRegistryImpl(wireService,scopeRegistry);
JavaComponentBuilder builder = new JavaComponentBuilder();
- builder.setWireService(wireService);
- builder.setScopeRegistry(scopeRegistry);
- JavaAtomicContext<Source> ctx = (JavaAtomicContext<Source>) builder.build(parent, sourceComponent);
+ builderRegistry.register(builder);
+ JavaAtomicContext<Source> ctx = (JavaAtomicContext<Source>) builderRegistry.build(parent, sourceComponent);
+
+
ctx.start();
Source source = ctx.getService();
assertNotNull(source);
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Mon May 15 01:14:29 2006
@@ -25,15 +25,27 @@
import org.apache.tuscany.model.BoundReference;
import org.apache.tuscany.model.BoundService;
import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.ComponentType;
import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.model.Reference;
+import org.apache.tuscany.model.Scope;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.BindingBuilder;
+import org.apache.tuscany.spi.builder.BuilderConfigException;
import org.apache.tuscany.spi.builder.BuilderRegistry;
import org.apache.tuscany.spi.builder.ComponentBuilder;
import org.apache.tuscany.spi.builder.WireBuilder;
+import org.apache.tuscany.spi.context.AtomicContext;
+import org.apache.tuscany.spi.context.ComponentContext;
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.wire.SourceWire;
import org.apache.tuscany.spi.wire.TargetWire;
+import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
/**
* @version $Rev$ $Date$
@@ -42,21 +54,48 @@
private final Map<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>> componentBuilders = new HashMap<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>>();
private final Map<Class<? extends Binding>, BindingBuilder<? extends Binding>> bindingBuilders = new HashMap<Class<? extends Binding>, BindingBuilder<? extends Binding>>();
+ protected WireService wireService;
+ protected ScopeRegistry scopeRegistry;
+
+ public BuilderRegistryImpl() {
+ }
+
+ public BuilderRegistryImpl(WireService wireService, ScopeRegistry scopeRegistry) {
+ this.wireService = wireService;
+ this.scopeRegistry = scopeRegistry;
+ }
+
+ @Autowire
+ public void setWireService(WireService wireService) {
+ this.wireService = wireService;
+ }
+
+ @Autowire
+ public void setScopeRegistry(ScopeRegistry scopeRegistry) {
+ this.scopeRegistry = scopeRegistry;
+ }
+
public <I extends Implementation<?>> void register(ComponentBuilder<I> builder) {
- Type[] interfaces = builder.getClass().getGenericInterfaces();
- for (Type type : interfaces) {
- if (! (type instanceof ParameterizedType)) {
- continue;
- }
- ParameterizedType interfaceType = (ParameterizedType) type;
- if (!ComponentBuilder.class.equals(interfaceType.getRawType())) {
- continue;
- }
- Class<I> implClass = (Class<I>) interfaceType.getActualTypeArguments()[0];
- register(implClass, builder);
- return;
- }
- throw new IllegalArgumentException("builder is not generified");
+ //Class<I> implClass = (Class<I>) recurseInterfaces(builder.getClass());
+ Class<I> implClass = JavaIntrospectionHelper.introspectGeneric(builder.getClass(),0);
+ if (implClass == null){
+ throw new IllegalArgumentException("builder is not generified");
+ }
+ register(implClass, builder);
+// Type[] interfaces = builder.getClass().getGenericInterfaces();
+// for (Type type : interfaces) {
+// if (! (type instanceof ParameterizedType)) {
+// continue;
+// }
+// ParameterizedType interfaceType = (ParameterizedType) type;
+// if (!ComponentBuilder.class.equals(interfaceType.getRawType())) {
+// continue;
+// }
+// Class<I> implClass = (Class<I>) interfaceType.getActualTypeArguments()[0];
+// register(implClass, builder);
+// return;
+// }
+// throw new IllegalArgumentException("builder is not generified");
}
public <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder) {
@@ -66,7 +105,34 @@
public <I extends Implementation<?>> Context build(CompositeContext parent, Component<I> component) {
Class<I> implClass = (Class<I>) component.getImplementation().getClass();
ComponentBuilder<I> componentBuilder = (ComponentBuilder<I>) componentBuilders.get(implClass);
- return componentBuilder.build(parent, component);
+
+ ComponentContext context = componentBuilder.build(parent, component);
+ ComponentType componentType = component.getImplementation().getComponentType();
+ assert(componentType != null): "Component type must be set";
+ // create target wires
+ for (Service service : componentType.getServices().values()) {
+ TargetWire wire = wireService.createTargetWire(service);
+ context.addTargetWire(wire);
+ }
+ // create source wires
+ for (Reference reference : componentType.getReferences().values()) {
+ SourceWire wire = wireService.createSourceWire(reference);
+ context.addSourceWire(wire);
+ }
+ if (context instanceof AtomicContext) {
+ AtomicContext ctx = (AtomicContext) context;
+ Scope scope = ctx.getScope();
+ if (scope == null) {
+ scope = Scope.STATELESS;
+ }
+ ScopeContext scopeContext = scopeRegistry.getScopeContext(scope);
+ if (scopeContext == null) {
+ throw new BuilderConfigException("Scope context not registered for scope " + scope);
+ }
+ ctx.setScopeContext(scopeContext);
+ scopeContext.register(ctx);
+ }
+ return context;
}
public <B extends Binding> void register(BindingBuilder<B> builder) {
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java Mon May 15 01:14:29 2006
@@ -24,16 +24,16 @@
import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.builder.BuilderConfigException;
import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.ComponentContext;
import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
/**
* @version $$Rev$$ $$Date$$
*/
//@SuppressWarnings("unchecked")
public class SystemComponentBuilder implements ComponentBuilder<SystemImplementation> {
-
- public Context build(CompositeContext parent, Component<SystemImplementation> component) throws BuilderConfigException {
+
+ public ComponentContext build(CompositeContext parent, Component<SystemImplementation> component) throws BuilderConfigException {
PojoComponentType componentType = component.getImplementation().getComponentType();
List<Class<?>> serviceInterfaces = new ArrayList<Class<?>>();
for (Service service : componentType.getServices().values()) {
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java Mon May 15 01:14:29 2006
@@ -438,7 +438,7 @@
*/
public static Class introspectGeneric(Class clazz, int pos) {
assert(clazz != null): "No class specified";
- Type type = clazz.getClass().getGenericSuperclass();
+ Type type = clazz.getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] args = ((ParameterizedType) type).getActualTypeArguments();
if (args.length <= pos) {
@@ -446,7 +446,16 @@
}
return (Class) ((ParameterizedType) type).getActualTypeArguments()[pos];
} else {
- throw new AssertionError("Subclasses of " + clazz.getName() + " must be genericized");
+ Type[] interfaces = clazz.getGenericInterfaces();
+ for (Type itype : interfaces) {
+ if (! (itype instanceof ParameterizedType)) {
+ continue;
+ }
+ ParameterizedType interfaceType = (ParameterizedType) itype;
+ return (Class) interfaceType.getActualTypeArguments()[0];
+ }
+
+ throw new AssertionError(clazz.getName() + " must be genericized");
}
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Mon May 15 01:14:29 2006
@@ -19,9 +19,10 @@
import junit.framework.TestCase;
import org.apache.tuscany.model.Component;
import org.apache.tuscany.model.CompositeImplementation;
+import org.apache.tuscany.model.CompositeComponentType;
import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.ComponentContext;
import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
/**
* @version $Rev$ $Date$
@@ -33,6 +34,7 @@
GenerifiedBuilder builder = new GenerifiedBuilder();
registry.register(builder);
Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+ component.getImplementation().setComponentType(new CompositeComponentType());
registry.build(null, component);
}
@@ -40,6 +42,7 @@
RawBuilder builder = new RawBuilder();
registry.register(CompositeImplementation.class, builder);
Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+ component.getImplementation().setComponentType(new CompositeComponentType());
registry.build(null, component);
}
@@ -49,14 +52,14 @@
}
public static class GenerifiedBuilder implements ComponentBuilder<CompositeImplementation> {
- public Context build(CompositeContext parent, Component<CompositeImplementation> component) {
+ public ComponentContext build(CompositeContext parent, Component<CompositeImplementation> component) {
return null;
}
}
@SuppressWarnings({"RawUseOfParameterizedType"})
public static class RawBuilder implements ComponentBuilder {
- public Context build(CompositeContext parent, Component component) {
+ public ComponentContext build(CompositeContext parent, Component component) {
return null;
}
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java Mon May 15 01:14:29 2006
@@ -18,12 +18,12 @@
import org.apache.tuscany.model.Component;
import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.spi.context.ComponentContext;
import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
/**
* @version $Rev$ $Date$
*/
public interface ComponentBuilder<I extends Implementation<?>> {
- Context build(CompositeContext parent, Component<I> component) throws BuilderConfigException;
+ ComponentContext build(CompositeContext parent, Component<I> component) throws BuilderConfigException;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java Mon May 15 01:14:29 2006
@@ -1,24 +1,9 @@
package org.apache.tuscany.spi.extension;
-import org.apache.tuscany.model.Component;
-import org.apache.tuscany.model.ComponentType;
import org.apache.tuscany.model.Implementation;
-import org.apache.tuscany.model.Reference;
-import org.apache.tuscany.model.Scope;
-import org.apache.tuscany.model.Service;
import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.builder.BuilderConfigException;
import org.apache.tuscany.spi.builder.BuilderRegistry;
import org.apache.tuscany.spi.builder.ComponentBuilder;
-import org.apache.tuscany.spi.context.AtomicContext;
-import org.apache.tuscany.spi.context.ComponentContext;
-import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
-import org.apache.tuscany.spi.context.ScopeRegistry;
-import org.apache.tuscany.spi.context.ScopeContext;
-import org.apache.tuscany.spi.wire.SourceWire;
-import org.apache.tuscany.spi.wire.TargetWire;
-import org.apache.tuscany.spi.wire.WireService;
import org.osoa.sca.annotations.Init;
/**
@@ -28,60 +13,15 @@
public abstract class ComponentBuilderExtension<I extends Implementation<?>> implements ComponentBuilder<I> {
protected BuilderRegistry builderRegistry;
- protected WireService wireService;
- protected ScopeRegistry scopeRegistry;
@Autowire
public void setBuilderRegistry(BuilderRegistry registry) {
this.builderRegistry = registry;
}
- @Autowire
- public void setWireService(WireService wireService) {
- this.wireService = wireService;
- }
-
- @Autowire
- public void setScopeRegistry(ScopeRegistry scopeRegistry) {
- this.scopeRegistry = scopeRegistry;
- }
-
@Init(eager = true)
public void init() {
builderRegistry.register(this);
}
- @SuppressWarnings("unchecked")
- public Context build(CompositeContext parent, Component<I> component) throws BuilderConfigException {
- ComponentType componentType = component.getImplementation().getComponentType();
- ComponentContext context = createContext(parent, component);
- // create target wires
- for (Service service : componentType.getServices().values()) {
- TargetWire wire = wireService.createTargetWire(service);
- context.addTargetWire(wire);
- }
- // create source wires
- for (Reference reference : componentType.getReferences().values()) {
- SourceWire wire = wireService.createSourceWire(reference);
- context.addSourceWire(wire);
- }
- //TODO this could be moved up to the runtime
- if (context instanceof AtomicContext) {
- AtomicContext ctx = (AtomicContext) context;
- Scope scope = ctx.getScope();
- if (scope == null) {
- scope = Scope.STATELESS;
- }
- ScopeContext scopeContext = scopeRegistry.getScopeContext(scope);
- if (scopeContext == null){
- throw new BuilderConfigException("Scope context not registered for scope "+ scope);
- }
- ctx.setScopeContext(scopeContext);
- scopeContext.register(ctx);
-
- }
- return context;
- }
-
- protected abstract ComponentContext createContext(CompositeContext parent, Component<I> component);
}