summaryrefslogtreecommitdiffstats
path: root/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java
diff options
context:
space:
mode:
Diffstat (limited to 'tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java')
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaAssemblyFactory.java30
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaImplementation.java39
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaAssemblyFactoryImpl.java45
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaImplementationImpl.java44
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaContextFactoryBuilder.java113
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java38
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaContextFactory.java341
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/context/JavaAtomicContext.java165
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/AbstractJavaComponentInvoker.java93
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/ScopedJavaComponentInvoker.java89
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/StaticJavaComponentTargetInvoker.java50
-rw-r--r--tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaImplementationLoader.java165
12 files changed, 0 insertions, 1212 deletions
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaAssemblyFactory.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaAssemblyFactory.java
deleted file mode 100644
index 90271179d1..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaAssemblyFactory.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.assembly;
-
-import org.apache.tuscany.model.assembly.AssemblyFactory;
-
-
-/**
- * The Factory for the model.
- */
-public interface JavaAssemblyFactory extends AssemblyFactory {
- /**
- * Returns a new JavaImplementation.
- */
- JavaImplementation createJavaImplementation();
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaImplementation.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaImplementation.java
deleted file mode 100644
index a87b8ea1bb..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/JavaImplementation.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.assembly;
-
-import org.apache.tuscany.model.assembly.AtomicImplementation;
-
-
-/**
- * Represents a java implementation.
- *
- * @version $Rev$ $Date$
- */
-public interface JavaImplementation extends AtomicImplementation {
-
- /**
- * Returns the implementation class.
- */
- Class<?> getImplementationClass();
-
- /**
- * Sets the implementation class.
- */
- void setImplementationClass(Class<?> value);
-
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaAssemblyFactoryImpl.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaAssemblyFactoryImpl.java
deleted file mode 100644
index 3337c287ac..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaAssemblyFactoryImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.assembly.impl;
-
-import org.osoa.sca.annotations.Service;
-
-import org.apache.tuscany.container.java.assembly.JavaAssemblyFactory;
-import org.apache.tuscany.container.java.assembly.JavaImplementation;
-import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl;
-
-/**
- * A factory for the model.
- */
-@Service(interfaces = {JavaAssemblyFactory.class})
-public class JavaAssemblyFactoryImpl extends AssemblyFactoryImpl implements JavaAssemblyFactory {
-
- /**
- * Constructor
- */
- public JavaAssemblyFactoryImpl() {
- super();
- }
-
- /**
- * @see org.apache.tuscany.container.java.assembly.JavaAssemblyFactory#createJavaImplementation()
- */
- public JavaImplementation createJavaImplementation() {
- return new JavaImplementationImpl();
- }
-
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaImplementationImpl.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaImplementationImpl.java
deleted file mode 100644
index 57a98f4ad6..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/assembly/impl/JavaImplementationImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.assembly.impl;
-
-import org.apache.tuscany.container.java.assembly.JavaImplementation;
-import org.apache.tuscany.model.assembly.impl.AtomicImplementationImpl;
-
-/**
- * An implementation of JavaImplementation.
- *
- * @version $Rev$ $Date$
- */
-public class JavaImplementationImpl extends AtomicImplementationImpl implements JavaImplementation {
- private Class<?> implementationClass;
-
- /**
- * Default constructor.
- */
- protected JavaImplementationImpl() {
- }
-
- public Class<?> getImplementationClass() {
- return implementationClass;
- }
-
- public void setImplementationClass(Class<?> value) {
- checkNotFrozen();
- implementationClass = value;
- }
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaContextFactoryBuilder.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaContextFactoryBuilder.java
deleted file mode 100644
index de915738f9..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaContextFactoryBuilder.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.builder;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tuscany.container.java.assembly.JavaImplementation;
-import org.apache.tuscany.container.java.config.JavaContextFactory;
-import org.apache.tuscany.core.extension.config.extensibility.ComponentNameExtensibilityElement;
-import org.apache.tuscany.core.extension.config.extensibility.ContextExtensibilityElement;
-import org.apache.tuscany.core.extension.config.extensibility.DestroyInvokerExtensibilityElement;
-import org.apache.tuscany.core.extension.config.extensibility.InitInvokerExtensibilityElement;
-import org.apache.tuscany.core.extension.config.InjectorExtensibilityElement;
-import org.apache.tuscany.core.builder.BuilderConfigException;
-import org.apache.tuscany.core.builder.BuilderException;
-import org.apache.tuscany.core.builder.ContextFactory;
-import org.apache.tuscany.core.config.JavaIntrospectionHelper;
-import org.apache.tuscany.core.extension.ContextFactoryBuilderSupport;
-import org.apache.tuscany.core.injection.EventInvoker;
-import org.apache.tuscany.core.injection.Injector;
-import org.apache.tuscany.core.wire.service.WireFactoryService;
-import org.apache.tuscany.model.assembly.Scope;
-
-/**
- * Builds context factories for component implementations that map to {@link
- * org.apache.tuscany.container.java.assembly.JavaImplementation}. The logical model is then decorated with
- * the runtime configuration.
- *
- * @version $Rev: 368822 $ $Date: 2006-01-13 10:54:38 -0800 (Fri, 13 Jan 2006) $
- * @see org.apache.tuscany.core.builder.ContextFactory
- */
-@org.osoa.sca.annotations.Scope("MODULE")
-public class JavaContextFactoryBuilder extends ContextFactoryBuilderSupport<JavaImplementation> {
-
- /**
- * Default constructor
- */
- public JavaContextFactoryBuilder() {
- super();
- }
-
- /**
- * Constructs a new instance
- *
- * @param wireFactoryService the system service responsible for creating wire factories
- */
- public JavaContextFactoryBuilder(WireFactoryService wireFactoryService) {
- super(wireFactoryService);
- }
-
- @SuppressWarnings("unchecked")
- protected ContextFactory createContextFactory(String name, JavaImplementation javaImpl, Scope scope) {
- Class implClass = null;
- JavaContextFactory contextFactory;
- try {
- implClass = javaImpl.getImplementationClass();
-
- contextFactory = new JavaContextFactory(name, JavaIntrospectionHelper
- .getDefaultConstructor(implClass), scope);
-
- List<Injector> injectors = new ArrayList<Injector>();
- List<Object> elements = javaImpl.getComponentType().getExtensibilityElements();
- for (Object element : elements) {
- if (element instanceof InitInvokerExtensibilityElement) {
- InitInvokerExtensibilityElement invokerElement = (InitInvokerExtensibilityElement) element;
- EventInvoker<Object> initInvoker = invokerElement.getEventInvoker();
- boolean eagerInit = invokerElement.isEager();
- contextFactory.setEagerInit(eagerInit);
- contextFactory.setInitInvoker(initInvoker);
- } else if (element instanceof DestroyInvokerExtensibilityElement) {
- DestroyInvokerExtensibilityElement invokerElement = (DestroyInvokerExtensibilityElement) element;
- EventInvoker<Object> destroyInvoker = invokerElement.getEventInvoker();
- contextFactory.setDestroyInvoker(destroyInvoker);
- } else if (element instanceof ComponentNameExtensibilityElement) {
- ComponentNameExtensibilityElement nameElement = (ComponentNameExtensibilityElement) element;
- injectors.add(nameElement.getEventInvoker(name));
- } else if (element instanceof ContextExtensibilityElement) {
- ContextExtensibilityElement contextElement = (ContextExtensibilityElement) element;
- injectors.add(contextElement.getInjector(contextFactory));
- }else if (element instanceof InjectorExtensibilityElement){
- InjectorExtensibilityElement injectorElement = (InjectorExtensibilityElement)element;
- injectors.add(injectorElement.getInjector(contextFactory));
- }
- }
- contextFactory.setSetters(injectors);
- return contextFactory;
- } catch (BuilderException e) {
- e.addContextName(name);
- throw e;
- } catch (NoSuchMethodException e) {
- BuilderConfigException ce = new BuilderConfigException("Class does not have a no-arg constructor", e);
- ce.setIdentifier(implClass.getName());
- ce.addContextName(name);
- throw ce;
- }
- }
-
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java
deleted file mode 100644
index cc66fa54f6..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaTargetWireBuilder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.builder;
-
-import org.apache.tuscany.container.java.config.JavaContextFactory;
-import org.apache.tuscany.container.java.invocation.ScopedJavaComponentInvoker;
-import org.apache.tuscany.core.context.QualifiedName;
-import org.apache.tuscany.core.context.ScopeContext;
-import org.apache.tuscany.core.extension.WireBuilderSupport;
-import org.apache.tuscany.core.wire.TargetInvoker;
-import org.osoa.sca.annotations.Scope;
-
-import java.lang.reflect.Method;
-
-/**
- * Completes a wire to a Java-based target component by adding a scoped java invoker to the source chain
- *
- * @version $Rev$ $Date$
- */
-@Scope("MODULE")
-public class JavaTargetWireBuilder extends WireBuilderSupport<JavaContextFactory> {
-
- protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) {
- boolean cacheable = !downScope;
- return new ScopedJavaComponentInvoker(targetName, operation, context,cacheable);
- }
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaContextFactory.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaContextFactory.java
deleted file mode 100644
index ff498d851a..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaContextFactory.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.config;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import commonj.sdo.DataObject;
-import org.apache.tuscany.container.java.context.JavaAtomicContext;
-import org.apache.tuscany.core.builder.BuilderConfigException;
-import org.apache.tuscany.core.builder.ContextCreationException;
-import org.apache.tuscany.core.builder.ContextFactory;
-import org.apache.tuscany.core.builder.ContextResolver;
-import org.apache.tuscany.core.builder.NoAccessorException;
-import org.apache.tuscany.core.builder.ObjectFactory;
-import org.apache.tuscany.core.builder.impl.ArrayMultiplicityObjectFactory;
-import org.apache.tuscany.core.builder.impl.ListMultiplicityObjectFactory;
-import org.apache.tuscany.core.builder.impl.ProxyObjectFactory;
-import org.apache.tuscany.core.config.JavaIntrospectionHelper;
-import org.apache.tuscany.core.context.AtomicContext;
-import org.apache.tuscany.core.context.CompositeContext;
-import org.apache.tuscany.core.injection.EventInvoker;
-import org.apache.tuscany.core.injection.FieldInjector;
-import org.apache.tuscany.core.injection.Injector;
-import org.apache.tuscany.core.injection.MethodInjector;
-import org.apache.tuscany.core.injection.PojoObjectFactory;
-import org.apache.tuscany.core.injection.SingletonObjectFactory;
-import org.apache.tuscany.core.wire.SourceWireFactory;
-import org.apache.tuscany.core.wire.TargetWireFactory;
-import org.apache.tuscany.databinding.sdo.SDOObjectFactory;
-import org.apache.tuscany.model.assembly.Scope;
-import org.osoa.sca.annotations.Property;
-import org.osoa.sca.annotations.Reference;
-
-/**
- * A ContextFactory that handles POJO component implementation types
- *
- * @version $Rev$ $Date$
- */
-public class JavaContextFactory implements ContextFactory<AtomicContext>, ContextResolver {
-
- // the component name as configured in the hosting module
- private String name;
-
- // the parent context of the component
- private CompositeContext parentContext;
-
- private Map<String, TargetWireFactory> targetProxyFactories = new HashMap<String, TargetWireFactory>();
-
- private List<SourceWireFactory> sourceProxyFactories = new ArrayList<SourceWireFactory>();
-
- // the implementation type constructor
- private Constructor<Object> ctr;
-
- private Set<Field> fields;
-
- private Set<Method> methods;
-
- // injectors for properties, references and other metadata values such as
- private List<Injector> setters;
-
- // an invoker for a method decorated with @Init
- private EventInvoker<Object> init;
-
- // whether the component should be eagerly initialized when its scope starts
- private boolean eagerInit;
-
- // an invoker for a method decorated with @Destroy
- private EventInvoker<Object> destroy;
-
- // the scope of the implementation instance
- private Scope scope;
-
- // whether the component is stateless
- private boolean stateless;
-
- /**
- * Creates a new context factory
- *
- * @param name the SCDL name of the component the context refers to
- * @param ctr the implementation type constructor
- * @param scope the scope of the component implementation type
- */
- public JavaContextFactory(String name, Constructor<Object> ctr, Scope scope) {
- assert (name != null) : "Name was null";
- assert (ctr != null) : "Constructor was null";
- this.name = name;
- this.ctr = ctr;
- this.scope = scope;
- stateless = (scope == Scope.INSTANCE);
- fields = JavaIntrospectionHelper.getAllFields(ctr.getDeclaringClass());
- methods = JavaIntrospectionHelper.getAllUniqueMethods(ctr.getDeclaringClass());
- }
-
- public String getName() {
- return name;
- }
-
- public Scope getScope() {
- return scope;
- }
-
- public AtomicContext createContext() throws ContextCreationException {
- PojoObjectFactory<?> objectFactory = new PojoObjectFactory<Object>(ctr, null, setters);
- return new JavaAtomicContext(name, objectFactory, eagerInit, init, destroy, stateless);
- }
-
- public void addTargetWireFactory(String serviceName, TargetWireFactory factory) {
- targetProxyFactories.put(serviceName, factory);
- }
-
- public TargetWireFactory getTargetWireFactory(String serviceName) {
- return targetProxyFactories.get(serviceName);
- }
-
- public Map<String, TargetWireFactory> getTargetWireFactories() {
- return targetProxyFactories;
- }
-
- public void addProperty(String propertyName, Object value) {
- setters.add(createPropertyInjector(propertyName, value));
- }
-
- public void addSourceWireFactory(String referenceName, SourceWireFactory factory) {
- sourceProxyFactories.add(factory);
- setters.add(createReferenceInjector(referenceName, factory, false));
- }
-
- public void addSourceWireFactories(String referenceName, Class referenceInterface, List<SourceWireFactory> factories, boolean multiplicity) {
- sourceProxyFactories.addAll(factories);
- setters.add(createReferenceInjector(referenceName, factories, multiplicity));
- }
-
- public List<SourceWireFactory> getSourceWireFactories() {
- return sourceProxyFactories;
- }
-
- public void setSetters(List<Injector> setters) {
- this.setters = setters;
- }
-
- public void setEagerInit(boolean val) {
- eagerInit = val;
- }
-
- public void setInitInvoker(EventInvoker<Object> invoker) {
- init = invoker;
- }
-
- public void setDestroyInvoker(EventInvoker<Object> invoker) {
- destroy = invoker;
- }
-
- public void prepare(CompositeContext parent) {
- parentContext = parent;
- }
-
- public CompositeContext getCurrentContext() {
- return parentContext;
- }
-
- /**
- * Creates an <code>Injector</code> for component properties
- */
- private Injector createPropertyInjector(String propertyName, Object value)
- throws NoAccessorException {
- Class type = value.getClass();
-
- // There is no efficient way to do this
- Method method = null;
- Field field = JavaIntrospectionHelper.findClosestMatchingField(propertyName, type, fields);
- if (field == null) {
- // hack for TUSCANY-322
- for (Field current : fields) {
- Property annot = current.getAnnotation(Property.class);
- if (annot != null) {
- if (propertyName.equals(annot.name())) {
- field = current;
- break;
- }
- }
- }
- method = JavaIntrospectionHelper.findClosestMatchingMethod(propertyName, new Class[]{type}, methods);
- if (method == null) {
- // hack for TUSCANY-322
- for (Method current : methods) {
- Property annot = current.getAnnotation(Property.class);
- if (annot != null) {
- if (propertyName.equals(annot.name())) {
- method = current;
- break;
- }
- }
- }
- if (method == null) {
- throw new NoAccessorException(propertyName);
- }
- }
- }
- Injector injector = null;
- if (value instanceof DataObject) {
- if (field != null) {
- injector = new FieldInjector(field, new SDOObjectFactory((DataObject) value));
- } else {
- injector = new MethodInjector(method, new SDOObjectFactory((DataObject) value));
- }
- } else if (JavaIntrospectionHelper.isImmutable(type)) {
- if (field != null) {
- injector = new FieldInjector(field, new SingletonObjectFactory<Object>(value));
- } else {
- injector = new MethodInjector(method, new SingletonObjectFactory<Object>(value));
- }
- }
- return injector;
-
- }
-
- /**
- * Creates proxy factories that represent target(s) of a reference and an <code>Injector</code>
- * responsible for injecting them into the reference
- */
- private Injector createReferenceInjector(String refName, List<SourceWireFactory> wireFactories, boolean multiplicity) {
- Class refClass = wireFactories.get(0).getBusinessInterface(); //reference.getPort().getServiceContract().getInterface();
- // iterate through the targets
- List<ObjectFactory> objectFactories = new ArrayList<ObjectFactory>();
- for (SourceWireFactory wireFactory : wireFactories) {
- objectFactories.add(new ProxyObjectFactory(wireFactory));
- }
- return createInjector(refName, refClass, multiplicity, objectFactories, fields, methods);
-
- }
-
- private Injector createReferenceInjector(String refName, SourceWireFactory wireFactory, boolean multiplicity) {
- Class refClass = wireFactory.getBusinessInterface();//reference.getPort().getServiceContract().getInterface();
- List<ObjectFactory> objectFactories = new ArrayList<ObjectFactory>();
- objectFactories.add(new ProxyObjectFactory(wireFactory));
- return createInjector(refName, refClass, multiplicity, objectFactories, fields, methods);
-
- }
-
- /**
- * Creates an <code>Injector</code> for a set of object factories associated with a reference.
- */
- private Injector createInjector(String refName, Class refClass, boolean multiplicity, List<ObjectFactory> objectFactories,
- Set<Field> fields, Set<Method> methods) throws NoAccessorException, BuilderConfigException {
- Field field;
- Method method = null;
- if (multiplicity) {
- // since this is a multiplicity, we cannot match on business interface type, so scan through the fields,
- // matching on name and List or Array
- field = JavaIntrospectionHelper.findMultiplicityFieldByName(refName, fields);
- if (field == null) {
- // No fields found. Again, since this is a multiplicity, we cannot match on business interface type, so
- // scan through the fields, matching on name and List or Array
- method = JavaIntrospectionHelper.findMultiplicityMethodByName(refName, methods);
- if (method == null) {
- throw new NoAccessorException(refName);
- }
- }
- Injector injector;
- // for multiplicities, we need to inject the reference proxy or proxies using an object factory
- // which first delegates to create the proxies and then returns them in the appropriate List or array type
- if (field != null) {
- if (field.getType().isArray()) {
- injector = new FieldInjector(field, new ArrayMultiplicityObjectFactory(refClass, objectFactories));
- } else {
- injector = new FieldInjector(field, new ListMultiplicityObjectFactory(objectFactories));
- }
- } else {
- if (method.getParameterTypes()[0].isArray()) {
- injector = new MethodInjector(method, new ArrayMultiplicityObjectFactory(refClass, objectFactories));
- } else {
- injector = new MethodInjector(method, new ListMultiplicityObjectFactory(objectFactories));
- }
- }
- return injector;
- } else {
- field = JavaIntrospectionHelper.findClosestMatchingField(refName, refClass, fields);
- if (field == null) {
- // hack for TUSCANY-300
- for (Field current : fields) {
- Reference annot = current.getAnnotation(Reference.class);
- if (annot != null) {
- if (refName.equals(annot.name())) {
- field = current;
- break;
- }
- }
- }
- if (field == null) {
- method = JavaIntrospectionHelper.findClosestMatchingMethod(refName, new Class[]{refClass}, methods);
- if(method == null){
- // Fix for Tuscany-325
- method = JavaIntrospectionHelper.findClosestMatchingMethod("set"+refName.substring(0,1).toUpperCase()+ refName.substring(1), new Class[]{refClass}, methods);
- }
- if (method == null) {
- // hack for TUSCANY-300
- for (Method current : methods) {
- Reference annot = current.getAnnotation(Reference.class);
- if (annot != null) {
- if (refName.equals(annot.name())) {
- method = current;
- break;
- }
- }
- }
- if (method == null) {
- throw new NoAccessorException(refName);
- }
- }
- }
- }
- Injector injector;
- if (field != null) {
- injector = new FieldInjector(field, objectFactories.get(0));
- } else {
- injector = new MethodInjector(method, objectFactories.get(0));
- }
- return injector;
- }
- }
-
-
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/context/JavaAtomicContext.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/context/JavaAtomicContext.java
deleted file mode 100644
index 27581198aa..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/context/JavaAtomicContext.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.context;
-
-import org.apache.tuscany.core.builder.ObjectFactory;
-import org.apache.tuscany.core.context.AtomicContext;
-import org.apache.tuscany.core.context.ContextInitException;
-import org.apache.tuscany.core.context.QualifiedName;
-import org.apache.tuscany.core.context.TargetException;
-import org.apache.tuscany.core.context.event.InstanceCreated;
-import org.apache.tuscany.core.context.impl.AbstractContext;
-import org.apache.tuscany.core.injection.EventInvoker;
-import org.apache.tuscany.core.injection.ObjectCallbackException;
-import org.apache.tuscany.core.injection.ObjectCreationException;
-
-/**
- * Manages Java component implementation instances
- *
- * @version $Rev$ $Date$
- */
-public class JavaAtomicContext extends AbstractContext implements AtomicContext {
-
- private boolean eagerInit;
-
- private EventInvoker<Object> initInvoker;
-
- private EventInvoker<Object> destroyInvoker;
-
- private boolean stateless;
-
- // the cached target instance
- private Object cachedTargetInstance;
-
- // creates a new implementation instance with injected references and properties
- private ObjectFactory objectFactory;
-
- public JavaAtomicContext(String name, ObjectFactory objectFactory, boolean eagerInit, EventInvoker<Object> initInvoker,
- EventInvoker<Object> destroyInvoker, boolean stateless) {
- super(name);
- assert (objectFactory != null) : "Object factory was null";
- if (eagerInit && initInvoker == null) {
- ContextInitException e = new ContextInitException("No intialization method found for implementation");
- e.setIdentifier(getName());
- throw e;
- }
- this.objectFactory = objectFactory;
-
- this.eagerInit = eagerInit;
- this.initInvoker = initInvoker;
- this.destroyInvoker = destroyInvoker;
- this.stateless = stateless;
- }
-
- public void setName(String name) {
- super.setName(name);
- }
-
- protected int type;
-
- public int getType() {
- return type;
- }
-
- public void setType(int type) {
- this.type = type;
- }
-
- public void init() throws TargetException {
- getInstance(null);
- }
-
- public void destroy() throws TargetException {
- if (cachedTargetInstance != null) {
- if (destroyInvoker != null) {
- try {
- destroyInvoker.invokeEvent(cachedTargetInstance);
- } catch (ObjectCallbackException e) {
- TargetException te = new TargetException(e.getCause());
- te.setIdentifier(getName());
- throw te;
- }
- }
- }
- lifecycleState = STARTED;
- }
-
- public synchronized Object getInstance(QualifiedName qName) throws TargetException {
- //TODO implement returning of proxy and wire chain for service
- if (cachedTargetInstance != null) {
- return cachedTargetInstance; // already cached, just return
- }
-
- if (getLifecycleState() == ERROR || getLifecycleState() == CONFIG_ERROR) {
- return null;
- }
- synchronized (this) {
- try {
- Object instance = objectFactory.getInstance();
- // handle @Init
- if (initInvoker != null) {
- initInvoker.invokeEvent(instance);
- }
- publish(new InstanceCreated(this));
- lifecycleState = RUNNING;
- if (stateless) {
- return instance;
- } else {
- cachedTargetInstance = instance; // cache the instance
- return cachedTargetInstance;
- }
- } catch (ObjectCreationException e) {
- lifecycleState = ERROR;
- TargetException te = new TargetException("Error creating component instance", e);
- te.setIdentifier(getName());
- throw te;
- }
- }
-
- }
-
- public Object getTargetInstance() throws TargetException {
- //TODO refactor when getInstance() returns a proxy
- return getInstance(null);
- }
-
- public boolean isEagerInit() {
- return eagerInit;
- }
-
- public boolean isDestroyable() {
- return (destroyInvoker != null);
- }
-
- public void start() throws ContextInitException {
- if (getLifecycleState() != UNINITIALIZED && getLifecycleState() != STOPPED) {
- throw new IllegalStateException("Context must be in UNINITIALIZED state [" + getLifecycleState() + "]");
- }
- if (objectFactory == null) {
- lifecycleState = ERROR;
- ContextInitException e = new ContextInitException("Object factory not found");
- e.setIdentifier(getName());
- throw e;
- }
- lifecycleState = INITIALIZED;
- }
-
- public void stop() {
- lifecycleState = STOPPED;
- }
-
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/AbstractJavaComponentInvoker.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/AbstractJavaComponentInvoker.java
deleted file mode 100644
index 33fa9238b6..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/AbstractJavaComponentInvoker.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.invocation;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Set;
-
-import org.apache.tuscany.core.config.JavaIntrospectionHelper;
-import org.apache.tuscany.core.context.TargetException;
-import org.apache.tuscany.core.wire.Interceptor;
-import org.apache.tuscany.core.wire.InvocationRuntimeException;
-import org.apache.tuscany.core.wire.TargetInvoker;
-import org.apache.tuscany.core.message.Message;
-
-/**
- * Base class for dispatching to a Java based component implementation. Subclasses implement a strategy for resolving
- * implementation instances.
- *
- * @version $Rev$ $Date$
- */
-public abstract class AbstractJavaComponentInvoker implements TargetInvoker {
-
- protected Method operation;
-
- public AbstractJavaComponentInvoker(Method operation) {
- assert (operation != null) : "Operation method cannot be null";
- this.operation = operation;
- }
-
- public Object invokeTarget(Object payload) throws InvocationTargetException {
- try {
- Object instance = getInstance();
- if (!operation.getDeclaringClass().isInstance(instance)) {
- Set<Method> methods = JavaIntrospectionHelper.getAllUniqueMethods(instance.getClass());
- Method newOperation = JavaIntrospectionHelper.findClosestMatchingMethod(operation.getName(), operation
- .getParameterTypes(), methods);
- if (newOperation != null)
- operation = newOperation;
- }
- if (payload != null && !payload.getClass().isArray()) {
- return operation.invoke(instance, payload);
- } else {
- return operation.invoke(instance, (Object[]) payload);
- }
- } catch (IllegalAccessException e) {
- throw new InvocationRuntimeException(e);
- }
- }
-
- public Message invoke(Message msg) {
- try {
- Object resp = invokeTarget(msg.getBody());
- msg.setBody(resp);
- } catch (InvocationTargetException e) {
- msg.setBody(e.getCause());
- } catch (Throwable e) {
- msg.setBody(e);
- }
- return msg;
- }
-
- protected abstract Object getInstance() throws TargetException;
-
- public void setNext(Interceptor next) {
- throw new IllegalStateException("This interceptor must be the last interceptor in an interceptor chain");
- }
-
- @Override
- public Object clone() throws CloneNotSupportedException {
- try {
- AbstractJavaComponentInvoker clone = (AbstractJavaComponentInvoker) super.clone();
- clone.operation = this.operation;
- return clone;
- } catch (CloneNotSupportedException e) {
- return null; // will not happen
- }
- }
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/ScopedJavaComponentInvoker.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/ScopedJavaComponentInvoker.java
deleted file mode 100644
index 85d72b4b0d..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/ScopedJavaComponentInvoker.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.invocation;
-
-import org.apache.tuscany.core.context.QualifiedName;
-import org.apache.tuscany.core.context.ScopeContext;
-import org.apache.tuscany.core.context.TargetException;
-
-import java.lang.reflect.Method;
-
-/**
- * Uses a scope container to resolve an implementation instance based on the current thread context
- *
- * @version $Rev$ $Date$
- */
-public class ScopedJavaComponentInvoker extends AbstractJavaComponentInvoker {
-
- private ScopeContext container;
-
- private QualifiedName name;
-
- private Object target;
-
- public boolean cacheable;
-
-
- /**
- * Creates a new invoker
- *
- * @param serviceName the name of the component/service pair to invoke
- * @param operation the operation the invoker is associated with
- * @param scopeContext the scope context the component is resolved in
- * @param cacheable Sets whether the target service instance may be cached by the invoker. This is a possible optimization
- * when a wire is configured for a "down-scope" reference, i.e. a reference from a source of a shorter
- * lifetime to a source of greater lifetime.
- */
- public ScopedJavaComponentInvoker(QualifiedName serviceName, Method operation, ScopeContext scopeContext, boolean cacheable) {
- super(operation);
- assert (serviceName != null) : "No service name specified";
- assert (scopeContext != null) : "No scope scopeContext specified";
- name = serviceName;
- this.container = scopeContext;
- this.cacheable = cacheable;
- }
-
- /**
- * Returns whether the target is cacheable.
- */
- public boolean isCacheable() {
- return cacheable;
- }
-
- /**
- * Resolves the target service instance or returns a cached one
- */
- protected Object getInstance() throws TargetException {
- if (!cacheable) {
- return container.getInstance(name);
- } else {
- if (target == null) {
- target = container.getInstance(name);
- }
- return target;
- }
- }
-
- public Object clone() throws CloneNotSupportedException {
- ScopedJavaComponentInvoker invoker = (ScopedJavaComponentInvoker) super.clone();
- invoker.target = null;
- invoker.cacheable = this.cacheable;
- invoker.container = this.container;
- invoker.name = this.name;
- return invoker;
- }
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/StaticJavaComponentTargetInvoker.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/StaticJavaComponentTargetInvoker.java
deleted file mode 100644
index dd757137cf..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/invocation/StaticJavaComponentTargetInvoker.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- *
- * Copyright 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.
- */
-package org.apache.tuscany.container.java.invocation;
-
-import java.lang.reflect.Method;
-
-/**
- * Caches component instances that do not need to be resolved for every wire, e.g. an wire originating from
- * a lesser scope intended for a target with a wider scope
- *
- * @version $Rev$ $Date$
- */
-public class StaticJavaComponentTargetInvoker extends AbstractJavaComponentInvoker {
-
- private Object instance;
-
- public StaticJavaComponentTargetInvoker(Method operation, Object instance) {
- super(operation);
- assert (instance != null) : "Instance cannot be null";
- this.instance = instance;
- }
-
- protected Object getInstance() {
- return instance;
- }
-
- public boolean isCacheable() {
- return true;
- }
-
- public Object clone() throws CloneNotSupportedException {
- StaticJavaComponentTargetInvoker invoker = (StaticJavaComponentTargetInvoker) super.clone();
- invoker.instance = null;
- return invoker;
- }
-}
diff --git a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaImplementationLoader.java b/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaImplementationLoader.java
deleted file mode 100644
index db3dd07c98..0000000000
--- a/tags/java-M1-20060522/java/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/loader/JavaImplementationLoader.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation
- *
- * 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.container.java.loader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.tuscany.common.resource.ResourceLoader;
-import org.apache.tuscany.container.java.assembly.JavaAssemblyFactory;
-import org.apache.tuscany.container.java.assembly.JavaImplementation;
-import org.apache.tuscany.core.config.ComponentTypeIntrospector;
-import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.core.config.InvalidRootElementException;
-import org.apache.tuscany.core.config.JavaIntrospectionHelper;
-import org.apache.tuscany.core.config.SidefileLoadException;
-import org.apache.tuscany.core.config.processor.ProcessorUtils;
-import org.apache.tuscany.core.loader.LoaderContext;
-import org.apache.tuscany.core.loader.StAXElementLoader;
-import org.apache.tuscany.core.loader.StAXLoaderRegistry;
-import org.apache.tuscany.core.loader.assembly.AssemblyConstants;
-import org.apache.tuscany.core.system.annotation.Autowire;
-import org.apache.tuscany.model.assembly.ComponentType;
-import org.osoa.sca.annotations.Destroy;
-import org.osoa.sca.annotations.Init;
-import org.osoa.sca.annotations.Scope;
-
-/**
- * @version $Rev$ $Date$
- */
-@Scope("MODULE")
-public class JavaImplementationLoader implements StAXElementLoader<JavaImplementation> {
- public static final QName IMPLEMENTATION_JAVA = new QName("http://www.osoa.org/xmlns/sca/0.9", "implementation.java");
-
- private StAXLoaderRegistry registry;
- private XMLInputFactory xmlFactory;
-
- private JavaAssemblyFactory factory;
- private ComponentTypeIntrospector introspector;
-
- public JavaImplementationLoader() {
- // todo make this a reference to a system service
- xmlFactory = XMLInputFactory.newInstance();
- }
-
- @Autowire
- public void setRegistry(StAXLoaderRegistry registry) {
- this.registry = registry;
- }
-
- @Autowire
- public void setFactory(JavaAssemblyFactory factory) {
- this.factory = factory;
- //FIXME JFM HACK
- introspector = ProcessorUtils.createCoreIntrospector(factory);
- }
-
- @Init(eager = true)
- public void start() {
- registry.registerLoader(IMPLEMENTATION_JAVA, this);
- }
-
- @Destroy
- public void stop() {
- registry.unregisterLoader(IMPLEMENTATION_JAVA, this);
- }
-
- public JavaImplementation load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
- JavaImplementation javaImpl = factory.createJavaImplementation();
- String typeName = reader.getAttributeValue(null, "class");
- Class<?> implementationClass = getImplementationClass(loaderContext.getResourceLoader(), typeName);
- javaImpl.setImplementationClass(implementationClass);
- javaImpl.setComponentType(loadComponentType(loaderContext, implementationClass));
- return javaImpl;
- }
-
- protected Class<?> getImplementationClass(ResourceLoader resourceLoader, String typeName) throws ConfigurationLoadException {
- ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
- try {
- // set TCCL in case the application code needs it
- Thread.currentThread().setContextClassLoader(resourceLoader.getClassLoader());
- return resourceLoader.loadClass(typeName);
- } catch (ClassNotFoundException e) {
- throw new ConfigurationLoadException(e.getMessage(), e);
- } finally {
- Thread.currentThread().setContextClassLoader(oldCL);
- }
- }
-
- protected ComponentType loadComponentType(LoaderContext loaderContext, Class<?> implClass) throws ConfigurationLoadException, XMLStreamException {
- String baseName = JavaIntrospectionHelper.getBaseName(implClass);
- URL sidefile = implClass.getResource(baseName + ".componentType");
- if (sidefile == null) {
- return loadComponentTypeByIntrospection(implClass);
- } else {
- return loadComponentTypeFromSidefile(sidefile, loaderContext);
- }
- }
-
- protected ComponentType loadComponentTypeByIntrospection(Class<?> implClass) throws ConfigurationLoadException {
- return introspector.introspect(implClass);
- }
-
- protected ComponentType loadComponentTypeFromSidefile(URL sidefile, LoaderContext loaderContext) throws SidefileLoadException {
- try {
- XMLStreamReader reader;
- InputStream is;
- is = sidefile.openStream();
- try {
- reader = xmlFactory.createXMLStreamReader(is);
- try {
- reader.nextTag();
- if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) {
- InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName());
- e.setResourceURI(sidefile.toString());
- throw e;
- }
- return (ComponentType) registry.load(reader, loaderContext);
- } finally {
- try {
- reader.close();
- } catch (XMLStreamException e) {
- // ignore
- }
- }
- } finally {
- try {
- is.close();
- } catch (IOException e) {
- // ignore
- }
- }
- } catch (IOException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(sidefile.toString());
- throw sfe;
- } catch (XMLStreamException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(sidefile.toString());
- throw sfe;
- } catch (ConfigurationLoadException e) {
- SidefileLoadException sfe = new SidefileLoadException(e.getMessage());
- sfe.setResourceURI(sidefile.toString());
- throw sfe;
- }
- }
-}