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/03/20 01:39:42 UTC
svn commit: r520196 - in /incubator/tuscany/java/sca/kernel:
core/src/main/java/org/apache/tuscany/core/builder/
core/src/main/java/org/apache/tuscany/core/implementation/java/
core/src/main/java/org/apache/tuscany/core/implementation/system/generator/...
Author: jmarino
Date: Mon Mar 19 17:39:40 2007
New Revision: 520196
URL: http://svn.apache.org/viewvc?view=rev&rev=520196
Log:
add autowire resolution to AssemblyService; create SystemPhysicalComponentGenerator
Added:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java (with props)
Modified:
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/implementation/java/JavaPhysicalComponentGenerator.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/model/physical/java/JavaPhysicalComponentDefinition.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.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/services/deployment/AssemblyServiceImpl.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/physical/PhysicalInterceptorDefinition.java
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=520196&r1=520195&r2=520196
==============================================================================
--- 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 Mon Mar 19 17:39:40 2007
@@ -335,13 +335,6 @@
for (InvocationChain chain : wire.getCallbackInvocationChains().values()) {
chain.setTargetInvoker(source.createTargetInvoker(null, chain.getOperation()));
}
- // TODO the above will deleted be replaced when we cut-over to the physical marshallers
- for (InvocationChain chain : wire.getPhysicalInvocationChains().values()) {
- chain.setTargetInvoker(target.createTargetInvoker(name, chain.getPhysicalOperation()));
- }
- for (InvocationChain chain : wire.getCallbackPhysicalInvocationChains().values()) {
- chain.setTargetInvoker(source.createTargetInvoker(null, chain.getPhysicalOperation()));
- }
}
/**
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaPhysicalComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaPhysicalComponentGenerator.java?view=diff&rev=520196&r1=520195&r2=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaPhysicalComponentGenerator.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaPhysicalComponentGenerator.java Mon Mar 19 17:39:40 2007
@@ -56,7 +56,6 @@
@EagerInit
public class JavaPhysicalComponentGenerator implements ComponentGenerator<ComponentDefinition<JavaImplementation>> {
-
public JavaPhysicalComponentGenerator(@Reference GeneratorRegistry registry) {
registry.register(JavaImplementation.class, this);
}
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java?view=auto&rev=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java Mon Mar 19 17:39:40 2007
@@ -0,0 +1,130 @@
+/*
+ * 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.system.generator;
+
+import java.lang.annotation.ElementType;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+import org.osoa.sca.annotations.EagerInit;
+import org.osoa.sca.annotations.Reference;
+
+import org.apache.tuscany.spi.generator.ComponentGenerator;
+import org.apache.tuscany.spi.generator.GenerationException;
+import org.apache.tuscany.spi.generator.GeneratorContext;
+import org.apache.tuscany.spi.generator.GeneratorRegistry;
+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.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
+
+import org.apache.tuscany.core.implementation.system.model.SystemImplementation;
+import org.apache.tuscany.core.implementation.system.model.SystemPhysicalComponentDefinition;
+import org.apache.tuscany.core.model.physical.instancefactory.InjectionSiteMapping;
+import org.apache.tuscany.core.model.physical.instancefactory.InjectionSource;
+import org.apache.tuscany.core.model.physical.instancefactory.MemberSite;
+import org.apache.tuscany.core.model.physical.instancefactory.ReflectiveIFProviderDefinition;
+import org.apache.tuscany.core.model.physical.java.JavaPhysicalWireSourceDefinition;
+import org.apache.tuscany.core.model.physical.java.JavaPhysicalWireTargetDefinition;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@EagerInit
+public class SystemPhysicalComponentGenerator implements ComponentGenerator<ComponentDefinition<SystemImplementation>> {
+
+
+ public SystemPhysicalComponentGenerator(@Reference GeneratorRegistry registry) {
+ registry.register(SystemImplementation.class, this);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public void generate(ComponentDefinition<SystemImplementation> definition, GeneratorContext context) {
+ SystemImplementation implementation = definition.getImplementation();
+ // TODO not a safe cast
+ PojoComponentType<JavaMappedService, JavaMappedReference, Property<?>> type = implementation.getComponentType();
+ SystemPhysicalComponentDefinition pDefinition = new SystemPhysicalComponentDefinition();
+ pDefinition.setComponentId(definition.getUri());
+ pDefinition.setScope(type.getImplementationScope());
+ // TODO get classloader id
+ ReflectiveIFProviderDefinition provider = new ReflectiveIFProviderDefinition();
+ Method destroyMethod = type.getDestroyMethod();
+ if (destroyMethod != null) {
+ provider.setDestroyMethod(destroyMethod.toString());
+ }
+ Method initMethod = type.getInitMethod();
+ if (initMethod != null) {
+ provider.setInitMethod(initMethod.toString());
+ }
+ provider.setImplementationClass(implementation.getImplementationClass().getName());
+ // TODO ctor arguments
+ // TODO set CDI source for ref, props, and callbacks
+ Map<String, JavaMappedReference> references = type.getReferences();
+ for (Map.Entry<String, JavaMappedReference> entry : references.entrySet()) {
+ JavaMappedReference reference = entry.getValue();
+ Member member = reference.getMember();
+ InjectionSource source = new InjectionSource();
+ source.setName(entry.getKey());
+ source.setValueType(InjectionSource.ValueSourceType.REFERENCE);
+ MemberSite memberSite = new MemberSite();
+ memberSite.setName(member.getName());
+ if (member instanceof Method) {
+ memberSite.setElementType(ElementType.METHOD);
+ } else if (member instanceof Field) {
+ memberSite.setElementType(ElementType.FIELD);
+ } else {
+ throw new AssertionError("Illegal injection type");
+ }
+
+ InjectionSiteMapping mapping = new InjectionSiteMapping();
+ mapping.setSource(source);
+ mapping.setSite(memberSite);
+ provider.addInjectionSite(mapping);
+ }
+
+ pDefinition.setInstanceFactoryProviderDefinition(provider);
+ context.getPhysicalChangeSet().addComponentDefinition(pDefinition);
+ }
+
+ public PhysicalWireSourceDefinition generateWireSource(ComponentDefinition<SystemImplementation> definition,
+ ReferenceDefinition serviceDefinition,
+ GeneratorContext context)
+ throws GenerationException {
+ JavaPhysicalWireSourceDefinition wireDefinition = new JavaPhysicalWireSourceDefinition();
+ wireDefinition.setUri(definition.getUri());
+ return wireDefinition;
+ }
+
+ public PhysicalWireTargetDefinition generateWireTarget(ComponentDefinition<SystemImplementation> definition,
+ ServiceDefinition serviceDefinition,
+ GeneratorContext context)
+ throws GenerationException {
+ JavaPhysicalWireTargetDefinition wireDefinition = new JavaPhysicalWireTargetDefinition();
+ wireDefinition.setUri(definition.getUri());
+ return wireDefinition;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/generator/SystemPhysicalComponentGenerator.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/model/physical/java/JavaPhysicalComponentDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/model/physical/java/JavaPhysicalComponentDefinition.java?view=diff&rev=520196&r1=520195&r2=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/model/physical/java/JavaPhysicalComponentDefinition.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/model/physical/java/JavaPhysicalComponentDefinition.java Mon Mar 19 17:39:40 2007
@@ -18,10 +18,6 @@
*/
package org.apache.tuscany.core.model.physical.java;
-import java.net.URI;
-
-import org.apache.tuscany.core.component.InstanceFactoryProvider;
-import org.apache.tuscany.spi.model.physical.PhysicalComponentDefinition;
import org.apache.tuscany.spi.model.physical.POJOComponentDefinition;
/**
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java?view=diff&rev=520196&r1=520195&r2=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java Mon Mar 19 17:39:40 2007
@@ -45,10 +45,20 @@
ComponentDefinition<? extends Implementation<?>> definition) throws ResolutionException;
/**
+ * Resolves autowires for a composite component type and its decendents
+ *
+ * @param compositeType the component type to resolve autowires for
+ * @throws ResolutionException
+ */
+ @SuppressWarnings({"unchecked"})
+ public void resolve(CompositeComponentType<?, ?, ?> compositeType) throws ResolutionException;
+
+ /**
* Adds the uri of a host system service that can be an autowire target
*
* @param contract the service contract of the system service
* @param uri the component uri
*/
void addHostUri(ServiceContract contract, URI uri);
+
}
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=520196&r1=520195&r2=520196
==============================================================================
--- 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 Mon Mar 19 17:39:40 2007
@@ -90,6 +90,27 @@
hostAutowire.put(contract, uri);
}
+ public void resolve(CompositeComponentType<?, ?, ?> compositeType) throws ResolutionException {
+ for (ComponentDefinition<? extends Implementation<?>> child : compositeType.getComponents().values()) {
+ Implementation<?> implementation = child.getImplementation();
+ ComponentType<?, ?, ?> childType = implementation.getComponentType();
+ if (childType instanceof CompositeComponentType) {
+ // recurse decendents for composites
+ resolve(null, child);
+ }
+ Map<String, ReferenceTarget> targets = child.getReferenceTargets();
+ for (ReferenceDefinition reference : childType.getReferences().values()) {
+ ReferenceTarget target = targets.get(reference.getUri().getFragment());
+ if (target == null) {
+ continue;
+ }
+ if (target.isAutowire()) {
+ ServiceContract requiredContract = reference.getServiceContract();
+ resolve(compositeType, requiredContract, target, reference.isRequired());
+ }
+ }
+ }
+ }
/**
* Performs the actual resolution against a composite TODO this should be extensible allowing for path
* optimizations
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/AssemblyServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/AssemblyServiceImpl.java?view=diff&rev=520196&r1=520195&r2=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/AssemblyServiceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/AssemblyServiceImpl.java Mon Mar 19 17:39:40 2007
@@ -28,7 +28,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamConstants;
@@ -36,12 +35,9 @@
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
-import org.apache.tuscany.core.deployer.RootDeploymentContext;
-import org.apache.tuscany.core.generator.DefaultGeneratorContext;
-import org.apache.tuscany.core.resolver.AutowireResolver;
-import org.apache.tuscany.host.deployment.AssemblyService;
-import org.apache.tuscany.host.deployment.DeploymentException;
-import org.apache.tuscany.host.deployment.UnsupportedContentTypeException;
+import org.osoa.sca.annotations.EagerInit;
+import org.osoa.sca.annotations.Reference;
+
import org.apache.tuscany.spi.component.ScopeContainer;
import org.apache.tuscany.spi.component.ScopeRegistry;
import org.apache.tuscany.spi.deployer.ChangeSetHandler;
@@ -67,10 +63,16 @@
import org.apache.tuscany.spi.model.Scope;
import org.apache.tuscany.spi.model.ServiceDefinition;
import org.apache.tuscany.spi.model.physical.PhysicalChangeSet;
+import org.apache.tuscany.spi.resolver.ResolutionException;
import org.apache.tuscany.spi.services.discovery.DiscoveryException;
import org.apache.tuscany.spi.services.discovery.DiscoveryService;
-import org.osoa.sca.annotations.EagerInit;
-import org.osoa.sca.annotations.Reference;
+
+import org.apache.tuscany.core.deployer.RootDeploymentContext;
+import org.apache.tuscany.core.generator.DefaultGeneratorContext;
+import org.apache.tuscany.core.resolver.AutowireResolver;
+import org.apache.tuscany.host.deployment.AssemblyService;
+import org.apache.tuscany.host.deployment.DeploymentException;
+import org.apache.tuscany.host.deployment.UnsupportedContentTypeException;
/**
* @version $Rev$ $Date$
@@ -86,7 +88,7 @@
private final ModelMarshallerRegistry marshallerRegistry;
private final DiscoveryService discoveryService;
private ComponentDefinition<CompositeImplementation> domain;
-
+ private final Map<String, ChangeSetHandler> registry = new HashMap<String, ChangeSetHandler>();
public AssemblyServiceImpl(@Reference LoaderRegistry loaderRegistry,
@Reference GeneratorRegistry generatorRegistry,
@@ -104,8 +106,6 @@
domain = createDomain();
}
- private final Map<String, ChangeSetHandler> registry = new HashMap<String, ChangeSetHandler>();
-
public void applyChanges(URL changeSet) throws DeploymentException, IOException {
if (changeSet == null) {
throw new IllegalArgumentException("changeSet is null");
@@ -151,7 +151,6 @@
}
public void include(InputStream stream) throws DeploymentException {
-
try {
XMLStreamReader reader = xmlFactory.createXMLStreamReader(stream);
while (reader.next() != XMLStreamConstants.START_ELEMENT) {
@@ -167,6 +166,11 @@
CompositeComponentType<?, ?, ?> type =
(CompositeComponentType<?, ?, ?>) loaderRegistry.load(null, reader, deploymentContext);
+ try {
+ autowireResolver.resolve(type);
+ } catch (ResolutionException e) {
+ throw new DeploymentException(e);
+ }
Map<URI, GeneratorContext> contexts = new HashMap<URI, GeneratorContext>();
// TODO create physical resource definitions
// create physical component definitions
@@ -207,7 +211,13 @@
String serviceName = uri.getFragment();
Implementation<?> targetImplementation = targetComponent.getImplementation();
ComponentType<?, ?, ?> targetType = targetImplementation.getComponentType();
- ServiceDefinition serviceDefinition = targetType.getServices().get(serviceName);
+ ServiceDefinition serviceDefinition = null;
+ if (serviceName == null) {
+ serviceDefinition = targetType.getServices().get(serviceName);
+ } else if (targetType.getServices().size() == 1) {
+ // default service
+ serviceDefinition = targetType.getServices().get(0);
+ }
assert serviceDefinition != null;
generatorRegistry.generateWire(child,
referenceDefinition,
@@ -216,14 +226,12 @@
} else {
throw new AssertionError();
}
-
-
}
}
} catch (GenerationException e) {
throw new DeploymentException(e);
}
-
+
marshallAndSend(id, context);
}
@@ -241,18 +249,19 @@
/*
* Marshalls and sends the PCS.
*/
- private void marshallAndSend(URI id, GeneratorContext context) throws XMLStreamException, MarshalException, DiscoveryException {
-
+ private void marshallAndSend(URI id, GeneratorContext context)
+ throws XMLStreamException, MarshalException, DiscoveryException {
+
ByteArrayOutputStream out = new ByteArrayOutputStream();
PhysicalChangeSet pcs = context.getPhysicalChangeSet();
XMLStreamWriter pcsWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(out);
marshallerRegistry.marshall(pcs, pcsWriter);
-
+
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
XMLStreamReader pcsReader = XMLInputFactory.newInstance().createXMLStreamReader(in);
discoveryService.sendMessage(id.toASCIIString(), pcsReader);
-
+
}
private void generate(ComponentDefinition<?> component, Map<URI, GeneratorContext> contexts)
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/physical/PhysicalInterceptorDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/physical/PhysicalInterceptorDefinition.java?view=diff&rev=520196&r1=520195&r2=520196
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/physical/PhysicalInterceptorDefinition.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/physical/PhysicalInterceptorDefinition.java Mon Mar 19 17:39:40 2007
@@ -23,15 +23,13 @@
import org.apache.tuscany.spi.model.ModelObject;
/**
- * Model class representing the portable definition of an interceptor. This class
- * is used to describe the interceptors around inbound and outbound wires on a
- * physical component definition.
- *
- * @version $Rev$ $Date$
+ * Model class representing the portable definition of an interceptor. This class is used to describe the interceptors
+ * around inbound and outbound wires on a physical component definition.
*
+ * @version $Rev$ $Date$
*/
public class PhysicalInterceptorDefinition extends ModelObject {
-
+
// The qualified name of the interceptor builder
private QName builder;
@@ -41,6 +39,7 @@
/**
* Gets the qualified name of the builder.
+ *
* @return Qualified name of the builder.
*/
public QName getBuilder() {
@@ -49,10 +48,12 @@
/**
* Sets the qualified name of the builder.
+ *
* @param builder Qualified name of the builder.
*/
public void setBuilder(QName builder) {
this.builder = builder;
}
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org