summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/implementation-spring/src/main
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-16 05:42:26 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-16 05:42:26 +0000
commit4ae4002366ded3f4b19cd96f403d8b418fcf00a1 (patch)
tree9179891f11c9add734a777713cabf7e39a980908 /java/sca/modules/implementation-spring/src/main
parentd4cc9a0bdd43477858b8ac67b69a4cdd615ec741 (diff)
This is to change the Monitor to be request scoped for most of the cases:
Refactor the ArtifactProcessor/ModelResolver to take a ProcessorContext that holds context such as Monitor, Contribution for the contribution/artifact processing methods Refactor the Builder to take a BuilderContext that holds context such as Monitor, Definitions, Base binding mapping for the building methods Change the processor/resolver/builder implementation classes to not cache the Monitor git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@825773 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/implementation-spring/src/main')
-rw-r--r--java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java4
-rw-r--r--java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java57
-rw-r--r--java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java27
3 files changed, 47 insertions, 41 deletions
diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
index 434b705bd9..1a246fa03a 100644
--- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
+++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
@@ -22,15 +22,15 @@ package org.apache.tuscany.sca.implementation.spring;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.builder.BuilderContext;
import org.apache.tuscany.sca.assembly.builder.ImplementationBuilder;
-import org.apache.tuscany.sca.monitor.Monitor;
/**
*
*/
public class SpringImplementationBuilder implements ImplementationBuilder<SpringImplementation> {
- public void build(Component component, SpringImplementation implmentation, Monitor monitor) {
+ public void build(Component component, SpringImplementation implmentation, BuilderContext context) {
implmentation.build(component);
}
diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
index 315b9cec8c..9195b6c9cc 100644
--- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
+++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
@@ -56,6 +56,7 @@ import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.ContributionFactory;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
import org.apache.tuscany.sca.contribution.resolver.ClassReference;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
@@ -150,7 +151,7 @@ public class SpringXMLComponentTypeLoader {
* Spring implementation
*
*/
- public void load(SpringImplementation implementation, ModelResolver resolver) throws ContributionReadException {
+ public void load(SpringImplementation implementation, ModelResolver resolver, ProcessorContext context) throws ContributionReadException {
//System.out.println("Spring TypeLoader - load method start");
ComponentType componentType = implementation.getComponentType();
/* Check that there is a component type object already set */
@@ -159,16 +160,16 @@ public class SpringXMLComponentTypeLoader {
}
if (componentType.isUnresolved()) {
/* Fetch the location of the application-context file from the implementation */
- loadFromXML(implementation, resolver);
+ loadFromXML(implementation, resolver, context);
if (!componentType.isUnresolved())
implementation.setUnresolved(false);
} // end if
//System.out.println("Spring TypeLoader - load method complete");
} // end method load
- private Class<?> resolveClass(ModelResolver resolver, String className) throws ClassNotFoundException {
+ private Class<?> resolveClass(ModelResolver resolver, String className, ProcessorContext context) throws ClassNotFoundException {
ClassReference classReference = new ClassReference(className);
- classReference = resolver.resolveModel(ClassReference.class, classReference);
+ classReference = resolver.resolveModel(ClassReference.class, classReference, context);
if (classReference.isUnresolved()) {
throw new ClassNotFoundException(className);
}
@@ -183,7 +184,7 @@ public class SpringXMLComponentTypeLoader {
* @param implementation SpringImplementation into which to load the component type information
* @throws ContributionReadException Failed to read the contribution
*/
- private void loadFromXML(SpringImplementation implementation, ModelResolver resolver) throws ContributionReadException {
+ private void loadFromXML(SpringImplementation implementation, ModelResolver resolver, ProcessorContext context) throws ContributionReadException {
XMLStreamReader reader;
List<SpringBeanElement> beans = new ArrayList<SpringBeanElement>();
List<SpringSCAServiceElement> services = new ArrayList<SpringSCAServiceElement>();
@@ -195,10 +196,10 @@ public class SpringXMLComponentTypeLoader {
String contextPath = implementation.getLocation();
try {
- resource = resolveLocation(resolver, contextPath);
+ resource = resolveLocation(resolver, contextPath, context);
contextResources = getApplicationContextResource(resource);
- implementation.setClassLoader(new ContextClassLoader(resolver));
+ implementation.setClassLoader(new ContextClassLoader(resolver, context));
implementation.setResource(contextResources);
// The URI is used to uniquely identify the Implementation
implementation.setURI(resource.toString());
@@ -210,7 +211,7 @@ public class SpringXMLComponentTypeLoader {
List<SpringSCAPropertyElement> appCxtProperties = new ArrayList<SpringSCAPropertyElement>();
reader = xmlInputFactory.createXMLStreamReader(contextResource.openStream());
// Read the beans, services, references and properties for individual application context
- readContextDefinition(resolver, reader, contextPath, appCxtBeans, appCxtServices, appCxtReferences, appCxtProperties);
+ readContextDefinition(resolver, reader, contextPath, appCxtBeans, appCxtServices, appCxtReferences, appCxtProperties, context);
// Validate the beans from individual application context for uniqueness
validateBeans(appCxtBeans, appCxtServices, appCxtReferences, appCxtProperties);
// Add all the validated beans to the generic list
@@ -229,12 +230,12 @@ public class SpringXMLComponentTypeLoader {
/* At this point, the complete application-context.xml file has been read and its contents */
/* stored in the lists of beans, services, references. These are now used to generate */
/* the implied componentType for the application context */
- generateComponentType(implementation, resolver, beans, services, references, scaproperties);
+ generateComponentType(implementation, resolver, beans, services, references, scaproperties, context);
return;
} // end method loadFromXML
- private URL resolveLocation(ModelResolver resolver, String contextPath) throws MalformedURLException,
+ private URL resolveLocation(ModelResolver resolver, String contextPath, ProcessorContext context) throws MalformedURLException,
ContributionReadException {
URL resource = null;
URI uri = URI.create(contextPath);
@@ -242,7 +243,7 @@ public class SpringXMLComponentTypeLoader {
Artifact artifact = contributionFactory.createArtifact();
artifact.setUnresolved(true);
artifact.setURI(contextPath);
- artifact = resolver.resolveModel(Artifact.class, artifact);
+ artifact = resolver.resolveModel(Artifact.class, artifact, context);
if (!artifact.isUnresolved()) {
resource = new URL(artifact.getLocation());
} else {
@@ -258,10 +259,10 @@ public class SpringXMLComponentTypeLoader {
* Method which returns the XMLStreamReader for the Spring application-context.xml file
* specified in the location attribute
*/
- private XMLStreamReader getApplicationContextReader(ModelResolver resolver, String location) throws ContributionReadException {
+ private XMLStreamReader getApplicationContextReader(ModelResolver resolver, String location, ProcessorContext context) throws ContributionReadException {
try {
- URL resource = getApplicationContextResource(resolveLocation(resolver, location)).get(0);
+ URL resource = getApplicationContextResource(resolveLocation(resolver, location, context)).get(0);
XMLStreamReader reader =
xmlInputFactory.createXMLStreamReader(resource.openStream());
return reader;
@@ -275,6 +276,7 @@ public class SpringXMLComponentTypeLoader {
/**
* Method which reads the spring context definitions from Spring application-context.xml
* file and identifies the defined beans, properties, services and references
+ * @param context
*/
private void readContextDefinition(ModelResolver resolver,
XMLStreamReader reader,
@@ -282,7 +284,7 @@ public class SpringXMLComponentTypeLoader {
List<SpringBeanElement> beans,
List<SpringSCAServiceElement> services,
List<SpringSCAReferenceElement> references,
- List<SpringSCAPropertyElement> scaproperties) throws ContributionReadException {
+ List<SpringSCAPropertyElement> scaproperties, ProcessorContext context) throws ContributionReadException {
SpringBeanElement bean = null;
@@ -299,9 +301,9 @@ public class SpringXMLComponentTypeLoader {
if (location != null) {
// FIXME - need to find a right way of generating this path
String resourcePath = contextPath.substring(0, contextPath.lastIndexOf("/")+1) + location;
- XMLStreamReader ireader = getApplicationContextReader(resolver, resourcePath);
+ XMLStreamReader ireader = getApplicationContextReader(resolver, resourcePath, context);
// Read the context definition for the identified imported resource
- readContextDefinition(resolver, ireader, contextPath, beans, services, references, scaproperties);
+ readContextDefinition(resolver, ireader, contextPath, beans, services, references, scaproperties, context);
}
} else if (SpringImplementationConstants.SCA_SERVICE_ELEMENT.equals(qname)) {
// The value of the @name attribute of an <sca:service/> subelement of a <beans/>
@@ -538,7 +540,8 @@ public class SpringXMLComponentTypeLoader {
List<SpringBeanElement> beans,
List<SpringSCAServiceElement> services,
List<SpringSCAReferenceElement> references,
- List<SpringSCAPropertyElement> scaproperties) throws ContributionReadException {
+ List<SpringSCAPropertyElement> scaproperties,
+ ProcessorContext context) throws ContributionReadException {
/*
* 1. Each sca:service becomes a service in the component type
* 2. Each sca:reference becomes a reference in the component type
@@ -558,7 +561,7 @@ public class SpringXMLComponentTypeLoader {
Iterator<SpringSCAServiceElement> its = services.iterator();
while (its.hasNext()) {
SpringSCAServiceElement serviceElement = its.next();
- Class<?> interfaze = resolveClass(resolver, serviceElement.getType());
+ Class<?> interfaze = resolveClass(resolver, serviceElement.getType(), context);
Service theService = createService(interfaze, serviceElement.getName());
// Spring allows duplication of bean definitions in multiple context scenario,
// in such cases, the latest bean definition overrides the older ones, hence
@@ -590,7 +593,7 @@ public class SpringXMLComponentTypeLoader {
Iterator<SpringSCAReferenceElement> itr = references.iterator();
while (itr.hasNext()) {
SpringSCAReferenceElement referenceElement = itr.next();
- Class<?> interfaze = resolveClass(resolver, referenceElement.getType());
+ Class<?> interfaze = resolveClass(resolver, referenceElement.getType(), context);
Reference theReference = createReference(interfaze, referenceElement.getName());
// Override the older bean definition with the latest ones
// for the duplicate definitions found.
@@ -647,7 +650,7 @@ public class SpringXMLComponentTypeLoader {
// If its not a valid bean for service, ignore it
if (!isvalidBeanForService(beanElement)) continue;
// Load the Spring bean class
- Class<?> beanClass = resolveClass(resolver, beanElement.getClassName());
+ Class<?> beanClass = resolveClass(resolver, beanElement.getClassName(), context);
// Introspect the bean
beanIntrospector =
new SpringBeanIntrospector(assemblyFactory, javaFactory, policyFactory, beanElement.getCustructorArgs());
@@ -674,7 +677,7 @@ public class SpringXMLComponentTypeLoader {
if (beanElement.getProperties().isEmpty() && beanElement.getCustructorArgs().isEmpty())
continue;
- Class<?> beanClass = resolveClass(resolver, beanElement.getClassName());
+ Class<?> beanClass = resolveClass(resolver, beanElement.getClassName(), context);
// Introspect the bean
beanIntrospector =
new SpringBeanIntrospector(assemblyFactory, javaFactory, policyFactory, beanElement.getCustructorArgs());
@@ -709,7 +712,7 @@ public class SpringXMLComponentTypeLoader {
// The name of the reference in this case is the string in
// the @ref attribute of the Spring property element, NOT the
// name of the field in the Spring bean....
- Class<?> interfaze = resolveClass(resolver, (propertyMap.get(propertyElement.getName()).getType()).getName());
+ Class<?> interfaze = resolveClass(resolver, (propertyMap.get(propertyElement.getName()).getType()).getName(), context);
Reference theReference = createReference(interfaze, propertyRef);
implementation.setUnresolvedBeanRef(propertyRef, theReference);
} // end if
@@ -725,7 +728,7 @@ public class SpringXMLComponentTypeLoader {
if (propertyRefUnresolved(constructorArgRef, beans, references, scaproperties)) {
for (JavaParameterImpl parameter : constructor.getParameters()) {
String paramType = parameter.getType().getName();
- Class<?> interfaze = resolveClass(resolver, paramType);
+ Class<?> interfaze = resolveClass(resolver, paramType, context);
// Create a component type reference/property if the constructor-arg element has a
// type attribute OR index attribute declared...
if ((conArgElement.getType() != null && paramType.equals(conArgElement.getType())) ||
@@ -1113,22 +1116,24 @@ public class SpringXMLComponentTypeLoader {
}
private class ContextClassLoader extends ClassLoader {
- public ContextClassLoader(ModelResolver resolver) {
+ public ContextClassLoader(ModelResolver resolver, ProcessorContext context) {
super();
this.resolver = resolver;
+ this.context = context;
}
private ModelResolver resolver;
+ private ProcessorContext context;
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
- return SpringXMLComponentTypeLoader.this.resolveClass(resolver, name);
+ return SpringXMLComponentTypeLoader.this.resolveClass(resolver, name, context);
}
@Override
protected URL findResource(String name) {
try {
- return resolveLocation(resolver, name);
+ return resolveLocation(resolver, name, context);
} catch (Exception e) {
return null;
}
diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
index ce8c6522f4..5d896ca726 100644
--- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
+++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
@@ -33,6 +33,7 @@ import org.apache.tuscany.sca.assembly.xml.PolicySubjectProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
@@ -61,17 +62,16 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
private JavaInterfaceFactory javaFactory;
private PolicyFactory policyFactory;
private PolicySubjectProcessor policyProcessor;
- private Monitor monitor;
+
private FactoryExtensionPoint factories;
- public SpringImplementationProcessor(FactoryExtensionPoint modelFactories, Monitor monitor) {
+ public SpringImplementationProcessor(FactoryExtensionPoint modelFactories) {
this.factories = modelFactories;
this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
this.javaFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
this.policyProcessor = new PolicySubjectProcessor(policyFactory);
- this.monitor = monitor;
}
/**
@@ -81,7 +81,7 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
* @param message
* @param model
*/
- private void error(String message, Object model, Exception ex) {
+ private void error(Monitor monitor, String message, Object model, Exception ex) {
if (monitor != null) {
Problem problem = monitor.createProblem(this.getClass().getName(), "impl-spring-validation-messages", Severity.ERROR, model, message, ex);
monitor.problem(problem);
@@ -95,7 +95,7 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
* @param message
* @param model
*/
- private void error(String message, Object model, Object... messageParameters) {
+ private void error(Monitor monitor, String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = monitor.createProblem(this.getClass().getName(), "impl-spring-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
monitor.problem(problem);
@@ -121,7 +121,7 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
* then the default behaviour is to build an application context using all the *.xml files
* in the METAINF/spring directory.
*/
- public SpringImplementation read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+ public SpringImplementation read(XMLStreamReader reader, ProcessorContext context) throws ContributionReadException, XMLStreamException {
// Create the Spring implementation
SpringImplementation springImplementation = null;
@@ -134,7 +134,7 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
springImplementation.setUnresolved(true);
processComponentType(springImplementation);
} else {
- error("LocationAttributeMissing", reader);
+ error(context.getMonitor(), "LocationAttributeMissing", reader);
//throw new ContributionReadException(MSG_LOCATION_MISSING);
}
@@ -169,7 +169,7 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
* Write out the XML representation of the Spring implementation
* <implementation.spring location="..." />
*/
- public void write(SpringImplementation springImplementation, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+ public void write(SpringImplementation springImplementation, XMLStreamWriter writer, ProcessorContext context) throws ContributionWriteException, XMLStreamException {
// Write <implementation.spring>
writer.writeStartElement(Constants.SCA11_NS, IMPLEMENTATION_SPRING);
@@ -187,30 +187,31 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
* Resolves the Spring implementation - loads the Spring application-context XML and
* derives the spring implementation componentType from it
*/
- public void resolve(SpringImplementation springImplementation, ModelResolver resolver)
+ public void resolve(SpringImplementation springImplementation, ModelResolver resolver, ProcessorContext context)
throws ContributionResolveException {
if (springImplementation == null)
return;
+ Monitor monitor = context.getMonitor();
/* Load the Spring component type by reading the Spring application context */
SpringXMLComponentTypeLoader springLoader =
new SpringXMLComponentTypeLoader(factories, assemblyFactory, javaFactory, policyFactory, monitor);
try {
// Load the Spring Implementation information from its application context file...
- springLoader.load(springImplementation, resolver);
+ springLoader.load(springImplementation, resolver, context);
} catch (ContributionReadException e) {
ContributionResolveException ce = new ContributionResolveException(e);
- error("ContributionResolveException", resolver, ce);
+ error(monitor, "ContributionResolveException", resolver, ce);
throw ce;
}
ComponentType ct = springImplementation.getComponentType();
if (ct.isUnresolved()) {
// If the introspection fails to resolve, try to find a side file...
- ComponentType componentType = resolver.resolveModel(ComponentType.class, ct);
+ ComponentType componentType = resolver.resolveModel(ComponentType.class, ct, context);
if (componentType.isUnresolved()) {
- error("UnableToResolveComponentType", resolver);
+ error(monitor, "UnableToResolveComponentType", resolver);
//throw new ContributionResolveException("SpringArtifactProcessor: unable to resolve componentType for Spring component");
} else {
springImplementation.setComponentType(componentType);