Author: rfeng
Date: Wed Aug 22 14:51:29 2007
New Revision: 568755
URL: http://svn.apache.org/viewvc?rev=568755&view=rev
Log:
Get CallableReference working over serialization/deserialization
Added:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextHelper.java
- copied, changed from r568686,
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ReferenceHelper.java
Removed:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ReferenceHelper.java
Modified:
incubator/tuscany/java/sca/itest/callablereferences/src/main/java/org/apache/tuscany/sca/itest/callableref/DComponentImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivator.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java
Modified:
incubator/tuscany/java/sca/itest/callablereferences/src/main/java/org/apache/tuscany/sca/itest/callableref/DComponentImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callablereferences/src/main/java/org/apache/tuscany/sca/itest/callableref/DComponentImpl.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callablereferences/src/main/java/org/apache/tuscany/sca/itest/callableref/DComponentImpl.java
(original)
+++
incubator/tuscany/java/sca/itest/callablereferences/src/main/java/org/apache/tuscany/sca/itest/callableref/DComponentImpl.java
Wed Aug 22 14:51:29 2007
@@ -18,6 +18,11 @@
*/
package org.apache.tuscany.sca.itest.callableref;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
import org.osoa.sca.CallableReference;
import org.osoa.sca.RequestContext;
import org.osoa.sca.annotations.Context;
@@ -30,7 +35,6 @@
protected RequestContext requestContext;
public String foo(CallableReference<AComponent> aReference) {
- /*
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
@@ -41,7 +45,6 @@
} catch (Exception e) {
e.printStackTrace();
}
- */
System.out.println("Invoking service: " +
requestContext.getServiceName());
return "D" + aReference.getService().foo();
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
Wed Aug 22 14:51:29 2007
@@ -22,11 +22,14 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.net.URI;
import java.util.StringTokenizer;
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.assembly.WireableBinding;
import org.apache.tuscany.sca.core.invocation.ProxyFactory;
import org.apache.tuscany.sca.core.invocation.WireObjectFactory;
import org.apache.tuscany.sca.core.runtime.CompositeActivator;
@@ -171,22 +174,58 @@
/**
* @throws IOException
*/
- private synchronized void resolve() throws IOException,
ClassNotFoundException {
+ private synchronized void resolve() throws Exception {
if (scdl != null && reference == null) {
- ReferenceHelper referenceHelper =
ReferenceHelper.getCurrentReferenceHelper();
- if (referenceHelper != null) {
- CompositeActivator currentActivator =
ReferenceHelper.getCurrentCompositeActivator();
+ ComponentContextHelper componentContextHelper =
ComponentContextHelper.getCurrentComponentContextHelper();
+ if (componentContextHelper != null) {
+ CompositeActivator currentActivator =
ComponentContextHelper.getCurrentCompositeActivator();
this.compositeActivator = currentActivator;
- Component c = referenceHelper.fromXML(scdl);
+ Component c = componentContextHelper.fromXML(scdl);
this.component = (RuntimeComponent)c;
currentActivator.configureComponentContext(this.component);
this.reference =
(RuntimeComponentReference)c.getReferences().get(0);
this.reference.setComponent(this.component);
+ URI uri = URI.create("/" + componentURI);
+ for (Binding binding : reference.getBindings()) {
+ if (binding instanceof WireableBinding) {
+ String targetURI =
uri.resolve(binding.getURI()).toString();
+ int index = targetURI.lastIndexOf('/');
+ String serviceName = targetURI.substring(index+1);
+ targetURI = targetURI.substring(1, index);
+ Component targetComponet =
compositeActivator.resolve(targetURI);
+ ComponentService targetService = null;
+ if (targetComponet != null) {
+ if ("".equals(serviceName)) {
+ targetService =
ComponentContextHelper.getSingleService(targetComponet);
+ } else {
+ for (ComponentService service :
targetComponet.getServices()) {
+ if (service.getName().equals(serviceName))
{
+ targetService = service;
+ break;
+ }
+ }
+ }
+ }
+ WireableBinding wireableBinding =
(WireableBinding)binding;
+ wireableBinding.setTargetComponent(targetComponet);
+
wireableBinding.setTargetComponentService(targetService);
+ if (targetService != null) {
+ for (Binding serviceBinding :
targetService.getBindings()) {
+ if (serviceBinding.getClass() ==
binding.getClass()) {
+
wireableBinding.setTargetBinding(serviceBinding);
+ break;
+ }
+ }
+ }
+ }
+ }
Interface i = reference.getInterfaceContract().getInterface();
if (i instanceof JavaInterface) {
JavaInterface javaInterface = (JavaInterface)i;
- if(javaInterface.isUnresolved()) {
-
javaInterface.setJavaClass(Thread.currentThread().getContextClassLoader().loadClass(javaInterface.getName()));
+ if (javaInterface.isUnresolved()) {
+
javaInterface.setJavaClass(Thread.currentThread().getContextClassLoader()
+ .loadClass(javaInterface.getName()));
+
currentActivator.getJavaInterfaceFactory().createJavaInterface(javaInterface,
javaInterface.getJavaClass());
}
this.businessInterface =
(Class<B>)javaInterface.getJavaClass();
}
@@ -196,12 +235,13 @@
}
}
+
/**
* @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
*/
public void writeExternal(ObjectOutput out) throws IOException {
try {
- String scdl =
((CompositeActivatorImpl)compositeActivator).getReferenceHelper().toXML(component,
reference);
+ String scdl =
((CompositeActivatorImpl)compositeActivator).getComponentContextHelper().toXML(component,
reference);
out.writeUTF(scdl);
StringBuffer uri = new StringBuffer(componentURI);
boolean first = true;
Copied:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextHelper.java
(from r568686,
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ReferenceHelper.java)
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextHelper.java?p2=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextHelper.java&p1=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ReferenceHelper.java&r1=568686&r2=568755&rev=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ReferenceHelper.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextHelper.java
Wed Aug 22 14:51:29 2007
@@ -24,6 +24,8 @@
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
@@ -55,11 +57,12 @@
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.osoa.sca.ServiceRuntimeException;
/**
* @version $Rev$ $Date$
*/
-public class ReferenceHelper {
+public class ComponentContextHelper {
private final AssemblyFactory assemblyFactory;
private final JavaInterfaceFactory javaInterfaceFactory;
@@ -69,7 +72,7 @@
* @param assemblyFactory The factory to create assembly models
* @param processors The extension point for stax artifact processors
*/
- public ReferenceHelper(AssemblyFactory assemblyFactory,
+ public ComponentContextHelper(AssemblyFactory assemblyFactory,
JavaInterfaceFactory javaInterfaceFactory,
StAXArtifactProcessorExtensionPoint processors) {
this.assemblyFactory = assemblyFactory;
@@ -249,12 +252,35 @@
return null;
}
- public static ReferenceHelper getCurrentReferenceHelper() {
+ public static ComponentContextHelper getCurrentComponentContextHelper() {
CompositeActivator activator = getCurrentCompositeActivator();
if (activator != null) {
- return activator.getReferenceHelper();
+ return activator.getComponentContextHelper();
}
return null;
+ }
+
+ /**
+ * @param component
+ */
+ public static ComponentService getSingleService(Component component) {
+ ComponentService targetService;
+ List<ComponentService> services = component.getServices();
+ List<ComponentService> regularServices = new
ArrayList<ComponentService>();
+ for (ComponentService service : services) {
+ if (service.isCallback()) {
+ continue;
+ }
+ String name = service.getName();
+ if (!name.startsWith("$") || name.startsWith("$dynamic$")) {
+ regularServices.add(service);
+ }
+ }
+ if (regularServices.size() != 1) {
+ throw new ServiceRuntimeException("The component doesn't have
exactly one service");
+ }
+ targetService = regularServices.get(0);
+ return targetService;
}
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
Wed Aug 22 14:51:29 2007
@@ -21,8 +21,6 @@
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Binding;
@@ -120,23 +118,10 @@
}
public <B> ServiceReference<B> createSelfReference(Class<B>
businessInterface) {
- List<ComponentService> services = component.getServices();
- List<ComponentService> regularServices = new
ArrayList<ComponentService>();
- for (ComponentService service : services) {
- if (service.isCallback()) {
- continue;
- }
- String name = service.getName();
- if (!name.startsWith("$") || name.startsWith("$dynamic$")) {
- regularServices.add(service);
- }
- }
- if (regularServices.size() != 1) {
- throw new ServiceRuntimeException("The component doesn't have
exactly one service");
- }
+ ComponentService service =
ComponentContextHelper.getSingleService(component);
try {
RuntimeComponentReference ref =
- (RuntimeComponentReference)createSelfReference(component,
regularServices.get(0), businessInterface);
+ (RuntimeComponentReference)createSelfReference(component,
service, businessInterface);
ref.setComponent(component);
return getServiceReference(businessInterface, ref);
@@ -326,7 +311,7 @@
* @see
org.apache.tuscany.sca.runtime.RuntimeComponentContext#read(java.io.Reader)
*/
public RuntimeComponent read(Reader reader) throws IOException {
- RuntimeComponent component =
compositeActivator.getReferenceHelper().read(reader);
+ RuntimeComponent component =
compositeActivator.getComponentContextHelper().read(reader);
compositeActivator.configureComponentContext(component);
return component;
}
@@ -335,6 +320,6 @@
* @see
org.apache.tuscany.sca.runtime.RuntimeComponentContext#write(org.apache.tuscany.sca.runtime.RuntimeComponentReference,
java.io.Writer)
*/
public void write(RuntimeComponentReference reference, Writer writer)
throws IOException {
- compositeActivator.getReferenceHelper().write(component, reference,
writer);
+ compositeActivator.getComponentContextHelper().write(component,
reference, writer);
}
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivator.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivator.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivator.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivator.java
Wed Aug 22 14:51:29 2007
@@ -21,8 +21,9 @@
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.core.component.ReferenceHelper;
+import org.apache.tuscany.sca.core.component.ComponentContextHelper;
import org.apache.tuscany.sca.core.invocation.ProxyFactory;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
@@ -33,19 +34,19 @@
* @version $Rev$ $Date$
*/
public interface CompositeActivator {
-
/**
* Activate a composite
* @param composite
*/
void activate(Composite composite) throws ActivationException;
+
/**
* Activate a component reference
* @param component
* @param ref
*/
void activate(RuntimeComponent component, RuntimeComponentReference ref);
-
+
/**
* Activate a component reference
* @param component
@@ -59,14 +60,14 @@
* @param ref
*/
void deactivate(RuntimeComponent component, RuntimeComponentReference ref);
-
+
/**
* De-activate a component reference
* @param component
* @param ref
*/
void deactivate(RuntimeComponent component, RuntimeComponentService
service);
-
+
/**
* Stop a composite
* @param composite
@@ -96,9 +97,48 @@
* @param composite
*/
void stop(Composite composite) throws ActivationException;
-
- ReferenceHelper getReferenceHelper();
+
+ /**
+ * Get the component context helper
+ * @return
+ */
+ ComponentContextHelper getComponentContextHelper();
+
+ /**
+ * Get the proxy factory
+ * @return
+ */
ProxyFactory getProxyFactory();
+
+ /**
+ * Get the java interface factory
+ * @return
+ */
+ JavaInterfaceFactory getJavaInterfaceFactory();
+
+ /**
+ * Configure the runtime component with component context
+ * @param component
+ */
void configureComponentContext(RuntimeComponent component);
+
+ /**
+ * Resolve a component by URI in the domain
+ * @param componentURI
+ * @return
+ */
+ Component resolve(String componentURI);
+
+ /**
+ * Set the domain composite
+ * @param domainComposite
+ */
+ void setDomainComposite(Composite domainComposite);
+
+ /**
+ * Get the domain composite
+ * @return
+ */
+ Composite getDomainComposite();
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
Wed Aug 22 14:51:29 2007
@@ -34,7 +34,7 @@
import org.apache.tuscany.sca.context.RequestContextFactory;
import
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.core.component.ComponentContextImpl;
-import org.apache.tuscany.sca.core.component.ReferenceHelper;
+import org.apache.tuscany.sca.core.component.ComponentContextHelper;
import org.apache.tuscany.sca.core.invocation.ProxyFactory;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
@@ -74,7 +74,9 @@
private final ProxyFactory proxyFactory;
private final JavaInterfaceFactory javaInterfaceFactory;
- private final ReferenceHelper referenceHelper;
+ private final ComponentContextHelper componentContextHelper;
+
+ private Composite domainComposite;
/**
* @param assemblyFactory
@@ -103,7 +105,7 @@
this.javaInterfaceFactory = javaInterfaceFactory;
this.requestContextFactory = requestContextFactory;
this.proxyFactory = proxyFactory;
- this.referenceHelper = new ReferenceHelper(assemblyFactory,
javaInterfaceFactory, processors);
+ this.componentContextHelper = new
ComponentContextHelper(assemblyFactory, javaInterfaceFactory, processors);
}
/**
@@ -374,8 +376,8 @@
}
private void removeReferenceBindingProvider(RuntimeComponent component,
- RuntimeComponentReference
reference,
- Binding binding) {
+ RuntimeComponentReference
reference,
+ Binding binding) {
reference.setBindingProvider(binding, null);
}
@@ -664,8 +666,8 @@
/**
* @return the referenceHelper
*/
- public ReferenceHelper getReferenceHelper() {
- return referenceHelper;
+ public ComponentContextHelper getComponentContextHelper() {
+ return componentContextHelper;
}
/**
@@ -673,6 +675,55 @@
*/
public ProxyFactory getProxyFactory() {
return proxyFactory;
+ }
+
+ /**
+ * @return the domainComposite
+ */
+ public Composite getDomainComposite() {
+ return domainComposite;
+ }
+
+ /**
+ * @param domainComposite the domainComposite to set
+ */
+ public void setDomainComposite(Composite domainComposite) {
+ this.domainComposite = domainComposite;
+ }
+
+ public Component resolve(String componentURI) {
+ for (Composite composite : domainComposite.getIncludes()) {
+ Component component = resolve(composite, componentURI);
+ if (component != null) {
+ return component;
+ }
+ }
+ return null;
+ }
+
+ public Component resolve(Composite composite, String componentURI) {
+ String prefix = componentURI + "/";
+ for (Component component : composite.getComponents()) {
+ String uri = component.getURI();
+ if (uri.equals(componentURI)) {
+ return component;
+ }
+ if (componentURI.startsWith(prefix)) {
+ Implementation implementation = component.getImplementation();
+ if (!(implementation instanceof Composite)) {
+ return null;
+ }
+ return resolve((Composite)implementation, componentURI);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return the javaInterfaceFactory
+ */
+ public JavaInterfaceFactory getJavaInterfaceFactory() {
+ return javaInterfaceFactory;
}
}
Modified:
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
(original)
+++
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/DefaultSCADomain.java
Wed Aug 22 14:51:29 2007
@@ -153,6 +153,7 @@
// Build the SCA composites
CompositeBuilder compositeBuilder = runtime.getCompositeBuilder();
+
for (Composite composite: domainComposite.getIncludes()) {
try {
compositeBuilder.build(composite);
@@ -163,6 +164,7 @@
// Activate and start composites
CompositeActivator compositeActivator =
runtime.getCompositeActivator();
+ compositeActivator.setDomainComposite(domainComposite);
for (Composite composite: domainComposite.getIncludes()) {
try {
compositeActivator.activate(composite);
Modified:
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java?rev=568755&r1=568754&r2=568755&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java
(original)
+++
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java
Wed Aug 22 14:51:29 2007
@@ -75,6 +75,8 @@
domainComposite = assemblyFactory.createComposite();
domainComposite.setName(new QName(Constants.SCA_NS, "domain"));
domainComposite.setURI(uri);
+
+ getCompositeActivator().setDomainComposite(domainComposite);
}
public void stop() throws ActivationException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]