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 2007/02/11 07:55:32 UTC
svn commit: r505856 [1/2] - in /incubator/tuscany/java/sca/kernel:
core/src/main/java/org/apache/tuscany/core/bootstrap/
core/src/main/java/org/apache/tuscany/core/builder/
core/src/main/java/org/apache/tuscany/core/component/
core/src/main/java/org/ap...
Author: jmarino
Date: Sat Feb 10 22:55:31 2007
New Revision: 505856
URL: http://svn.apache.org/viewvc?view=rev&rev=505856
Log:
move autowire to resolution phase; bring up standalone runtime
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStart.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStop.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemCompositeBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/PojoObjectFactory.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SystemWireConnectionTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/PojoObjectFactoryTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/resolver/DefaultAutowireResolverTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ContractCompatibilityTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireServiceExtensionTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/CompositeComponent.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Sat Feb 10 22:55:31 2007
@@ -86,7 +86,7 @@
*
* @return a new primordial Connector
*/
- Connector createConnector();
+ Connector getConnector();
/**
* Returns the AutowireResolver that resolves autowire targets
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Sat Feb 10 22:55:31 2007
@@ -41,7 +41,6 @@
import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
import org.apache.tuscany.core.binding.local.LocalBindingLoader;
import org.apache.tuscany.core.builder.BuilderRegistryImpl;
-import org.apache.tuscany.core.builder.ConnectorImpl;
import org.apache.tuscany.core.component.ComponentManager;
import org.apache.tuscany.core.component.WorkContextImpl;
import org.apache.tuscany.core.component.scope.CompositeScopeObjectFactory;
@@ -94,7 +93,8 @@
private final XMLInputFactory xmlFactory;
private final ComponentManager componentManager;
private final TuscanyManagementService managementService;
- private AutowireResolver resolver;
+ private final AutowireResolver resolver;
+ private final Connector connector;
/**
* Create a default bootstrapper.
@@ -103,18 +103,21 @@
* @param xmlFactory the XMLInputFactory to be used by the components to load XML artifacts
* @param componentManager the component manager for the runtime instance
* @param resolver the autowire resolver for the runtime instance
+ * @param connector the connector for the runtime instance
* @param managementService management service used by the runtime.
*/
public DefaultBootstrapper(MonitorFactory monitorFactory,
XMLInputFactory xmlFactory,
ComponentManager componentManager,
AutowireResolver resolver,
+ Connector connector,
TuscanyManagementService managementService) {
this.monitorFactory = monitorFactory;
this.xmlFactory = xmlFactory;
this.componentManager = componentManager;
this.managementService = managementService;
this.resolver = resolver;
+ this.connector = connector;
}
/**
@@ -154,7 +157,7 @@
JavaInterfaceProcessorRegistry interfaceIntrospector = new JavaInterfaceProcessorRegistryImpl();
Introspector introspector = createIntrospector(interfaceIntrospector);
LoaderRegistry loader = createLoader(new PropertyObjectFactoryImpl(), introspector);
- DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, resolver);
+ DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, resolver, componentManager, connector);
deployer.setMonitor(getMonitorFactory().getMonitor(ScopeContainerMonitor.class));
return deployer;
}
@@ -236,8 +239,8 @@
*
* @return a new Connector
*/
- public Connector createConnector() {
- return new ConnectorImpl(componentManager);
+ public Connector getConnector() {
+ return connector;
}
@@ -267,7 +270,7 @@
BuilderRegistryImpl builderRegistry =
new BuilderRegistryImpl(scopeRegistry, new JDKWireService(), componentManager);
SystemCompositeBuilder builder =
- new SystemCompositeBuilder(builderRegistry, createConnector(), managementService);
+ new SystemCompositeBuilder(builderRegistry, getConnector(), managementService);
builderRegistry.register(SystemCompositeImplementation.class, builder);
builderRegistry.register(SystemImplementation.class, new SystemComponentBuilder());
builderRegistry.register(LocalBindingDefinition.class, new LocalBindingBuilder());
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Sat Feb 10 22:55:31 2007
@@ -36,9 +36,7 @@
import org.apache.tuscany.spi.component.Service;
import org.apache.tuscany.spi.component.ServiceBinding;
import org.apache.tuscany.spi.component.TargetInvokerCreationException;
-import org.apache.tuscany.spi.component.TargetResolutionException;
import org.apache.tuscany.spi.component.WorkContext;
-import org.apache.tuscany.spi.idl.java.JavaServiceContract;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
import org.apache.tuscany.spi.model.ServiceContract;
@@ -55,7 +53,6 @@
import org.apache.tuscany.spi.wire.WireService;
import org.apache.tuscany.core.component.ComponentManager;
-import org.apache.tuscany.core.wire.LoopBackWire;
import org.apache.tuscany.core.wire.NonBlockingBridgingInterceptor;
import org.apache.tuscany.core.wire.SynchronousBridgingInterceptor;
import org.apache.tuscany.core.wire.WireUtils;
@@ -327,108 +324,34 @@
sourceChain.addInterceptor(new SynchronousBridgingInterceptor(head));
}
- protected void connect(SCAObject source, OutboundWire sourceWire, Reference target) throws WiringException {
- InboundWire targetWire = null;
- for (ReferenceBinding binding : target.getReferenceBindings()) {
- InboundWire candidate = binding.getInboundWire();
- if (sourceWire.getBindingType().equals(candidate.getBindingType())) {
- targetWire = candidate;
- break;
- }
- }
- if (targetWire == null) {
- if (target.getReferenceBindings().size() > 0 && source instanceof Component) {
- // TODO create a pluggable algorithm for selecting the binding type
- targetWire = target.getReferenceBindings().get(0).getInboundWire();
- }
- if (targetWire == null) {
- throw new NoCompatibleBindingsException(sourceWire.getUri(), sourceWire.getTargetUri());
- }
- }
- checkIfWireable(sourceWire, targetWire);
- boolean optimizable = isOptimizable(source.getScope(), target.getScope());
- connect(sourceWire, targetWire, optimizable);
- }
-
- protected void connect(SCAObject source, OutboundWire sourceWire, Service target) throws WiringException {
- InboundWire targetWire = null;
- for (ServiceBinding binding : target.getServiceBindings()) {
- InboundWire candidate = binding.getInboundWire();
- if (sourceWire.getBindingType().equals(candidate.getBindingType())) {
- targetWire = candidate;
- break;
- }
- }
- if (targetWire == null) {
- throw new NoCompatibleBindingsException(sourceWire.getUri(), sourceWire.getTargetUri());
- }
- checkIfWireable(sourceWire, targetWire);
- boolean optimizable = isOptimizable(source.getScope(), target.getScope());
- connect(sourceWire, targetWire, optimizable);
- }
-
- protected void connect(SCAObject source, OutboundWire sourceWire, Component target)
- throws WiringException {
- URI targetUri = sourceWire.getTargetUri();
- assert targetUri != null;
- InboundWire targetWire;
- targetWire = target.getTargetWire(sourceWire.getTargetUri().getFragment());
- if (targetWire == null) {
- URI sourceUri = sourceWire.getUri();
- throw new TargetServiceNotFoundException("Target not found ", sourceUri, targetUri);
- }
- checkIfWireable(sourceWire, targetWire);
- boolean optimizable = isOptimizable(source.getScope(), target.getScope());
- connect(sourceWire, targetWire, optimizable);
- }
-
- protected void autowire(OutboundWire outboundWire, CompositeComponent parent) throws WiringException {
- InboundWire targetWire;
- try {
- Class interfaze = outboundWire.getServiceContract().getInterfaceClass();
- if (CompositeComponent.class.equals(interfaze)) {
- JavaServiceContract contract = new JavaServiceContract(CompositeComponent.class);
- targetWire = new LoopBackWire();
- targetWire.setServiceContract(contract);
- targetWire.setContainer(parent);
- outboundWire.setTargetWire(targetWire);
- return;
- }
- targetWire = parent.resolveAutowire(interfaze);
- } catch (TargetResolutionException e) {
- URI sourceName = outboundWire.getUri();
- URI targetName = outboundWire.getTargetUri();
- throw new WireConnectException("Error resolving autowire target", sourceName, targetName, e);
- }
- if (targetWire == null) {
- // autowire may return null if it is optional. The client must decide if an error should be thrown
- return;
- }
- Scope sourceScope = outboundWire.getContainer().getScope();
- Scope targetScope = targetWire.getContainer().getScope();
- boolean optimizable = isOptimizable(sourceScope, targetScope);
- connect(outboundWire, targetWire, optimizable);
- }
-
- protected void checkIfWireable(OutboundWire sourceWire, InboundWire targetWire)
+ protected boolean assertWireable(OutboundWire sourceWire, InboundWire targetWire, boolean silent)
throws IncompatibleInterfacesException {
if (wireService == null) {
Class<?> sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
Class<?> targetInterface = targetWire.getServiceContract().getInterfaceClass();
if (!sourceInterface.isAssignableFrom(targetInterface)) {
- throw new IncompatibleInterfacesException(sourceWire.getUri(), targetWire.getUri());
+ if (!silent) {
+ throw new IncompatibleInterfacesException(sourceWire.getUri(), targetWire.getUri());
+ } else {
+ return false;
+ }
}
} else {
try {
ServiceContract sourceContract = sourceWire.getServiceContract();
ServiceContract targetContract = targetWire.getServiceContract();
- wireService.checkCompatibility(sourceContract, targetContract, false);
+ wireService.checkCompatibility(sourceContract, targetContract, false, silent);
} catch (IncompatibleServiceContractException e) {
URI sourceUri = sourceWire.getUri();
URI targetUri = targetWire.getUri();
- throw new IncompatibleInterfacesException(sourceUri, targetUri, e);
+ if (!silent) {
+ throw new IncompatibleInterfacesException(sourceUri, targetUri, e);
+ } else {
+ return false;
+ }
}
}
+ return true;
}
protected boolean isOptimizable(Scope pReferrer, Scope pReferee) {
@@ -487,7 +410,7 @@
if (targetWire == null) {
throw new TargetServiceNotFoundException("Target not found", sourceUri, targetUri);
}
- checkIfWireable(outboundWire, targetWire);
+ assertWireable(outboundWire, targetWire, false);
boolean optimizable = isOptimizable(service.getScope(), targetComponent.getScope());
connect(outboundWire, targetWire, optimizable);
connect(inboundWire, outboundWire, true);
@@ -529,30 +452,41 @@
// connect outbound wires for component references to their targets
for (List<OutboundWire> referenceWires : component.getOutboundWires().values()) {
for (OutboundWire outboundWire : referenceWires) {
- if (outboundWire.isAutowire()) {
- autowire(outboundWire, parent);
- } else {
- if (outboundWire.getTargetUri() == null) {
- URI source = outboundWire.getUri();
- URI target = outboundWire.getTargetUri();
- throw new MissingWireTargetException("Target name was null", source, target);
+ if (outboundWire.getTargetUri() == null) {
+ URI source = outboundWire.getUri();
+ URI target = outboundWire.getTargetUri();
+ throw new MissingWireTargetException("Target name was null", source, target);
+ }
+ URI sourceUri = outboundWire.getUri();
+ URI targetUri = outboundWire.getTargetUri();
+ String fragment = targetUri.getFragment();
+ URI defragUri = UriHelper.getDefragmentedName(targetUri);
+ Component targetComponent = componentManager.getComponent(defragUri);
+ if (targetComponent == null) {
+ throw new TargetComponentNotFoundException("Target not found", sourceUri, targetUri);
+ }
+ InboundWire targetWire = null;
+ if (fragment == null) {
+ // JFM TODO test
+ // find a suitable wire since no specific service was named
+ for (InboundWire wire : targetComponent.getInboundWires()) {
+ if (assertWireable(outboundWire, wire, true)) {
+ targetWire = wire;
+ break;
+ }
}
- URI sourceUri = outboundWire.getUri();
- URI targetUri = outboundWire.getTargetUri();
- String fragment = targetUri.getFragment();
- URI defragUri = UriHelper.getDefragmentedName(targetUri);
- Component targetComponent = componentManager.getComponent(defragUri);
- if (targetComponent == null) {
- throw new TargetComponentNotFoundException("Target not found", sourceUri, targetUri);
+ if (targetWire == null) {
+ throw new TargetServiceNotFoundException("Target not found", sourceUri, targetUri);
}
- InboundWire targetWire = targetComponent.getTargetWire(fragment);
+ } else {
+ targetWire = targetComponent.getTargetWire(fragment);
if (targetWire == null) {
throw new TargetServiceNotFoundException("Target not found", sourceUri, targetUri);
}
- checkIfWireable(outboundWire, targetWire);
- boolean optimizable = isOptimizable(component.getScope(), component.getScope());
- connect(outboundWire, targetWire, optimizable);
+ assertWireable(outboundWire, targetWire, false);
}
+ boolean optimizable = isOptimizable(component.getScope(), component.getScope());
+ connect(outboundWire, targetWire, optimizable);
}
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java Sat Feb 10 22:55:31 2007
@@ -151,6 +151,5 @@
}
}
}
-
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStart.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStart.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStart.java Sat Feb 10 22:55:31 2007
@@ -21,7 +21,7 @@
import java.net.URI;
/**
- * Propagated when a composite starts
+ * Propagated when a component starts
*
* @version $$Rev$$ $$Date$$
*/
@@ -30,10 +30,10 @@
private URI uri;
/**
- * Creates a component stop event
+ * Creates a component start event
*
* @param source the source of the event
- * @param componentURI the uri of the component being stopped
+ * @param componentURI the uri of the component being started
*/
public ComponentStart(Object source, URI componentURI) {
super(source);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStop.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStop.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStop.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/ComponentStop.java Sat Feb 10 22:55:31 2007
@@ -30,10 +30,10 @@
private URI uri;
/**
- * Creates a composite stop event
+ * Creates a component stop event
*
* @param source the source of the event
- * @param componentUri the composite component associated the composite being stopped
+ * @param componentUri the composite component associated the component being stopped
*/
public ComponentStop(Object source, URI componentUri) {
super(source);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Sat Feb 10 22:55:31 2007
@@ -23,15 +23,17 @@
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.Builder;
import org.apache.tuscany.spi.builder.BuilderException;
-import org.apache.tuscany.spi.builder.BuilderInstantiationException;
import org.apache.tuscany.spi.builder.BuilderRegistry;
+import org.apache.tuscany.spi.builder.Connector;
+import org.apache.tuscany.spi.builder.WiringException;
import org.apache.tuscany.spi.component.Component;
-import org.apache.tuscany.spi.component.ComponentRegistrationException;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.PrepareException;
+import org.apache.tuscany.spi.component.Reference;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.ScopeContainer;
import org.apache.tuscany.spi.component.ScopeContainerMonitor;
+import org.apache.tuscany.spi.component.Service;
import org.apache.tuscany.spi.deployer.Deployer;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.event.Event;
@@ -40,10 +42,13 @@
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.model.Implementation;
import org.apache.tuscany.spi.resolver.ResolutionException;
import org.apache.tuscany.api.annotation.Monitor;
+import org.apache.tuscany.core.component.ComponentManager;
import org.apache.tuscany.core.component.event.ComponentStop;
import org.apache.tuscany.core.component.scope.CompositeScopeContainer;
import org.apache.tuscany.core.resolver.AutowireResolver;
@@ -59,12 +64,21 @@
private ScopeContainerMonitor monitor;
private Loader loader;
private AutowireResolver resolver;
+ private ComponentManager componentManager;
+ private Connector connector;
- public DeployerImpl(XMLInputFactory xmlFactory, Loader loader, Builder builder, AutowireResolver resolver) {
+ public DeployerImpl(XMLInputFactory xmlFactory,
+ Loader loader,
+ Builder builder,
+ AutowireResolver resolver,
+ ComponentManager manager,
+ Connector connector) {
this.xmlFactory = xmlFactory;
this.loader = loader;
this.builder = builder;
this.resolver = resolver;
+ this.componentManager = manager;
+ this.connector = connector;
}
public DeployerImpl() {
@@ -98,14 +112,11 @@
scopeContainer.start();
DeploymentContext deploymentContext = new RootDeploymentContext(null, xmlFactory, scopeContainer, null);
deploymentContext.getPathNames().add(componentDefinition.getUri().toString());
- try {
- load(parent, componentDefinition, deploymentContext);
- } catch (LoaderException e) {
- e.addContextName(componentDefinition.getUri().toString());
- throw e;
- }
+ // load the model
+ load(parent, componentDefinition, deploymentContext);
// resolve autowires
resolver.resolve(null, componentDefinition);
+ // build runtime artifacts
Component component = (Component) build(parent, componentDefinition, deploymentContext);
// create a listener so the scope container is shutdown when the top-level composite stops
RuntimeEventListener listener = new RuntimeEventListener() {
@@ -118,11 +129,7 @@
};
component.addListener(listener);
component.prepare();
- try {
- parent.register(component);
- } catch (ComponentRegistrationException e) {
- throw new BuilderInstantiationException("Error registering component", e);
- }
+ connect(component, componentDefinition);
return component;
}
@@ -154,4 +161,31 @@
return builder.build(parent, componentDefinition, deploymentContext);
}
+ /**
+ * JFM TODO move to connector
+ */
+ private void connect(Component component, ComponentDefinition componentDefinition) throws WiringException {
+ if (component instanceof CompositeComponent) {
+ CompositeComponent composite = (CompositeComponent) component;
+ for (Service service : composite.getServices()) {
+ connector.connect(service);
+ }
+ for (Reference reference : composite.getReferences()) {
+ connector.connect(reference);
+ }
+ }
+ ComponentType<?, ?, ?> type = componentDefinition.getImplementation().getComponentType();
+ if (type instanceof CompositeComponentType) {
+ CompositeComponentType<?, ?, ?> compositeType = (CompositeComponentType<?, ?, ?>) type;
+ for (ComponentDefinition<? extends Implementation<?>> definition : compositeType.getComponents().values()) {
+ Component child = componentManager.getComponent(definition.getUri());
+ assert child != null;
+ connect(child, definition);
+ }
+ } else {
+ connector.connect(component);
+ }
+
+ }
+
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeBuilder.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeBuilder.java Sat Feb 10 22:55:31 2007
@@ -26,11 +26,8 @@
CompositeComponent component,
CompositeComponentType<?, ?, ?> componentType,
DeploymentContext deploymentContext) throws BuilderException {
-
for (ComponentDefinition<? extends Implementation<?>> definition : componentType.getComponents().values()) {
builderRegistry.build(component, definition, deploymentContext);
- // JFM TODO
- //component.register(child);
}
for (ServiceDefinition definition : componentType.getServices().values()) {
try {
@@ -42,13 +39,14 @@
}
for (ReferenceDefinition definition : componentType.getReferences().values()) {
try {
- Reference child = builderRegistry.build(component, definition, deploymentContext);
- component.register(child);
+ Reference reference = builderRegistry.build(component, definition, deploymentContext);
+ component.register(reference);
} catch (ComponentRegistrationException e) {
throw new BuilderInstantiationException("Error registering reference", e);
}
}
component.getExtensions().putAll(componentType.getExtensions());
+ // connect services and references before components
return component;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemCompositeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemCompositeBuilder.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemCompositeBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemCompositeBuilder.java Sat Feb 10 22:55:31 2007
@@ -22,6 +22,7 @@
import org.osoa.sca.annotations.Constructor;
+import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.BuilderException;
import org.apache.tuscany.spi.builder.BuilderRegistry;
import org.apache.tuscany.spi.builder.Connector;
@@ -30,7 +31,6 @@
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.services.management.TuscanyManagementService;
-import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
@@ -45,7 +45,7 @@
@Constructor
public SystemCompositeBuilder(@Autowire BuilderRegistry builderRegistry,
@Autowire Connector connector,
- @Autowire TuscanyManagementService managementService) {
+ @Autowire (required = false) TuscanyManagementService managementService) {
this.builderRegistry = builderRegistry;
this.connector = connector;
this.managementService = managementService;
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java Sat Feb 10 22:55:31 2007
@@ -33,6 +33,8 @@
import org.apache.tuscany.spi.component.TargetInitializationException;
import org.apache.tuscany.spi.component.TargetResolutionException;
import org.apache.tuscany.spi.extension.AbstractComponentExtension;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
@@ -43,6 +45,7 @@
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
import org.apache.tuscany.core.wire.jdk.JDKWireService;
/**
@@ -54,14 +57,22 @@
implements AtomicComponent {
private T instance;
private Map<String, InboundWire> inboundWires;
+ // JFM FIXME JDKWireService
private WireService wireService = new JDKWireService();
+ // JFM FIXME remove
+ private JavaInterfaceProcessorRegistry interfaceProcessorRegistry = new JavaInterfaceProcessorRegistryImpl();
private List<ServiceContract> serviceContracts = new ArrayList<ServiceContract>();
public SystemSingletonAtomicComponent(URI name, CompositeComponent parent, Class<S> interfaze, T instance) {
super(name, parent);
this.instance = instance;
inboundWires = new HashMap<String, InboundWire>();
- initWire(interfaze);
+ try {
+ initWire(interfaze);
+ } catch (InvalidServiceContractException e) {
+ // JFM FIXME
+ e.printStackTrace();
+ }
}
@@ -73,7 +84,12 @@
this.instance = instance;
inboundWires = new HashMap<String, InboundWire>();
for (Class<?> interfaze : services) {
- initWire(interfaze);
+ try {
+ initWire(interfaze);
+ } catch (InvalidServiceContractException e) {
+ // xcv ficme
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
}
}
@@ -159,8 +175,8 @@
return serviceContracts;
}
- private void initWire(Class<?> interfaze) {
- JavaServiceContract serviceContract = new JavaServiceContract(interfaze);
+ private void initWire(Class<?> interfaze) throws InvalidServiceContractException {
+ JavaServiceContract serviceContract = interfaceProcessorRegistry.introspect(interfaze);
// create a relative URI
URI uri = URI.create("#" + interfaze.getName());
ServiceDefinition def = new ServiceDefinition(uri, serviceContract, false);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/PojoObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/PojoObjectFactory.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/PojoObjectFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/injection/PojoObjectFactory.java Sat Feb 10 22:55:31 2007
@@ -94,10 +94,11 @@
for (int i = 0; i < size; i++) {
ObjectFactory<?> objectFactory = initializerFactories[i];
if (objectFactory == null) {
- String name = ctr.getName();
- throw new ObjectCallbackException("Null object factory for constructor parameter [" + i + "]", name);
+ // this can happen if a reference is optional
+ initargs[i] = null;
+ } else {
+ initargs[i] = objectFactory.getInstance();
}
- initargs[i] = objectFactory.getInstance();
}
try {
ctr.setAccessible(true);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat Feb 10 22:55:31 2007
@@ -21,6 +21,7 @@
import java.lang.reflect.Type;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
@@ -247,12 +248,21 @@
}
URI targetURI;
QualifiedName qName = new QualifiedName(target);
+ StringBuilder buf = new StringBuilder();
+ List<String> names = deploymentContext.getPathNames();
+ for (int i = 0; i < names.size() - 1; i++) {
+ buf.append("/");
+ }
+ if (names.size() > 0) {
+ buf.append(names.get(names.size() - 1));
+ }
+ String path = buf.toString();
try {
if (qName.getPortName() == null) {
- targetURI = new URI(componentDefinition.getUri() + "/" + qName.getPartName());
+ targetURI = new URI(path + "/" + qName.getPartName());
} else {
targetURI =
- new URI(componentDefinition.getUri() + "/" + qName.getPartName() + "#" + qName.getPortName());
+ new URI(path + "/" + qName.getPartName() + "#" + qName.getPortName());
}
} catch (URISyntaxException e) {
throw new InvalidReferenceException("Illegal URI", name, e);
@@ -279,7 +289,7 @@
if (referenceTarget == null) {
referenceTarget = new ReferenceTarget();
try {
- referenceTarget.setReferenceName(new URI(componentDefinition.getUri() + "#" + name));
+ referenceTarget.setReferenceName(new URI(path + "#" + name));
} catch (URISyntaxException e) {
throw new IllegalSCDLNameException(e);
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java Sat Feb 10 22:55:31 2007
@@ -62,7 +62,7 @@
ReferenceDefinition reference = childType.getReferences().get(fragment);
assert reference != null;
ServiceContract requiredContract = reference.getServiceContract();
- resolve(compositeType, requiredContract, target);
+ resolve(compositeType, requiredContract, target, reference.isRequired());
}
}
}
@@ -74,7 +74,8 @@
ReferenceDefinition reference = type.getReferences().get(fragment);
assert reference != null;
ServiceContract requiredContract = reference.getServiceContract();
- resolve(parentDefinition.getImplementation().getComponentType(), requiredContract, target);
+ CompositeComponentType<?, ?, ?> ctype = parentDefinition.getImplementation().getComponentType();
+ resolve(ctype, requiredContract, target, reference.isRequired());
}
}
@@ -92,12 +93,14 @@
* @param compositeType the composite component type to resolve against
* @param requiredContract the required target contract
* @param target the reference target
+ * @param required true if the autowire is required
* @throws AutowireTargetNotFoundException
*
*/
private void resolve(CompositeComponentType<?, ?, ?> compositeType,
ServiceContract requiredContract,
- ReferenceTarget target) throws AutowireTargetNotFoundException {
+ ReferenceTarget target,
+ boolean required) throws AutowireTargetNotFoundException {
// for now, attempt to match on interface, assume the class can be loaded
Class<?> requiredInterface = requiredContract.getInterfaceClass();
if (requiredInterface == null) {
@@ -126,7 +129,9 @@
if (targetUri == null) {
if (candidateUri == null) {
candidateUri = resolvePrimordial(requiredContract);
- if (candidateUri == null) {
+ if (candidateUri == null && !required) {
+ return;
+ } else if (candidateUri == null) {
String refName = target.getReferenceName().toString();
throw new AutowireTargetNotFoundException("No matching target found", refName);
}
@@ -140,7 +145,7 @@
private URI resolvePrimordial(ServiceContract contract) {
Class<?> requiredClass = contract.getInterfaceClass();
for (Map.Entry<ServiceContract, URI> entry : primordialAutowire.entrySet()) {
- if (requiredClass.isAssignableFrom(contract.getInterfaceClass())) {
+ if (requiredClass.isAssignableFrom(entry.getKey().getInterfaceClass())) {
return entry.getValue();
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java Sat Feb 10 22:55:31 2007
@@ -27,6 +27,7 @@
import org.apache.tuscany.spi.bootstrap.ComponentNames;
import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
import org.apache.tuscany.spi.builder.BuilderException;
+import org.apache.tuscany.spi.builder.Connector;
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.ComponentException;
import org.apache.tuscany.spi.component.ComponentRegistrationException;
@@ -45,6 +46,7 @@
import org.apache.tuscany.core.monitor.NullMonitorFactory;
import org.apache.tuscany.core.resolver.AutowireResolver;
import org.apache.tuscany.core.resolver.DefaultAutowireResolver;
+import org.apache.tuscany.core.builder.ConnectorImpl;
import org.apache.tuscany.host.MonitorFactory;
import org.apache.tuscany.host.RuntimeInfo;
import org.apache.tuscany.host.management.ManagementService;
@@ -214,7 +216,8 @@
TuscanyManagementService tms = (TuscanyManagementService) getManagementService();
resolver = new DefaultAutowireResolver();
componentManager = new ComponentManagerImpl(tms, resolver);
- return new DefaultBootstrapper(getMonitorFactory(), xmlFactory, componentManager, resolver, tms);
+ Connector connector = new ConnectorImpl(componentManager);
+ return new DefaultBootstrapper(getMonitorFactory(), xmlFactory, componentManager, resolver, connector, tms);
}
protected void registerSystemComponents() throws InitializationException {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java Sat Feb 10 22:55:31 2007
@@ -19,24 +19,12 @@
package org.apache.tuscany.core.services.extension;
import java.io.File;
-import java.io.IOException;
import java.net.MalformedURLException;
-import java.net.URI;
-
import java.net.URL;
import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.builder.BuilderException;
-import org.apache.tuscany.spi.component.Component;
-import org.apache.tuscany.spi.component.ComponentException;
import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.deployer.CompositeClassLoader;
import org.apache.tuscany.spi.deployer.Deployer;
-import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.model.ComponentDefinition;
-import org.apache.tuscany.spi.resolver.ResolutionException;
-
-import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
/**
* @version $Rev$ $Date$
@@ -50,10 +38,11 @@
this.deployer = deployer;
}
- @Autowire
- public void setParent(CompositeComponent parent) {
- this.parent = parent;
- }
+// JFM cannot autowire parents - need to come up with a better approach
+// @Autowire
+// public void setParent(CompositeComponent parent) {
+// this.parent = parent;
+// }
protected void deployExtension(File file) {
// extension name is file name less any extension
@@ -74,57 +63,58 @@
}
protected void deployExtension(String name, URL url) {
- // FIXME for now, assume this class's ClassLoader is the Tuscany system classloader
- // FIXME we should really use the one associated with the parent composite
- CompositeClassLoader extensionCL = new CompositeClassLoader(getClass().getClassLoader());
-
- // see if the URL points to a composite JAR by looking for a default SCDL file inside it
- URL scdlLocation;
- try {
- scdlLocation = new URL("jar:" + url.toExternalForm() + "!/META-INF/sca/default.scdl");
- } catch (MalformedURLException e) {
- // the form of the jar: URL should be correct given url.toExternalForm() worked
- throw new AssertionError();
- }
- try {
- scdlLocation.openStream().close();
- // we connected to the SCDL so let's add the JAR file to the classloader
- extensionCL.addURL(url);
- } catch (IOException e) {
- // assume that the URL we were given is not a JAR file so just use the supplied resource
- scdlLocation = url;
- }
-
- // create a ComponentDefinition to represent the component we are going to deploy
- SystemCompositeImplementation implementation = new SystemCompositeImplementation();
- implementation.setScdlLocation(scdlLocation);
- implementation.setClassLoader(extensionCL);
- URI uri = parent.getUri().resolve(name);
- ComponentDefinition<SystemCompositeImplementation> definition =
- new ComponentDefinition<SystemCompositeImplementation>(uri, implementation);
-
- // FIXME: [rfeng] Should we reset the thread context class loader here?
- // From the debugger with tomcat, the current TCCL is the RealmClassLoader
- // ClassLoader contextCL = Thread.currentThread().getContextClassLoader();
- try {
- // Thread.currentThread().setContextClassLoader(extensionCL);
- Component component;
- try {
- component = deployer.deploy(parent, definition);
- component.start();
- } catch (BuilderException e) {
- // FIXME JFM handle the exception
- e.printStackTrace();
- } catch (ComponentException e) {
- // FIXME handle the exception
- e.printStackTrace();
- } catch (ResolutionException e) {
- // FIXME handle the exception
- e.printStackTrace();
- }
- } catch (LoaderException e) {
- // FIXME handle the exception
- e.printStackTrace();
- }
+ throw new UnsupportedOperationException("");
+// // FIXME for now, assume this class's ClassLoader is the Tuscany system classloader
+// // FIXME we should really use the one associated with the parent composite
+// CompositeClassLoader extensionCL = new CompositeClassLoader(getClass().getClassLoader());
+//
+// // see if the URL points to a composite JAR by looking for a default SCDL file inside it
+// URL scdlLocation;
+// try {
+// scdlLocation = new URL("jar:" + url.toExternalForm() + "!/META-INF/sca/default.scdl");
+// } catch (MalformedURLException e) {
+// // the form of the jar: URL should be correct given url.toExternalForm() worked
+// throw new AssertionError();
+// }
+// try {
+// scdlLocation.openStream().close();
+// // we connected to the SCDL so let's add the JAR file to the classloader
+// extensionCL.addURL(url);
+// } catch (IOException e) {
+// // assume that the URL we were given is not a JAR file so just use the supplied resource
+// scdlLocation = url;
+// }
+//
+// // create a ComponentDefinition to represent the component we are going to deploy
+// SystemCompositeImplementation implementation = new SystemCompositeImplementation();
+// implementation.setScdlLocation(scdlLocation);
+// implementation.setClassLoader(extensionCL);
+// URI uri = parent.getUri().resolve(name);
+// ComponentDefinition<SystemCompositeImplementation> definition =
+// new ComponentDefinition<SystemCompositeImplementation>(uri, implementation);
+//
+// // FIXME: [rfeng] Should we reset the thread context class loader here?
+// // From the debugger with tomcat, the current TCCL is the RealmClassLoader
+// // ClassLoader contextCL = Thread.currentThread().getContextClassLoader();
+// try {
+// // Thread.currentThread().setContextClassLoader(extensionCL);
+// Component component;
+// try {
+// component = deployer.deploy(parent, definition);
+// component.start();
+// } catch (BuilderException e) {
+// // FIXME JFM handle the exception
+// e.printStackTrace();
+// } catch (ComponentException e) {
+// // FIXME handle the exception
+// e.printStackTrace();
+// } catch (ResolutionException e) {
+// // FIXME handle the exception
+// e.printStackTrace();
+// }
+// } catch (LoaderException e) {
+// // FIXME handle the exception
+// e.printStackTrace();
+// }
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java Sat Feb 10 22:55:31 2007
@@ -51,13 +51,11 @@
private AtomicComponent targetComponent;
private boolean optimizable;
-
/**
* Creates a local inbound wire
*/
public InboundWireImpl() {
}
-
/**
* Creates an inbound wire for the given binding type
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java Sat Feb 10 22:55:31 2007
@@ -75,7 +75,6 @@
wire.setUri(service.getUri());
for (Operation<?> operation : contract.getOperations().values()) {
InboundInvocationChain chain = createInboundChain(operation);
- // TODO handle policy
chain.addInterceptor(new InvokerInterceptor());
wire.addInvocationChain(operation, chain);
}
@@ -154,7 +153,6 @@
outboundWire.setCallbackInterface(contract.getCallbackClass());
for (Operation<?> operation : contract.getCallbackOperations().values()) {
InboundInvocationChain callbackTargetChain = createInboundChain(operation);
- // TODO handle policy
callbackTargetChain.addInterceptor(new InvokerInterceptor());
outboundWire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
}
@@ -195,7 +193,6 @@
outboundWire.setCallbackInterface(contract.getCallbackClass());
for (Operation<?> operation : contract.getCallbackOperations().values()) {
InboundInvocationChain callbackTargetChain = createInboundChain(operation);
- // TODO handle policy
callbackTargetChain.addInterceptor(new InvokerInterceptor());
outboundWire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
}
@@ -204,64 +201,82 @@
serviceBinding.setOutboundWire(outboundWire);
}
- /**
- * Compares two operations for wiring compatibility as defined by the SCA assembly specification, namely: <p/> <ol>
- * <li>compatibility for the individual method is defined as compatibility of the signature, that is method name,
- * input types, and output types MUST BE the same. <li>the order of the input and output types also MUST BE the
- * same. <li>the set of Faults and Exceptions expected by the source MUST BE the same or be a superset of those
- * specified by the service. </ol>
- *
- * @param source the source contract to compare
- * @param target the target contract to compare
- * @throws org.apache.tuscany.spi.wire.IncompatibleServiceContractException
- * if the two contracts don't match
- */
- public void checkCompatibility(ServiceContract<?> source, ServiceContract<?> target, boolean ignoreCallback)
+ public boolean checkCompatibility(ServiceContract<?> source,
+ ServiceContract<?> target,
+ boolean ignoreCallback,
+ boolean silent)
throws IncompatibleServiceContractException {
if (source == target) {
// Shortcut for performance
- return;
+ return true;
}
if (source.isRemotable() != target.isRemotable()) {
- throw new IncompatibleServiceContractException("Remotable settings do not match", source, target);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Remotable settings do not match", source, target);
+ } else {
+ return false;
+ }
}
if (source.getInteractionScope() != target.getInteractionScope()) {
- throw new IncompatibleServiceContractException("Interaction scopes settings do not match", source, target);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Interaction scopes do not match", source, target);
+ } else {
+ return false;
+ }
}
for (Operation<?> operation : source.getOperations().values()) {
Operation<?> targetOperation = target.getOperations().get(operation.getName());
if (targetOperation == null) {
- throw new IncompatibleServiceContractException("Operation not found on target", source, target);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Operation not found on target", source, target);
+ } else {
+ return false;
+ }
}
if (!operation.equals(targetOperation)) {
- throw new IncompatibleServiceContractException("Target operations are not compatible", source, target);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Target operations are not compatible", source,
+ target);
+ } else {
+ return false;
+ }
}
}
if (ignoreCallback) {
- return;
+ return true;
}
for (Operation<?> operation : source.getCallbackOperations().values()) {
Operation<?> targetOperation = target.getCallbackOperations().get(operation.getName());
if (targetOperation == null) {
- throw new IncompatibleServiceContractException("Callback operation not found on target",
- source,
- target,
- null,
- targetOperation);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Callback operation not found on target",
+ source,
+ target,
+ null,
+ targetOperation);
+ } else {
+ return false;
+ }
}
if (!operation.equals(targetOperation)) {
- throw new IncompatibleServiceContractException("Target callback operation is not compatible",
- source,
- target,
- operation,
- targetOperation);
+ if (!silent) {
+ throw new IncompatibleServiceContractException("Target callback operation is not compatible",
+ source,
+ target,
+ operation,
+ targetOperation);
+ } else {
+ return false;
+ }
}
}
+ return true;
}
+
/**
* Creates a wire for flowing outbound invocations from a reference
*
@@ -272,49 +287,27 @@
protected List<OutboundWire> createWire(ReferenceTarget target, ReferenceDefinition definition) {
ServiceContract<?> contract = definition.getServiceContract();
List<OutboundWire> outboundWires = new ArrayList<OutboundWire>();
- if (definition.isAutowire()) {
+ // NOTE: it is possible that targets are empty (e.g. when a reference is not required).
+ // Return without creating wires
+ for (URI uri : target.getTargets()) {
OutboundWire wire = new OutboundWireImpl();
- wire.setAutowire(true);
wire.setServiceContract(contract);
wire.setUri(target.getReferenceName());
+ wire.setTargetUri(uri);
for (Operation<?> operation : contract.getOperations().values()) {
- // TODO handle policy
OutboundInvocationChain chain = createOutboundChain(operation);
wire.addInvocationChain(operation, chain);
+
}
if (contract.getCallbackName() != null) {
wire.setCallbackInterface(contract.getCallbackClass());
for (Operation<?> operation : contract.getCallbackOperations().values()) {
InboundInvocationChain callbackTargetChain = createInboundChain(operation);
- // TODO handle policy
callbackTargetChain.addInterceptor(new InvokerInterceptor());
wire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
}
}
outboundWires.add(wire);
- } else {
- for (URI uri : target.getTargets()) {
- OutboundWire wire = new OutboundWireImpl();
- wire.setServiceContract(contract);
- wire.setUri(target.getReferenceName());
- wire.setTargetUri(uri);
- for (Operation<?> operation : contract.getOperations().values()) {
- // TODO handle policy
- OutboundInvocationChain chain = createOutboundChain(operation);
- wire.addInvocationChain(operation, chain);
-
- }
- if (contract.getCallbackName() != null) {
- wire.setCallbackInterface(contract.getCallbackClass());
- for (Operation<?> operation : contract.getCallbackOperations().values()) {
- InboundInvocationChain callbackTargetChain = createInboundChain(operation);
- // TODO handle policy
- callbackTargetChain.addInterceptor(new InvokerInterceptor());
- wire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
- }
- }
- outboundWires.add(wire);
- }
}
return outboundWires;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java Sat Feb 10 22:55:31 2007
@@ -37,6 +37,6 @@
protected void setUp() throws Exception {
super.setUp();
- bootstrapper = new DefaultBootstrapper(new NullMonitorFactory(), null, null, null, null);
+ bootstrapper = new DefaultBootstrapper(new NullMonitorFactory(), null, null, null, null, null);
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java Sat Feb 10 22:55:31 2007
@@ -38,7 +38,6 @@
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -58,9 +57,8 @@
registry.process(EasyMock.eq(iwire), EasyMock.eq(owire));
replay(registry);
WireService wireService = createMock(WireService.class);
- wireService.checkCompatibility((ServiceContract<?>) EasyMock.anyObject(),
- (ServiceContract<?>) EasyMock.anyObject(), EasyMock.eq(false));
- expectLastCall().anyTimes();
+ EasyMock.expect(wireService.checkCompatibility((ServiceContract<?>) EasyMock.anyObject(),
+ (ServiceContract<?>) EasyMock.anyObject(), EasyMock.eq(false), EasyMock.eq(false))).andReturn(true);
replay(wireService);
ConnectorImpl connector = new ConnectorImpl(wireService, registry, null, null, null);
connector.connect(iwire, owire, false);
@@ -89,11 +87,9 @@
replay(registry);
WireService wireService = createMock(WireService.class);
- wireService.checkCompatibility((ServiceContract<?>) EasyMock.anyObject(),
- (ServiceContract<?>) EasyMock.anyObject(), EasyMock.eq(false));
- expectLastCall().anyTimes();
+ EasyMock.expect(wireService.checkCompatibility((ServiceContract<?>) EasyMock.anyObject(),
+ (ServiceContract<?>) EasyMock.anyObject(), EasyMock.eq(false), EasyMock.eq(false))).andReturn(true);
replay(wireService);
-
ConnectorImpl connector = new ConnectorImpl(wireService, registry, null, null, null);
connector.connect(owire, iwire, false);
verify(registry);
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SystemWireConnectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SystemWireConnectionTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SystemWireConnectionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SystemWireConnectionTestCase.java Sat Feb 10 22:55:31 2007
@@ -54,7 +54,6 @@
OutboundWire outbound = EasyMock.createMock(OutboundWire.class);
EasyMock.expect(outbound.getTargetUri()).andReturn(URI.create("scasystem://target#bar")).atLeastOnce();
- EasyMock.expect(outbound.isAutowire()).andReturn(false);
EasyMock.expect(outbound.getUri()).andReturn(URI.create("scasystem://target#bar"));
outbound.getInvocationChains();
EasyMock.expectLastCall().andReturn(Collections.emptyMap()).atLeastOnce();
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Sat Feb 10 22:55:31 2007
@@ -25,9 +25,9 @@
import javax.xml.stream.XMLInputFactory;
import org.apache.tuscany.spi.bootstrap.ComponentNames;
+import org.apache.tuscany.spi.builder.Connector;
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.model.BindingDefinition;
@@ -44,6 +44,7 @@
import junit.framework.TestCase;
import org.apache.tuscany.core.bootstrap.Bootstrapper;
import org.apache.tuscany.core.bootstrap.DefaultBootstrapper;
+import org.apache.tuscany.core.builder.ConnectorImpl;
import org.apache.tuscany.core.component.ComponentManager;
import org.apache.tuscany.core.component.ComponentManagerImpl;
import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
@@ -52,7 +53,6 @@
import org.apache.tuscany.core.resolver.DefaultAutowireResolver;
import org.easymock.EasyMock;
import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -123,7 +123,6 @@
CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
URI uri = URI.create("sca://parent");
EasyMock.expect(parent.getUri()).andReturn(uri).atLeastOnce();
- parent.register(isA(SCAObject.class));
replay(parent);
// load the boot1 file using the bootstrap deployer
componentDefinition.setUri(URI.create("sca://parent/simple"));
@@ -138,7 +137,6 @@
CompositeComponent parent = createNiceMock(CompositeComponent.class);
URI uri = URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT + "/parent");
EasyMock.expect(parent.getUri()).andReturn(uri).atLeastOnce();
- parent.register(isA(SCAObject.class));
replay(parent);
// load the boot2 file using the bootstrap deployer
@@ -154,9 +152,11 @@
XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
DefaultAutowireResolver resolver = new DefaultAutowireResolver();
ComponentManager manager = new ComponentManagerImpl(null, resolver);
+ Connector connector = new ConnectorImpl(manager);
manager.registerJavaObject(URI.create("ComponentManager"), ComponentManager.class, manager);
NullMonitorFactory monitorFactory = new NullMonitorFactory();
- Bootstrapper bootstrapper = new DefaultBootstrapper(monitorFactory, xmlFactory, manager, resolver, null);
+ Bootstrapper bootstrapper =
+ new DefaultBootstrapper(monitorFactory, xmlFactory, manager, resolver, connector, null);
deployer = (DeployerImpl) bootstrapper.createDeployer();
deploymentContext = new RootDeploymentContext(null, xmlFactory, null, null);
implementation = new SystemCompositeImplementation();
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/PojoObjectFactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/PojoObjectFactoryTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/PojoObjectFactoryTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/injection/PojoObjectFactoryTestCase.java Sat Feb 10 22:55:31 2007
@@ -19,8 +19,8 @@
package org.apache.tuscany.core.injection;
import java.lang.reflect.Constructor;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
import org.apache.tuscany.spi.ObjectFactory;
@@ -39,6 +39,18 @@
PojoObjectFactory<Foo> factory = new PojoObjectFactory<Foo>(ctor, initializers);
Foo foo = factory.getInstance();
assertEquals("foo", foo.foo);
+ }
+
+ /**
+ * Verifies null parameters can be passed to a constructor. This is valid when a reference is optional during
+ * constructor injection
+ */
+ public void testConstructorInjectionOptionalParam() throws Exception {
+ List<ObjectFactory> initializers = new ArrayList<ObjectFactory>();
+ initializers.add(null);
+ PojoObjectFactory<Foo> factory = new PojoObjectFactory<Foo>(ctor, initializers);
+ Foo foo = factory.getInstance();
+ assertNull(foo.foo);
}
public void testConstructorInitializerInjection() throws Exception {
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java Sat Feb 10 22:55:31 2007
@@ -19,10 +19,13 @@
package org.apache.tuscany.core.loader;
import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.implementation.java.PojoComponentType;
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
@@ -56,11 +59,16 @@
EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("reference");
EasyMock.expect(reader.getElementText()).andReturn("target");
EasyMock.replay(reader);
- loader.loadReference(reader, null, definition);
+ DeploymentContext context = EasyMock.createMock(DeploymentContext.class);
+ List<String> names = new ArrayList<String>();
+ names.add("parent");
+ EasyMock.expect(context.getPathNames()).andReturn(names);
+ EasyMock.replay(context);
+ loader.loadReference(reader, context, definition);
ReferenceTarget target = definition.getReferenceTargets().get("reference");
assertEquals(1, target.getTargets().size());
URI uri = target.getTargets().get(0);
- assertEquals("component/target", uri.toString());
+ assertEquals("parent/target", uri.toString());
assertNull(uri.getFragment());
EasyMock.verify(reader);
}
@@ -79,11 +87,16 @@
EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("reference");
EasyMock.expect(reader.getElementText()).andReturn("target/fragment");
EasyMock.replay(reader);
- loader.loadReference(reader, null, definition);
+ DeploymentContext context = EasyMock.createMock(DeploymentContext.class);
+ List<String> names = new ArrayList<String>();
+ names.add("parent");
+ EasyMock.expect(context.getPathNames()).andReturn(names);
+ EasyMock.replay(context);
+ loader.loadReference(reader, context, definition);
ReferenceTarget target = definition.getReferenceTargets().get("reference");
assertEquals(1, target.getTargets().size());
URI uri = target.getTargets().get(0);
- assertEquals("component/target#fragment", uri.toString());
+ assertEquals("parent/target#fragment", uri.toString());
EasyMock.verify(reader);
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/resolver/DefaultAutowireResolverTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/resolver/DefaultAutowireResolverTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/resolver/DefaultAutowireResolverTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/resolver/DefaultAutowireResolverTestCase.java Sat Feb 10 22:55:31 2007
@@ -131,6 +131,7 @@
contract.setInterfaceClass(requiredInterface);
ReferenceDefinition reference = new ReferenceDefinition(URI.create("#ref"), contract);
reference.setAutowire(true);
+ reference.setRequired(true);
MockComponentType type = new MockComponentType();
type.add(reference);
MockAtomicImpl impl = new MockAtomicImpl();
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ContractCompatibilityTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ContractCompatibilityTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ContractCompatibilityTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ContractCompatibilityTestCase.java Sat Feb 10 22:55:31 2007
@@ -59,7 +59,7 @@
public void testNoOperation() throws Exception {
ServiceContract source = new MockContract<Type>("FooContract");
ServiceContract target = new MockContract<Type>("FooContract");
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
public void testBasic() throws Exception {
@@ -73,7 +73,7 @@
Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
targetOperations.put("op1", opSource2);
target.setOperations(targetOperations);
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
public void testBasicIncompatibleOperationNames() throws Exception {
@@ -88,7 +88,7 @@
targetOperations.put("op2", opSource2);
target.setOperations(targetOperations);
try {
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
fail();
} catch (IncompatibleServiceContractException e) {
//expected
@@ -116,7 +116,7 @@
Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
@@ -142,7 +142,7 @@
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
try {
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
fail();
} catch (IncompatibleServiceContractException e) {
//expected
@@ -191,7 +191,7 @@
Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
/**
@@ -231,7 +231,7 @@
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
try {
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
fail();
} catch (IncompatibleServiceContractException e) {
//expected
@@ -259,7 +259,7 @@
Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
public void testSourceFaultTargetNoFaultCompatibility() throws Exception {
@@ -278,7 +278,7 @@
Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
targetOperations.put("op1", opTarget);
target.setOperations(targetOperations);
- wireService.checkCompatibility(source, target, false);
+ wireService.checkCompatibility(source, target, false, false);
}
/**
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireServiceExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireServiceExtensionTestCase.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireServiceExtensionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireServiceExtensionTestCase.java Sat Feb 10 22:55:31 2007
@@ -131,16 +131,16 @@
EasyMock.verify(invoker);
}
- public void testCreateAutowireReferenceWire() throws Exception {
+ /**
+ * Non-required references (including autowire references) may not have a target set. In this case, a wire should
+ * not be created. Verifies that a reference without a target does not have wires created.
+ */
+ public void testDoNotCreateWireForNonRequiredReferenceWithNoTarget() throws Exception {
ReferenceDefinition definition = new ReferenceDefinition(URI.create("foo"), contract);
- definition.setAutowire(true);
ReferenceTarget target = new ReferenceTarget();
target.setReferenceName(URI.create("#refName"));
- OutboundWire wire = wireService.createWire(target, definition).get(0);
- assertTrue(wire.isAutowire());
- assertEquals("#refName", wire.getUri().toString());
- assertEquals(contract, wire.getServiceContract());
- assertEquals(Callback.class, wire.getCallbackInterface());
+ List<OutboundWire> wires = wireService.createWire(target, definition);
+ assertTrue(wires.isEmpty());
}
public void testCreateReferenceMultipleWire() throws Exception {
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java Sat Feb 10 22:55:31 2007
@@ -39,6 +39,7 @@
/**
* Returns the SCA ComponentContext for this component.
+ *
* @return the SCA ComponentContext for this component
*/
ComponentContext getComponentContext();
@@ -82,6 +83,7 @@
* Returns the inbound wire associated with the given target name or null if not found. Targets can be services or
* references in the case of composites.
*
+ * @param targetName the target service name or null if the default service should be returned
* @return the wire associated with the given service name or null if not found.
*/
InboundWire getTargetWire(String targetName);
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/CompositeComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/CompositeComponent.java?view=diff&rev=505856&r1=505855&r2=505856
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/CompositeComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/CompositeComponent.java Sat Feb 10 22:55:31 2007
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.spi.component;
+import java.util.List;
+
import org.w3c.dom.Document;
import org.apache.tuscany.spi.event.RuntimeEventListener;
@@ -60,6 +62,10 @@
* Returns the child associated with a given name
*/
SCAObject getChild(String name);
+
+ List<Service> getServices();
+
+ List<Reference> getReferences();
/**
* Invoked by child components to return an wire to a target based on matching type. Resolved targets may be
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org