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/11/04 05:06:50 UTC
svn commit: r471111 [1/2] - in /incubator/tuscany/java/sca/kernel:
core/src/main/java/org/apache/tuscany/core/implementation/
core/src/main/java/org/apache/tuscany/core/implementation/java/
core/src/main/java/org/apache/tuscany/core/implementation/syst...
Author: jmarino
Date: Fri Nov 3 20:06:48 2006
New Revision: 471111
URL: http://svn.apache.org/viewvc?view=rev&rev=471111
Log:
add core support for @Resource; still need to enable in runtimes
Added:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java (with props)
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java (with props)
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java (with props)
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java (with props)
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java (with props)
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java (with props)
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentImpl.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicModuleScopeTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicRequestScopeTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/HttpSessionScopeRestartTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ModuleScopeRestartTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/RequestScopeRestartTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/GetServiceByNameTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaReferenceWireTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/AtomicComponentWireInvocationTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/factories/MockFactory.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ServletHost.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/Resource.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java Fri Nov 3 20:06:48 2006
@@ -43,6 +43,7 @@
import org.apache.tuscany.core.injection.NoAccessorException;
import org.apache.tuscany.core.injection.ObjectCallbackException;
import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.injection.ResourceObjectFactory;
/**
* Base implementation of an {@link org.apache.tuscany.spi.component.AtomicComponent} whose type is a Java class
@@ -57,12 +58,13 @@
protected List<String> constructorParamNames;
protected List<Class<?>> serviceInterfaces;
protected Map<String, Member> referenceSites;
+ protected Map<String, Member> resourceSites;
protected Map<String, Member> propertySites;
protected Map<String, Member> callbackSites;
protected List<Injector<Object>> injectors;
- public PojoAtomicComponent(String name, PojoConfiguration configuration) {
- super(name,
+ public PojoAtomicComponent(PojoConfiguration configuration) {
+ super(configuration.getName(),
configuration.getParent(),
configuration.getScopeContainer(),
configuration.getWireService(),
@@ -81,6 +83,8 @@
: new HashMap<String, Member>();
propertySites = configuration.getPropertySites() != null ? configuration.getPropertySites()
: new HashMap<String, Member>();
+ resourceSites = configuration.getResourceSites() != null ? configuration.getResourceSites()
+ : new HashMap<String, Member>();
callbackSites = configuration.getCallbackSite() != null ? configuration.getCallbackSite()
: new HashMap<String, Member>();
}
@@ -128,6 +132,24 @@
public void addPropertyFactory(String name, ObjectFactory<?> factory) {
Member member = propertySites.get(name);
+ if (member instanceof Field) {
+ injectors.add(new FieldInjector<Object>((Field) member, factory));
+ } else if (member instanceof Method) {
+ injectors.add(new MethodInjector<Object>((Method) member, factory));
+ }
+ // cycle through constructor param names as well
+ for (int i = 0; i < constructorParamNames.size(); i++) {
+ if (name.equals(constructorParamNames.get(i))) {
+ ObjectFactory[] initializerFactories = instanceFactory.getInitializerFactories();
+ initializerFactories[i] = factory;
+ break;
+ }
+ }
+ //FIXME throw an error if no injection site found
+ }
+
+ public void addResourceFactory(String name, ResourceObjectFactory<?> factory) {
+ Member member = resourceSites.get(name);
if (member instanceof Field) {
injectors.add(new FieldInjector<Object>((Field) member, factory));
} else if (member instanceof Method) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java Fri Nov 3 20:06:48 2006
@@ -42,6 +42,7 @@
*/
public class PojoConfiguration {
+ private String name;
private CompositeComponent parent;
private ScopeContainer scopeContainer;
private PojoObjectFactory<?> instanceFactory;
@@ -52,6 +53,7 @@
private List<Injector> propertyInjectors = new ArrayList<Injector>();
private Map<String, Member> referenceSites = new HashMap<String, Member>();
private Map<String, Member> propertySites = new HashMap<String, Member>();
+ private Map<String, Member> resourceSites = new HashMap<String, Member>();
private Map<String, Member> callbackSites = new HashMap<String, Member>();
private List<Class<?>> serviceInterfaces = new ArrayList<Class<?>>();
private WireService wireService;
@@ -59,6 +61,14 @@
private WorkScheduler scheduler;
private ExecutionMonitor monitor;
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
public CompositeComponent getParent() {
return parent;
}
@@ -141,6 +151,14 @@
public void addReferenceSite(String name, Member member) {
referenceSites.put(name, member);
+ }
+
+ public Map<String, Member> getResourceSites() {
+ return resourceSites;
+ }
+
+ public void addResourceSite(String name, Member member) {
+ resourceSites.put(name, member);
}
public Map<String, Member> getCallbackSite() {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java Fri Nov 3 20:06:48 2006
@@ -25,7 +25,6 @@
import org.apache.tuscany.spi.ObjectFactory;
import org.apache.tuscany.spi.component.TargetException;
import org.apache.tuscany.spi.component.TargetNotFoundException;
-import org.apache.tuscany.spi.extension.ExecutionMonitor;
import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.ServiceContract;
@@ -49,10 +48,8 @@
*/
public class JavaAtomicComponent extends PojoAtomicComponent {
- private ExecutionMonitor monitor;
-
- public JavaAtomicComponent(String name, PojoConfiguration configuration) {
- super(name, configuration);
+ public JavaAtomicComponent(PojoConfiguration configuration) {
+ super(configuration);
this.scope = configuration.getScopeContainer().getScope();
}
@@ -87,17 +84,6 @@
Method method = findMethod(operation, methods);
return new JavaTargetInvoker(method, this, callbackWire, workContext, monitor);
}
-
-// public TargetInvoker createAsyncTargetInvoker(InboundWire wire, Operation operation) {
-// Method method;
-// if (operation.isCallback()) {
-// method = findMethod(operation, operation.getServiceContract().getCallbackClass().getMethods());
-//
-// } else {
-// method = findMethod(operation, operation.getServiceContract().getInterfaceClass().getMethods());
-// }
-// return new AsyncJavaTargetInvoker(method, wire, this, monitor, workContext);
-// }
protected void onServiceWire(InboundWire wire) {
String name = wire.getCallbackReferenceName();
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java Fri Nov 3 20:06:48 2006
@@ -23,25 +23,27 @@
import java.lang.reflect.Method;
import org.apache.tuscany.spi.ObjectFactory;
-import org.apache.tuscany.spi.implementation.java.JavaMappedService;
-
+import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.BuilderConfigException;
import org.apache.tuscany.spi.component.AtomicComponent;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
-import org.apache.tuscany.spi.model.ComponentDefinition;
-import org.apache.tuscany.spi.model.PropertyValue;
-import org.apache.tuscany.spi.model.Scope;
-
+import org.apache.tuscany.spi.host.ResourceHost;
import org.apache.tuscany.spi.implementation.java.ConstructorDefinition;
import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
import org.apache.tuscany.spi.implementation.java.JavaMappedReference;
+import org.apache.tuscany.spi.implementation.java.JavaMappedService;
import org.apache.tuscany.spi.implementation.java.PojoComponentType;
+import org.apache.tuscany.spi.implementation.java.Resource;
+import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.PropertyValue;
+import org.apache.tuscany.spi.model.Scope;
import org.apache.tuscany.core.implementation.PojoConfiguration;
import org.apache.tuscany.core.injection.MethodEventInvoker;
import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.injection.ResourceObjectFactory;
/**
* Builds a Java-based atomic context from a component definition
@@ -50,10 +52,17 @@
*/
public class JavaComponentBuilder extends ComponentBuilderExtension<JavaImplementation> {
+ private ResourceHost host;
+
+ @Autowire(required = false)
+ public void setHost(ResourceHost host) {
+ this.host = host;
+ }
+
@SuppressWarnings("unchecked")
public AtomicComponent build(CompositeComponent parent,
- ComponentDefinition<JavaImplementation> definition,
- DeploymentContext deployment)
+ ComponentDefinition<JavaImplementation> definition,
+ DeploymentContext deployment)
throws BuilderConfigException {
PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> componentType =
definition.getImplementation().getComponentType();
@@ -97,6 +106,15 @@
configuration.addReferenceSite(reference.getName(), member);
}
}
+
+ for (Resource resource : componentType.getResources().values()) {
+ Member member = resource.getMember();
+ if (member != null) {
+ // could be null if the resource is mapped to a constructor
+ configuration.addResourceSite(resource.getName(), member);
+ }
+ }
+
// setup constructor injection
ConstructorDefinition<?> ctorDef = componentType.getConstructorDefinition();
Constructor<?> constr = ctorDef.getConstructor();
@@ -104,7 +122,8 @@
configuration.setInstanceFactory(instanceFactory);
configuration.getConstructorParamNames().addAll(ctorDef.getInjectionNames());
configuration.setMonitor(monitor);
- JavaAtomicComponent component = new JavaAtomicComponent(definition.getName(), configuration);
+ configuration.setName(definition.getName());
+ JavaAtomicComponent component = new JavaAtomicComponent(configuration);
// handle properties
for (PropertyValue<?> property : definition.getPropertyValues().values()) {
@@ -112,6 +131,23 @@
if (factory != null) {
component.addPropertyFactory(property.getName(), factory);
}
+ }
+
+ // handle resources
+ for (Resource resource : componentType.getResources().values()) {
+ String name = resource.getName();
+ boolean optional = resource.isOptional();
+ Class<Object> type = (Class<Object>) resource.getType();
+ ResourceObjectFactory<Object> factory;
+ String mappedName = resource.getMappedName();
+ if (mappedName == null) {
+ // by type
+ factory = new ResourceObjectFactory<Object>(type, optional, parent, host);
+ } else {
+ factory = new ResourceObjectFactory<Object>(type, mappedName, optional, parent, host);
+ }
+ component.addResourceFactory(name, factory);
+
}
for (JavaMappedService service : componentType.getServices().values()) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java Fri Nov 3 20:06:48 2006
@@ -107,7 +107,8 @@
PojoObjectFactory<?> instanceFactory = new PojoObjectFactory(constr);
configuration.setInstanceFactory(instanceFactory);
configuration.getConstructorParamNames().addAll(ctorDef.getInjectionNames());
- SystemAtomicComponentImpl component = new SystemAtomicComponentImpl(definition.getName(), configuration);
+ configuration.setName(definition.getName());
+ SystemAtomicComponentImpl component = new SystemAtomicComponentImpl(configuration);
// handle properties
Map<String, PropertyValue<?>> propertyValues = definition.getPropertyValues();
processProperties(propertyValues, componentType.getProperties().values(), component);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentImpl.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentImpl.java Fri Nov 3 20:06:48 2006
@@ -38,8 +38,8 @@
*/
public class SystemAtomicComponentImpl extends PojoAtomicComponent implements SystemAtomicComponent {
- public SystemAtomicComponentImpl(String name, PojoConfiguration configuration) {
- super(name, configuration);
+ public SystemAtomicComponentImpl(PojoConfiguration configuration) {
+ super(configuration);
scope = Scope.MODULE;
}
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.injection;
+
+import org.apache.tuscany.spi.ObjectCreationException;
+
+/**
+ * Denotes an exception thrown when a runtime resource is not found
+ *
+ * @version $Rev$ $Date$
+ */
+public class ResourceNotFoundException extends ObjectCreationException {
+ public ResourceNotFoundException() {
+ }
+
+ public ResourceNotFoundException(String message) {
+ super(message);
+ }
+
+ public ResourceNotFoundException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ResourceNotFoundException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceNotFoundException.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.injection;
+
+import org.apache.tuscany.spi.ObjectCreationException;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.SCAObject;
+import org.apache.tuscany.spi.host.ResourceHost;
+import org.apache.tuscany.spi.host.ResourceResolutionException;
+
+/**
+ * Resolves a runtime resource to be injected on a field or method of a Java component type marked with {@link
+ * org.osoa.sca.annotations.Resource}. If the mapped name of the resource is an absolute URI such as
+ * <code>sca://localhost</code> or <code>jndi://localhost</code> the host container namespace is searched; otherwise the
+ * URI is assumed to be relative and the parent composite is searched. If a mapped name is not provided, i.e. resolution
+ * is by type, the parent composite is first searched followed by the host namespace.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ResourceObjectFactory<T> implements ObjectFactory<T> {
+
+ private Class<T> type;
+ private String mappedName;
+ private CompositeComponent parent;
+ private ResourceHost host;
+ private boolean resolveFromHost;
+ private boolean optional;
+
+ /**
+ * Instantiates a factory that resolves resources by type
+ *
+ * @param type the type of the resource to inject
+ * @param optional true if an error should be thrown if the resource is not found
+ * @param parent the parent composite of the component to inject on
+ * @param host the runtime resource provider
+ */
+ public ResourceObjectFactory(Class<T> type,
+ boolean optional,
+ CompositeComponent parent,
+ ResourceHost host) {
+ this.type = type;
+ this.parent = parent;
+ this.host = host;
+ this.optional = optional;
+ }
+
+ /**
+ * Instantiates a factory that resolves resources by mapped name
+ *
+ * @param type the type of the resource to inject
+ * @param mappedName the resource name
+ * @param optional true if an error should be thrown if the resource is not found
+ * @param parent the parent composite of the component to inject on
+ * @param host the runtime resource provider
+ */
+ public ResourceObjectFactory(Class<T> type,
+ String mappedName,
+ boolean optional,
+ CompositeComponent parent,
+ ResourceHost host) {
+ this.type = type;
+ this.parent = parent;
+ this.host = host;
+ if (mappedName.indexOf("://") >= 0) {
+ this.resolveFromHost = true;
+ }
+ this.mappedName = mappedName;
+ this.optional = optional;
+ }
+
+ public T getInstance() throws ObjectCreationException {
+ if (resolveFromHost) {
+ return resolveInstance();
+ } else {
+ T instance = null;
+ if (mappedName == null) {
+ instance = parent.resolveSystemInstance(type);
+ if (instance == null) {
+ // if not found in parent scope, search the host namespace
+ resolveFromHost = true;
+ instance = resolveInstance();
+ }
+ if (instance == null && !optional) {
+ ResourceNotFoundException e = new ResourceNotFoundException("No resource found matching type");
+ e.setIdentifier(type.getName());
+ throw e;
+ }
+ return instance;
+ } else {
+ SCAObject child = parent.getSystemChild(mappedName);
+ if (child != null) {
+ instance = type.cast(child.getServiceInstance());
+ }
+ if (instance == null && !optional) {
+ ResourceNotFoundException e = new ResourceNotFoundException("No resource found for URI");
+ e.setIdentifier(mappedName);
+ throw e;
+ }
+ return instance;
+ }
+ }
+ }
+
+ private T resolveInstance() {
+ try {
+ if (mappedName == null) {
+ return host.resolveResource(type);
+ } else {
+ return host.resolveResource(type, mappedName);
+ }
+ } catch (ResourceResolutionException e) {
+ throw new ObjectCreationException(e);
+ }
+
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/ResourceObjectFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.services.host;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osoa.sca.annotations.Service;
+
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.SCAObject;
+import org.apache.tuscany.spi.host.ResourceHost;
+import org.apache.tuscany.spi.host.ResourceHostRegistry;
+import org.apache.tuscany.spi.host.ResourceResolutionException;
+
+/**
+ * The default implementation of a <code>ResourceRegisty</code> that resolves resources in the <code>SCA://</code>
+ * namespace against its parent composite and delegates resolution to registered <code>ResourceHost</code>s for other
+ * namespaces. The search order for resources resolved by type starts with the SCA namespace and proceeds to hosts in
+ * the order they were registered.
+ *
+ * @version $Rev$ $Date$
+ */
+@Service(interfaces = {ResourceHost.class, ResourceHostRegistry.class})
+public class DelegatingResourceHostRegistry implements ResourceHost, ResourceHostRegistry {
+ private static final String SCA_PREFIX = "SCA://";
+ private static final String SCA_LOCALHOST_PREFIX = "SCA://localhost/";
+ private Map<String, ResourceHost> resourceHosts = new HashMap<String, ResourceHost>();
+ private CompositeComponent parent;
+
+ /**
+ * Creates a new delegating registry.
+ *
+ * @param parent the composite to resolve SCA resources against
+ */
+ public DelegatingResourceHostRegistry(@Autowire CompositeComponent parent) {
+ this.parent = parent;
+ }
+
+ public void register(String uri, ResourceHost host) {
+ resourceHosts.put(uri, host);
+ }
+
+ public void unregister(String uri) {
+ resourceHosts.remove(uri);
+ }
+
+ public <T> T resolveResource(Class<T> type) throws ResourceResolutionException {
+ T instance = parent.resolveSystemExternalInstance(type);
+ if (instance == null) {
+ for (ResourceHost host : resourceHosts.values()) {
+ instance = host.resolveResource(type);
+ if (instance != null) {
+ return instance;
+ }
+ }
+ }
+ return instance;
+
+ }
+
+ public <T> T resolveResource(Class<T> type, String mappedName) throws ResourceResolutionException {
+ if (mappedName.startsWith(SCA_PREFIX)) {
+ String name;
+ if (mappedName.startsWith(SCA_LOCALHOST_PREFIX)) {
+ name = mappedName.substring(SCA_LOCALHOST_PREFIX.length());
+ } else {
+ name = mappedName.substring(SCA_PREFIX.length());
+ }
+ // resolve against the composite
+ SCAObject child = parent.getSystemChild(name);
+ // only expose services
+ if (child instanceof org.apache.tuscany.spi.component.Service) {
+ return type.cast(child.getServiceInstance());
+ }
+ return null;
+ } else {
+ int pos = mappedName.indexOf("://");
+ if (pos == -1) {
+ ResourceResolutionException e = new ResourceResolutionException("Invalid resource URI");
+ e.setIdentifier(mappedName);
+ throw e;
+ }
+ String uri = mappedName.substring(0, pos + 3);
+ ResourceHost host = resourceHosts.get(uri);
+ if (host == null) {
+ ResourceResolutionException e = new ResourceResolutionException("No resource host for URI");
+ e.setIdentifier(uri);
+ throw e;
+ }
+ return host.resolveResource(type, mappedName);
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java Fri Nov 3 20:06:48 2006
@@ -109,7 +109,8 @@
configuration.setInstanceFactory(factory);
configuration.setInitInvoker(initInvoker);
configuration.setDestroyInvoker(destroyInvoker);
- SystemAtomicComponentImpl context = new SystemAtomicComponentImpl("foo", configuration);
+ configuration.setName("foo");
+ SystemAtomicComponentImpl context = new SystemAtomicComponentImpl(configuration);
context.start();
return context;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicModuleScopeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicModuleScopeTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicModuleScopeTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicModuleScopeTestCase.java Fri Nov 3 20:06:48 2006
@@ -100,7 +100,8 @@
configuration.setInstanceFactory(factory);
configuration.setInitInvoker(initInvoker);
configuration.setDestroyInvoker(destroyInvoker);
- SystemAtomicComponentImpl context = new SystemAtomicComponentImpl("foo", configuration);
+ configuration.setName("foo");
+ SystemAtomicComponentImpl context = new SystemAtomicComponentImpl(configuration);
context.start();
return context;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicRequestScopeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicRequestScopeTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicRequestScopeTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/BasicRequestScopeTestCase.java Fri Nov 3 20:06:48 2006
@@ -97,7 +97,8 @@
configuration.setInstanceFactory(factory);
configuration.setInitInvoker(initInvoker);
configuration.setDestroyInvoker(destroyInvoker);
- SystemAtomicComponentImpl component = new SystemAtomicComponentImpl("foo", configuration);
+ configuration.setName("foo");
+ SystemAtomicComponentImpl component = new SystemAtomicComponentImpl(configuration);
scopeContainer.register(component);
return component;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/HttpSessionScopeRestartTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/HttpSessionScopeRestartTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/HttpSessionScopeRestartTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/HttpSessionScopeRestartTestCase.java Fri Nov 3 20:06:48 2006
@@ -54,7 +54,8 @@
configuration.setDestroyInvoker(destroyInvoker);
Constructor<InitDestroyOnce> ctr = InitDestroyOnce.class.getConstructor((Class<?>[]) null);
configuration.setInstanceFactory(new PojoObjectFactory<InitDestroyOnce>(ctr));
- SystemAtomicComponent context = new SystemAtomicComponentImpl("InitDestroy", configuration);
+ configuration.setName("InitDestroy");
+ SystemAtomicComponent context = new SystemAtomicComponentImpl(configuration);
context.start();
Object session = new Object();
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ModuleScopeRestartTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ModuleScopeRestartTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ModuleScopeRestartTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ModuleScopeRestartTestCase.java Fri Nov 3 20:06:48 2006
@@ -54,7 +54,8 @@
configuration.setDestroyInvoker(destroyInvoker);
Constructor<InitDestroyOnce> ctr = InitDestroyOnce.class.getConstructor((Class<?>[]) null);
configuration.setInstanceFactory(new PojoObjectFactory<InitDestroyOnce>(ctr));
- SystemAtomicComponent context = new SystemAtomicComponentImpl("InitDestroy", configuration);
+ configuration.setName("InitDestroy");
+ SystemAtomicComponent context = new SystemAtomicComponentImpl(configuration);
context.start();
scope.onEvent(new CompositeStart(this, null));
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/RequestScopeRestartTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/RequestScopeRestartTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/RequestScopeRestartTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/RequestScopeRestartTestCase.java Fri Nov 3 20:06:48 2006
@@ -53,7 +53,8 @@
configuration.setDestroyInvoker(destroyInvoker);
Constructor<InitDestroyOnce> ctr = InitDestroyOnce.class.getConstructor((Class<?>[]) null);
configuration.setInstanceFactory(new PojoObjectFactory<InitDestroyOnce>(ctr));
- SystemAtomicComponent context = new SystemAtomicComponentImpl("InitDestroy", configuration);
+ configuration.setName("InitDestroy");
+ SystemAtomicComponent context = new SystemAtomicComponentImpl(configuration);
context.start();
Object instance = context.getServiceInstance();
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/GetServiceByNameTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/GetServiceByNameTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/GetServiceByNameTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/GetServiceByNameTestCase.java Fri Nov 3 20:06:48 2006
@@ -54,7 +54,8 @@
configuration.setInstanceFactory(new PojoObjectFactory<TargetImpl>(TargetImpl.class.getConstructor()));
configuration.addServiceInterface(Target.class);
configuration.setWireService(new JDKWireService());
- final JavaAtomicComponent component = new JavaAtomicComponent("target", configuration);
+ configuration.setName("target");
+ final JavaAtomicComponent component = new JavaAtomicComponent(configuration);
InboundWire wire = createMock(InboundWire.class);
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.implementation.java;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.ScopeRegistry;
+import org.apache.tuscany.spi.implementation.java.ConstructorDefinition;
+import org.apache.tuscany.spi.implementation.java.PojoComponentType;
+import org.apache.tuscany.spi.implementation.java.Resource;
+import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.Scope;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JavaComponentBuilderResourceTestCase extends TestCase {
+
+ public void testResourceInjection() throws Exception {
+ ScopeContainer container = EasyMock.createNiceMock(ScopeContainer.class);
+ ScopeRegistry registry = EasyMock.createMock(ScopeRegistry.class);
+ EasyMock.expect(registry.getScopeContainer(Scope.STATELESS)).andReturn(container);
+ EasyMock.replay(registry);
+ JavaComponentBuilder builder = new JavaComponentBuilder();
+ builder.setScopeRegistry(registry);
+ ConstructorDefinition<Foo> ctorDef = new ConstructorDefinition<Foo>(Foo.class.getConstructor());
+ PojoComponentType type = new PojoComponentType();
+ Resource resource = new Resource();
+ resource.setType(String.class);
+ resource.setName("resource");
+ resource.setMember(Foo.class.getDeclaredField("resource"));
+ type.add(resource);
+ type.setImplementationScope(Scope.STATELESS);
+ type.setConstructorDefinition(ctorDef);
+ JavaImplementation impl = new JavaImplementation();
+ impl.setImplementationClass(Foo.class);
+ impl.setComponentType(type);
+ ComponentDefinition<JavaImplementation> definition = new ComponentDefinition<JavaImplementation>("foo", impl);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(String.class)).andReturn("result");
+ EasyMock.replay(parent);
+ JavaAtomicComponent component = (JavaAtomicComponent) builder.build(parent, definition, null);
+ Foo foo = (Foo) component.createInstance();
+ assertEquals("result", foo.resource);
+ EasyMock.verify(parent);
+ }
+
+ private static class Foo {
+
+ protected String resource;
+
+ public Foo() {
+ }
+
+ }
+}
+
+
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderResourceTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaReferenceWireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaReferenceWireTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaReferenceWireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaReferenceWireTestCase.java Fri Nov 3 20:06:48 2006
@@ -73,7 +73,8 @@
}).atLeastOnce();
EasyMock.replay(service);
configuration.setWireService(service);
- JavaAtomicComponent sourceContext = new JavaAtomicComponent("source", configuration);
+ configuration.setName("source");
+ JavaAtomicComponent sourceContext = new JavaAtomicComponent(configuration);
sourceContext.addOutboundWire(wire);
sourceContext.start();
Source source = (Source) sourceContext.getServiceInstance();
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.implementation.java;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.ScopeContainer;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.implementation.PojoConfiguration;
+import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.injection.ResourceObjectFactory;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ResourceInjectionTestCase extends TestCase {
+
+ public void testResourceMemberInjection() throws Exception {
+ ScopeContainer containter = EasyMock.createNiceMock(ScopeContainer.class);
+ Constructor<Foo> ctor = Foo.class.getConstructor();
+ Field field = Foo.class.getDeclaredField("resource");
+ PojoConfiguration configuration = new PojoConfiguration();
+ configuration.setName("component");
+ configuration.setScopeContainer(containter);
+ configuration.setInstanceFactory(new PojoObjectFactory<Foo>(ctor));
+ configuration.addResourceSite("bar", field);
+ JavaAtomicComponent component = new JavaAtomicComponent(configuration);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn("result");
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, null);
+ component.addResourceFactory("bar", factory);
+
+ Foo foo = (Foo) component.createInstance();
+ assertEquals("result", foo.resource);
+ EasyMock.verify(parent);
+ }
+
+
+ public void testResourceConstructorInjection() throws Exception {
+ ScopeContainer containter = EasyMock.createNiceMock(ScopeContainer.class);
+ Constructor<FooConstructor> ctor = FooConstructor.class.getConstructor(String.class);
+ PojoConfiguration configuration = new PojoConfiguration();
+ configuration.setName("component");
+ configuration.setScopeContainer(containter);
+ configuration.setInstanceFactory(new PojoObjectFactory<FooConstructor>(ctor));
+ List<String> ctorNames = new ArrayList<String>();
+ ctorNames.add("bar");
+ configuration.setConstructorParamNames(ctorNames);
+ JavaAtomicComponent component = new JavaAtomicComponent(configuration);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn("result");
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, null);
+ component.addResourceFactory("bar", factory);
+
+ FooConstructor foo = (FooConstructor) component.createInstance();
+ assertEquals("result", foo.resource);
+ EasyMock.verify(parent);
+ }
+
+ public static class Foo {
+ protected String resource;
+
+ public Foo() {
+ }
+
+ }
+
+ public static class FooConstructor {
+ protected String resource;
+
+ public FooConstructor(String resource) {
+ this.resource = resource;
+ }
+
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/ResourceInjectionTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java Fri Nov 3 20:06:48 2006
@@ -185,12 +185,14 @@
configuration.addServiceInterface(Target.class);
configuration.setParent(parent);
configuration.setWorkContext(workContext);
+ configuration.setName("source");
- JavaAtomicComponent source = new JavaAtomicComponent("source", configuration);
+ JavaAtomicComponent source = new JavaAtomicComponent(configuration);
OutboundWire outboundWire = createOutboundWire(new QualifiedName("target/Target"), Target.class);
outboundWire.setContainer(source);
source.addOutboundWire(outboundWire);
- JavaAtomicComponent target = new JavaAtomicComponent("target", configuration);
+ configuration.setName("target");
+ JavaAtomicComponent target = new JavaAtomicComponent(configuration);
InboundWire targetWire = MockFactory.createTargetWire("Target", Target.class);
targetWire.setContainer(target);
target.addInboundWire(targetWire);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java Fri Nov 3 20:06:48 2006
@@ -91,7 +91,9 @@
configuration.addServiceInterface(DummyImpl.class);
configuration.setWireService(WIRE_SERVICE);
configuration.setWorkContext(new WorkContextImpl());
- return new JavaAtomicComponent(instance.getClass().getName(), configuration);
+ configuration.setName(instance.getClass().getName());
+
+ return new JavaAtomicComponent(configuration);
}
@SuppressWarnings("unchecked")
@@ -103,7 +105,8 @@
configuration.addServiceInterface(clazz);
configuration.setWireService(WIRE_SERVICE);
configuration.setWorkContext(new WorkContextImpl());
- return new JavaAtomicComponent(name, configuration);
+ configuration.setName(name);
+ return new JavaAtomicComponent(configuration);
}
@@ -185,7 +188,8 @@
configuration.addReferenceSite(entry.getKey(), entry.getValue());
}
configuration.setWorkContext(new WorkContextImpl());
- JavaAtomicComponent sourceContext = new JavaAtomicComponent(sourceName, configuration);
+ configuration.setName(sourceName);
+ JavaAtomicComponent sourceContext = new JavaAtomicComponent(configuration);
OutboundWire outboundWire = createReferenceWire(targetName, sourceReferenceClass, sourceHeadInterceptor);
sourceContext.addOutboundWire(outboundWire);
targetScope.register(targetContext);
@@ -236,7 +240,9 @@
configuration.addReferenceSite(entry.getKey(), entry.getValue());
}
configuration.setWorkContext(new WorkContextImpl());
- JavaAtomicComponent sourceContext = new JavaAtomicComponent(sourceName, configuration);
+ configuration.setName(sourceName);
+
+ JavaAtomicComponent sourceContext = new JavaAtomicComponent(configuration);
OutboundWire outboundWire = createReferenceWire(targetName, sourceReferenceClass, null);
List<OutboundWire> factories = new ArrayList<OutboundWire>();
factories.add(outboundWire);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/component/SystemAtomicComponentTestCase.java Fri Nov 3 20:06:48 2006
@@ -42,7 +42,8 @@
configuration.addServiceInterface(Foo.class);
configuration.setInstanceFactory(factory);
configuration.setInitInvoker(initInvoker);
- SystemAtomicComponentImpl component = new SystemAtomicComponentImpl("foo", configuration);
+ configuration.setName("foo");
+ SystemAtomicComponentImpl component = new SystemAtomicComponentImpl(configuration);
Foo foo = (Foo) component.createInstance();
component.init(foo);
assertTrue(foo.initialized);
@@ -56,7 +57,8 @@
configuration.setInitInvoker(initInvoker);
configuration.addConstructorParamName("foo");
configuration.addConstructorParamName("ref");
- SystemAtomicComponentImpl component = new SystemAtomicComponentImpl("foo", configuration);
+ configuration.setName("foo");
+ SystemAtomicComponentImpl component = new SystemAtomicComponentImpl(configuration);
component.addPropertyFactory("foo", new SingletonObjectFactory<String>("baz"));
Foo target = new Foo();
SystemOutboundWire wire = EasyMock.createMock(SystemOutboundWire.class);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/AtomicComponentWireInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/AtomicComponentWireInvocationTestCase.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/AtomicComponentWireInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/AtomicComponentWireInvocationTestCase.java Fri Nov 3 20:06:48 2006
@@ -53,7 +53,8 @@
configuration.addReferenceSite("setTarget", SourceImpl.class.getMethod("setTarget", Target.class));
configuration.addServiceInterface(Source.class);
configuration.setInstanceFactory(new PojoObjectFactory<SourceImpl>(SourceImpl.class.getConstructor()));
- SystemAtomicComponent sourceContext = new SystemAtomicComponentImpl("source", configuration);
+ configuration.setName("source");
+ SystemAtomicComponent sourceContext = new SystemAtomicComponentImpl(configuration);
QualifiedName qName = new QualifiedName("service");
OutboundWire outboundWire = new SystemOutboundWireImpl("setTarget", qName, Target.class);
outboundWire.setTargetWire(inboundWire);
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.injection;
+
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.host.ResourceHost;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ResourceObjectFactoryTestCase extends TestCase {
+
+ public void testResolveFromHostByType() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class))).andReturn("foo");
+ EasyMock.replay(host);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, host);
+ assertEquals("foo", factory.getInstance());
+ EasyMock.verify(host);
+ EasyMock.verify(parent);
+ }
+
+ public void testResolveFromHostByName() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class),
+ EasyMock.eq("sca://localhost/bar"))).andReturn("foo");
+ EasyMock.replay(host);
+ ResourceObjectFactory<String> factory =
+ new ResourceObjectFactory<String>(String.class, "sca://localhost/bar", false, null, host);
+ assertEquals("foo", factory.getInstance());
+ EasyMock.verify(host);
+ }
+
+ public void testResolveFromParentByType() throws Exception {
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn("foo");
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, null);
+ assertEquals("foo", factory.getInstance());
+ EasyMock.verify(parent);
+ }
+
+ public void testResolveFromParentByName() throws Exception {
+ AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(component.getServiceInstance()).andReturn("foo");
+ EasyMock.replay(component);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.getSystemChild(EasyMock.eq("bar"))).andReturn(component);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory =
+ new ResourceObjectFactory<String>(String.class, "bar", false, parent, null);
+ assertEquals("foo", factory.getInstance());
+ EasyMock.verify(parent);
+ EasyMock.verify(component);
+ }
+
+ /**
+ * Verifies if a resource is not found as a child of the parent, the host namespace will be searched
+ */
+ public void testResolveFromParentThenResolveFromHost() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class))).andReturn("foo");
+ EasyMock.replay(host);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, host);
+ assertEquals("foo", factory.getInstance());
+ EasyMock.verify(parent);
+ EasyMock.verify(host);
+ }
+
+ public void testResolveFromParentThenResolveFromHostNotFound() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(host);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, true, parent, host);
+ assertNull(factory.getInstance());
+ EasyMock.verify(parent);
+ EasyMock.verify(host);
+ }
+
+ public void testResolveByTypeNotFound() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(host);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, false, parent, host);
+ try {
+ factory.getInstance();
+ fail();
+ } catch (ResourceNotFoundException e) {
+ //expected
+ }
+ EasyMock.verify(parent);
+ EasyMock.verify(host);
+ }
+
+ public void testResolveByTypeNotFoundOptional() throws Exception {
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(host);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemInstance(EasyMock.eq(String.class))).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceObjectFactory<String> factory = new ResourceObjectFactory<String>(String.class, true, parent, host);
+ assertNull(factory.getInstance());
+ EasyMock.verify(parent);
+ EasyMock.verify(host);
+ }
+
+
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/ResourceObjectFactoryTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/factories/MockFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/factories/MockFactory.java?view=diff&rev=471111&r1=471110&r2=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/factories/MockFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/factories/MockFactory.java Fri Nov 3 20:06:48 2006
@@ -123,7 +123,8 @@
}
sourceConfig.addReferenceSite(setter.getName(), setter);
- SystemAtomicComponent sourceCtx = new SystemAtomicComponentImpl(source, sourceConfig);
+ sourceConfig.setName(source);
+ SystemAtomicComponent sourceCtx = new SystemAtomicComponentImpl(sourceConfig);
QualifiedName targetName = new QualifiedName(target);
SystemOutboundWire wire = new SystemOutboundWireImpl(setter.getName(), targetName, targetClass);
InboundWire inboundWire = new SystemInboundWireImpl(targetName.getPortName(), targetClass, targetComponent);
@@ -153,7 +154,8 @@
configuration.setDestroyInvoker(new MethodEventInvoker<Object>(method));
}
}
- return new SystemAtomicComponentImpl(name, configuration);
+ configuration.setName(name);
+ return new SystemAtomicComponentImpl(configuration);
}
public static <T> InboundWire createTargetWireFactory(String serviceName, Class<T> interfaze)
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.core.services.host;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.SCAObject;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.host.ResourceHost;
+import org.apache.tuscany.spi.host.ResourceResolutionException;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DelegatingResourceHostRegistryTestCase extends TestCase {
+
+ public void testResolveByUri() throws Exception {
+ CompositeComponent parent = EasyMock.createNiceMock(CompositeComponent.class);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(String.class, "Foo://foo")).andReturn("result");
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ assertEquals("result", registry.resolveResource(String.class, "Foo://foo"));
+ EasyMock.verify(host);
+ }
+
+ public void testResolveBySCAUri() throws Exception {
+ Service child = EasyMock.createMock(Service.class);
+ EasyMock.expect(child.getServiceInstance()).andReturn("result");
+ EasyMock.replay(child);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.getSystemChild("foo")).andReturn(child);
+ EasyMock.replay(parent);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ assertEquals("result", registry.resolveResource(String.class, "SCA://foo"));
+ EasyMock.verify(host);
+ }
+
+
+ /**
+ * Tests system components not exposed as services are not visible
+ */
+ public void testResolveNonService() throws Exception {
+ SCAObject child = EasyMock.createMock(SCAObject.class);
+ EasyMock.expect(child.getServiceInstance()).andReturn("result");
+ EasyMock.replay(child);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.getSystemChild("foo")).andReturn(child);
+ EasyMock.replay(parent);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ assertNull(registry.resolveResource(String.class, "SCA://foo"));
+ EasyMock.verify(host);
+ }
+
+ public void testResolveBySCALocalHostUri() throws Exception {
+ Service child = EasyMock.createMock(Service.class);
+ EasyMock.expect(child.getServiceInstance()).andReturn("result");
+ EasyMock.replay(child);
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.getSystemChild("foo")).andReturn(child);
+ EasyMock.replay(parent);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ assertEquals("result", registry.resolveResource(String.class, "SCA://localhost/foo"));
+ EasyMock.verify(host);
+ }
+
+
+ public void testResolveByUriNotFound() throws Exception {
+ CompositeComponent parent = EasyMock.createNiceMock(CompositeComponent.class);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ try {
+ assertEquals("result", registry.resolveResource(String.class, "Bar://bar"));
+ fail();
+ } catch (ResourceResolutionException e) {
+ //expected
+ }
+ EasyMock.verify(host);
+ }
+
+ public void testUnregister() throws Exception {
+ CompositeComponent parent = EasyMock.createNiceMock(CompositeComponent.class);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ registry.unregister("Foo://");
+ try {
+ registry.resolveResource(String.class, "Foo://foo");
+ fail();
+ } catch (ResourceResolutionException e) {
+ //expected
+ }
+ EasyMock.verify(host);
+ }
+
+ public void testDelegatingResolveResource() throws Exception {
+ CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
+ EasyMock.expect(parent.resolveSystemExternalInstance(String.class)).andReturn(null);
+ EasyMock.replay(parent);
+ ResourceHost host = EasyMock.createMock(ResourceHost.class);
+ EasyMock.expect(host.resolveResource(String.class)).andReturn("result");
+ EasyMock.replay(host);
+ DelegatingResourceHostRegistry registry = new DelegatingResourceHostRegistry(parent);
+ registry.register("Foo://", host);
+ assertEquals("result", registry.resolveResource(String.class));
+ EasyMock.verify(host);
+ }
+
+
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/host/DelegatingResourceHostRegistryTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.spi.host;
+
+/**
+ * Interface implemented by host environments that allow for resolution of component implementation resources, e.g.
+ * items bound in a JNDI tree.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ResourceHost {
+
+ /**
+ * Resolve a resource matching the given type
+ *
+ * @param type the type of the resources
+ * @throws ResourceResolutionException if an error is encountered during resolution
+ */
+ <T> T resolveResource(Class<T> type) throws ResourceResolutionException;
+
+ /**
+ * Resolve a resource matching the given type and name
+ *
+ * @param type the type of the resources
+ * @param mappedName the mapped name of the resource
+ * @throws ResourceResolutionException if an error is encountered during resolution
+ */
+ <T> T resolveResource(Class<T> type, String mappedName) throws ResourceResolutionException;
+
+}
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHost.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.spi.host;
+
+/**
+ * Implementations manage a registry of resource hosts in the runtime
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ResourceHostRegistry {
+ /**
+ * Registers a resource host for the given uri prefix
+ *
+ * @param uri the uri prefix the host resolves resources for
+ * @param host the resource host
+ */
+ void register(String uri, ResourceHost host);
+
+ /**
+ * Removes a host registered for the given uri prefix
+ */
+ void unregister(String uri);
+}
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceHostRegistry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java?view=auto&rev=471111
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java Fri Nov 3 20:06:48 2006
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.spi.host;
+
+import org.apache.tuscany.api.TuscanyException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ResourceResolutionException extends TuscanyException {
+ public ResourceResolutionException() {
+ }
+
+ public ResourceResolutionException(String message) {
+ super(message);
+ }
+
+ public ResourceResolutionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ResourceResolutionException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/host/ResourceResolutionException.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org