summaryrefslogtreecommitdiffstats
path: root/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl
diff options
context:
space:
mode:
Diffstat (limited to 'tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl')
-rw-r--r--tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java627
-rw-r--r--tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java479
-rw-r--r--tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CompositeContextImpl.java356
-rw-r--r--tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/RequestContextImpl.java121
-rw-r--r--tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java137
5 files changed, 0 insertions, 1720 deletions
diff --git a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java b/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java
deleted file mode 100644
index af42b4a76a..0000000000
--- a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
- * 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.sca.core.context.impl;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.UUID;
-
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.tuscany.sca.assembly.AssemblyFactory;
-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.CompositeService;
-import org.apache.tuscany.sca.assembly.Endpoint;
-import org.apache.tuscany.sca.assembly.EndpointReference;
-import org.apache.tuscany.sca.assembly.OptimizableBinding;
-import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.SCABinding;
-import org.apache.tuscany.sca.assembly.Service;
-import org.apache.tuscany.sca.assembly.builder.BindingBuilderExtension;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.core.FactoryExtensionPoint;
-import org.apache.tuscany.sca.core.assembly.CompositeActivator;
-import org.apache.tuscany.sca.core.assembly.RuntimeAssemblyFactory;
-import org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl;
-import org.apache.tuscany.sca.core.assembly.impl.ReferenceParametersImpl;
-import org.apache.tuscany.sca.core.context.CallableReferenceExt;
-import org.apache.tuscany.sca.core.context.ComponentContextExt;
-import org.apache.tuscany.sca.core.context.CompositeContext;
-import org.apache.tuscany.sca.core.conversation.ConversationExt;
-import org.apache.tuscany.sca.core.conversation.ConversationManager;
-import org.apache.tuscany.sca.core.conversation.ConversationState;
-import org.apache.tuscany.sca.core.factory.ObjectCreationException;
-import org.apache.tuscany.sca.core.invocation.ProxyFactory;
-import org.apache.tuscany.sca.interfacedef.Interface;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
-import org.apache.tuscany.sca.runtime.ReferenceParameters;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeWire;
-import org.oasisopen.sca.Conversation;
-import org.oasisopen.sca.ServiceRuntimeException;
-
-/**
- * Base class for implementations of service and callback references.
- *
- * @version $Rev$ $Date$
- * @param <B> the type of the business interface
- */
-public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
- static final long serialVersionUID = -521548304761848325L;
- protected transient CompositeActivator compositeActivator;
- protected transient ProxyFactory proxyFactory;
- protected transient Class<B> businessInterface;
- protected transient Object proxy;
-
- // if the wire targets a conversational service this holds the conversation state
- protected transient ConversationManager conversationManager;
- protected transient ConversationExt conversation;
- protected transient Object conversationID;
- protected Object callbackID; // The callbackID should be serializable
-
- protected transient RuntimeComponent component;
- protected transient RuntimeComponentReference reference;
- protected transient EndpointReference endpointReference;
-
- protected String scdl;
-
- private transient RuntimeComponentReference clonedRef;
- private transient ReferenceParameters refParams;
- private transient XMLStreamReader xmlReader;
-
- private FactoryExtensionPoint modelFactories;
- protected RuntimeAssemblyFactory assemblyFactory;
-
- /*
- * Public constructor for Externalizable serialization/deserialization
- */
- public CallableReferenceImpl() {
- super();
- }
-
- /*
- * Public constructor for use by XMLStreamReader2CallableReference
- */
- public CallableReferenceImpl(XMLStreamReader xmlReader) throws Exception {
- this.xmlReader = xmlReader;
- resolve();
- }
-
- protected CallableReferenceImpl(Class<B> businessInterface,
- RuntimeComponent component,
- RuntimeComponentReference reference,
- EndpointReference endpointReference,
- ProxyFactory proxyFactory,
- CompositeActivator compositeActivator) {
- this.proxyFactory = proxyFactory;
- this.businessInterface = businessInterface;
- this.component = component;
- this.reference = reference;
- this.endpointReference = endpointReference;
-
- ExtensionPointRegistry registry = compositeActivator.getCompositeContext().getExtensionPointRegistry();
- this.modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
- this.assemblyFactory = (RuntimeAssemblyFactory)modelFactories.getFactory(AssemblyFactory.class);
-
-
- // FIXME: The SCA Specification is not clear how we should handle multiplicity
- // for CallableReference
- if (this.endpointReference == null) {
-
- // TODO - EPR - If no endpoint reference specified assume the first one
- // This will happen when a self reference is created in which case the
- // the reference should only have on endpointReference so use that
- if (this.reference.getEndpointReferences().size() == 0){
- throw new ServiceRuntimeException("The reference " + reference.getName() + " in component " +
- component.getName() + " has no endpoint references");
- }
-
- if (this.reference.getEndpointReferences().size() > 1){
- throw new ServiceRuntimeException("The reference " + reference.getName() + " in component " +
- component.getName() + " has more than one endpoint reference");
- }
-
- this.endpointReference = this.reference.getEndpointReferences().get(0);
- }
-
- // FIXME: Should we normalize the componentName/serviceName URI into an absolute SCA URI in the SCA binding?
- // sca:component1/component11/component112/service1?
- this.compositeActivator = compositeActivator;
- this.conversationManager = this.compositeActivator.getCompositeContext().getConversationManager();
- initCallbackID();
- }
-
- public CallableReferenceImpl(Class<B> businessInterface, RuntimeWire wire, ProxyFactory proxyFactory) {
- this.proxyFactory = proxyFactory;
- this.businessInterface = businessInterface;
- bind(wire);
- }
-
- public RuntimeWire getRuntimeWire() {
- try {
- resolve();
- if (endpointReference != null){
- return reference.getRuntimeWire(endpointReference);
- } else {
- return null;
- }
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- protected void bind(RuntimeWire wire) {
- if (wire != null) {
- this.component = (RuntimeComponent)wire.getEndpointReference().getComponent();
- this.reference = (RuntimeComponentReference)wire.getEndpointReference().getReference();
- this.endpointReference = wire.getEndpointReference();
- this.compositeActivator = ((ComponentContextExt)component.getComponentContext()).getCompositeActivator();
- this.conversationManager = this.compositeActivator.getCompositeContext().getConversationManager();
- initCallbackID();
- }
- }
-
- protected void initCallbackID() {
- if (reference.getInterfaceContract() != null) {
- if (reference.getInterfaceContract().getCallbackInterface() != null) {
- this.callbackID = createCallbackID();
- }
- }
- }
-
- public B getProxy() throws ObjectCreationException {
- try {
- if (proxy == null) {
- proxy = createProxy();
- }
- return businessInterface.cast(proxy);
- } catch (Exception e) {
- throw new ObjectCreationException(e);
- }
- }
-
- public void setProxy(Object proxy) {
- this.proxy = proxy;
- }
-
- protected Object createProxy() throws Exception {
- return proxyFactory.createProxy(this);
- }
-
- public B getService() {
- try {
- resolve();
- return getProxy();
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public Class<B> getBusinessInterface() {
- try {
- resolve();
- return businessInterface;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public boolean isConversational() {
- try {
- resolve();
- return reference == null ? false : reference.getInterfaceContract().getInterface().isConversational();
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public Conversation getConversation() {
- try {
- // resolve from XML just in case this CallableReference is the result of
- // passing a CallableReference as a parameter
- resolve();
-
- if (conversation == null || conversation.getState() == ConversationState.ENDED) {
- conversation = null;
- }
- return conversation;
-
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public Object getCallbackID() {
- try {
- resolve();
- return callbackID;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
- */
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- final boolean hasSCDL = in.readBoolean();
- if (hasSCDL) {
- this.scdl = in.readUTF();
- } else {
- this.scdl = null;
- }
- }
-
- /**
- * @throws IOException
- */
- // TODO - EPR all needs sorting out for endpoint references
-
- private synchronized void resolve() throws Exception {
- if ((scdl != null || xmlReader != null) && component == null && reference == null) {
- CompositeContext componentContextHelper = CompositeContext.getCurrentCompositeContext();
- if (componentContextHelper != null) {
- this.compositeActivator = CompositeContext.getCurrentCompositeActivator();
- this.conversationManager = componentContextHelper.getConversationManager();
- Component c;
- if (xmlReader != null) {
- c = componentContextHelper.fromXML(xmlReader);
- xmlReader = null; // OK to GC this now
- } else {
- c = componentContextHelper.fromXML(scdl);
- scdl = null; // OK to GC this now
- }
- this.component = (RuntimeComponent)c;
- compositeActivator.configureComponentContext(this.component);
- this.reference = (RuntimeComponentReference)c.getReferences().get(0);
- this.reference.setComponent(this.component);
- clonedRef = reference;
- ReferenceParameters parameters = null;
- for (Object ext : reference.getExtensions()) {
- if (ext instanceof ReferenceParameters) {
- parameters = (ReferenceParameters)ext;
- break;
- }
- }
- if (parameters != null) {
- refParams = parameters;
- this.callbackID = parameters.getCallbackID();
- attachConversation(parameters.getConversationID());
- }
-
- // TODO - EPR all needs sorting out for endpoint references
- for (Binding binding : reference.getBindings()) {
- if (binding instanceof OptimizableBinding) {
- // Resolve the Component
- final String bindingURI = binding.getURI();
- final Component targetComponent = resolveComponentURI(bindingURI);
-
- // Find the Service
- ComponentService targetService = resolveServiceURI(bindingURI, targetComponent);
-
- // if the target service is a promoted service then find the
- // service it promotes
- if ((targetService != null) && (targetService.getService() instanceof CompositeService)) {
- CompositeService compositeService = (CompositeService)targetService.getService();
- // Find the promoted component service
- ComponentService promotedComponentService = getPromotedComponentService(compositeService);
- if (promotedComponentService != null && !promotedComponentService.isUnresolved()) {
- targetService = promotedComponentService;
- }
- }
-
- OptimizableBinding optimizableBinding = (OptimizableBinding)binding;
- optimizableBinding.setTargetComponent(targetComponent);
- optimizableBinding.setTargetComponentService(targetService);
- if (targetService != null) {
- for (Binding serviceBinding : targetService.getBindings()) {
- if (serviceBinding.getClass() == binding.getClass()) {
- optimizableBinding.setTargetBinding(serviceBinding);
- break;
- }
- }
- }
- }
- }
-/*
- // FIXME: The SCA Specification is not clear how we should handle multiplicity
- // for CallableReference
- if (binding == null) {
- binding = reference.getBinding(SCABinding.class);
- if (binding == null) {
- binding = reference.getBindings().get(0);
- }
- }
-*/
-
- Interface i = reference.getInterfaceContract().getInterface();
- if (i instanceof JavaInterface) {
- JavaInterface javaInterface = (JavaInterface)i;
- if (javaInterface.isUnresolved()) {
- // Allow privileged access to get ClassLoader. Requires RuntimePermission in
- // security policy.
- ClassLoader classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
- public ClassLoader run() {
- return Thread.currentThread().getContextClassLoader();
- }
- });
- javaInterface.setJavaClass(classLoader.loadClass(javaInterface.getName()));
- compositeActivator.getCompositeContext().getJavaInterfaceFactory()
- .createJavaInterface(javaInterface, javaInterface.getJavaClass());
- //FIXME: If the interface needs XSDs to be loaded (e.g., for static SDO),
- // this needs to be done here. We usually search for XSDs in the current
- // contribution at resolve time. Is it possible to locate the current
- // contribution at runtime?
- }
- this.businessInterface = (Class<B>)javaInterface.getJavaClass();
- }
-/*
- if (binding instanceof BindingBuilderExtension) {
- ((BindingBuilderExtension)binding).getBuilder().build(component, reference, binding, null);
- }
-*/
- this.proxyFactory = compositeActivator.getCompositeContext().getProxyFactory();
- }
- } else {
- this.compositeActivator = CompositeContext.getCurrentCompositeActivator();
- if (this.compositeActivator != null) {
- this.proxyFactory = this.compositeActivator.getCompositeContext().getProxyFactory();
- }
- }
- }
-
- /**
- * Follow a service promotion chain down to the inner most (non composite)
- * component service.
- *
- * @param topCompositeService
- * @return
- */
- private ComponentService getPromotedComponentService(CompositeService compositeService) {
- ComponentService componentService = compositeService.getPromotedService();
- if (componentService != null) {
- Service service = componentService.getService();
- if (componentService.getName() != null && service instanceof CompositeService) {
-
- // Continue to follow the service promotion chain
- return getPromotedComponentService((CompositeService)service);
-
- } else {
-
- // Found a non-composite service
- return componentService;
- }
- } else {
-
- // No promoted service
- return null;
- }
- }
-
- /**
- * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
- */
- public void writeExternal(ObjectOutput out) throws IOException {
- try {
- final String xml = toXMLString();
- if (xml == null) {
- out.writeBoolean(false);
- } else {
- out.writeBoolean(true);
- out.writeUTF(xml);
- }
- } catch (Exception e) {
- // e.printStackTrace();
- throw new IOException(e.toString());
- }
- }
-
- public String toXMLString() throws IOException {
- if (reference != null) {
- if (clonedRef == null) {
- try {
- clonedRef = (RuntimeComponentReference)reference.clone();
- } catch (CloneNotSupportedException e) {
- // will not happen
- }
- }
- if (refParams == null) {
- refParams = new ReferenceParametersImpl();
-
- // remove any existing reference parameters from the clone
- Object toRemove = null;
- for (Object extension : clonedRef.getExtensions()) {
- if (extension instanceof ReferenceParameters) {
- toRemove = extension;
- }
- }
-
- if (toRemove != null) {
- clonedRef.getExtensions().remove(toRemove);
- }
-
- // add the new reference parameter object
- clonedRef.getExtensions().add(refParams);
- }
- refParams.setCallbackID(callbackID);
- if (conversation != null) {
- refParams.setConversationID(conversation.getConversationID());
- }
- return ((CompositeActivatorImpl)compositeActivator).getCompositeContext().toXML(component, clonedRef);
- } else {
- return scdl;
- }
- }
-
- /**
- * Create a callback id
- *
- * @return the callback id
- */
- private String createCallbackID() {
- return UUID.randomUUID().toString();
- }
-
- public void attachCallbackID(Object callbackID) {
- this.callbackID = callbackID;
- }
-
- public void attachConversationID(Object conversationID) {
- this.conversationID = conversationID;
- }
-
- public void attachConversation(ConversationExt conversation) {
- this.conversation = conversation;
- }
-
- public void attachConversation(Object conversationID) {
- if (conversationID != null) {
- ConversationExt conversation = conversationManager.getConversation(conversationID);
- if (conversation == null) {
- conversation = conversationManager.startConversation(conversationID);
- }
- this.conversation = conversation;
- } else {
- this.conversation = null;
- }
- }
-
- protected ReferenceParameters getReferenceParameters() {
- ReferenceParameters parameters = new ReferenceParametersImpl();
- parameters.setCallbackID(callbackID);
- if (getConversation() != null) {
- parameters.setConversationID(conversation.getConversationID());
- }
- return parameters;
- }
-
- // TODO - EPR - needs sorting out for new endpoint references
- public EndpointReference getEndpointReference() {
- try {
- resolve();
-
- // Use the interface contract of the reference on the component type
- Reference componentTypeRef = reference.getReference();
- InterfaceContract sourceContract =
- componentTypeRef == null ? reference.getInterfaceContract() : componentTypeRef.getInterfaceContract();
- sourceContract = sourceContract.makeUnidirectional(false);
-
- EndpointReference epr = assemblyFactory.createEndpointReference();
- epr.setComponent(component);
- epr.setReference(reference);
- //epr.setBinding(binding);
- epr.setInterfaceContract(sourceContract);
-
- Endpoint endpoint = assemblyFactory.createEndpoint();
- epr.setTargetEndpoint(endpoint);
-
- return epr;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public XMLStreamReader getXMLReader() {
- return xmlReader;
- }
-
- /**
- * Resolves the specified URI to a Component using the compositeActivator.
- * There are two cases that we need to handle:
- * <ul>
- * <li>URI containing just Composite name(s) (i.e. no Service name specified)
- * <li>URI containing Composite name(s) and a Service Name
- * </ul>
- *
- * @param componentURI The URI of the Component to resolve
- * @return The Component for the specified URI or null if not founds
- */
- protected Component resolveComponentURI(String componentURI) {
- // If the URI has come from a binding, it may well start with a '/'. We will need
- // to remove this so we can match it to the composite names.
- if (componentURI.startsWith("/")) {
- componentURI = componentURI.substring(1);
- }
-
- // First assume that we are dealing with a Component URI without a Service Name
- Component component = compositeActivator.resolve(componentURI);
- if (component != null) {
- return component;
- }
-
- // Perhaps we have a ComponentURI that has a ServiceName on the end of it
- final int index = componentURI.lastIndexOf('/');
- if (index > -1) {
- componentURI = componentURI.substring(0, index);
- return compositeActivator.resolve(componentURI);
- }
-
- // We could not resolve the Component URI
- return null;
- }
-
- /**
- * Examines the Services on the specified Component and returns the Service that matches the
- * specified Binding URI.
- *
- * @param bindingURI The Binding URI to resolve on the Component
- * @param targetComponent The Component containing the Services
- * @return The Service with the specified serviceName or null if no such Service found.
- */
- protected ComponentService resolveServiceURI(String bindingURI, Component targetComponent) {
-
- ComponentService targetService = null;
-
- if (targetComponent != null) {
- if (bindingURI.startsWith("/")) {
- bindingURI = bindingURI.substring(1);
- }
-
- final String componentURI = targetComponent.getURI();
- final String serviceName;
- if (componentURI.equals(bindingURI)) {
- // No service specified
- serviceName = "";
- } else {
- // Get the Service name from the Binding URI
- serviceName = bindingURI.substring(componentURI.length() + 1);
- }
-
- if ("".equals(serviceName)) {
- targetService = CompositeContext.getSingleService(targetComponent);
- } else {
- for (ComponentService service : targetComponent.getServices()) {
- if (service.getName().equals(serviceName)) {
- targetService = service;
- break;
- }
- }
- }
- }
-
- return targetService;
- }
-}
diff --git a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java b/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
deleted file mode 100644
index 1b248f65c7..0000000000
--- a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * 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.sca.core.context.impl;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.Component;
-import org.apache.tuscany.sca.assembly.ComponentProperty;
-import org.apache.tuscany.sca.assembly.ComponentReference;
-import org.apache.tuscany.sca.assembly.ComponentService;
-import org.apache.tuscany.sca.assembly.Endpoint;
-import org.apache.tuscany.sca.assembly.EndpointReference;
-import org.apache.tuscany.sca.assembly.Multiplicity;
-import org.apache.tuscany.sca.assembly.OptimizableBinding;
-import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.Service;
-import org.apache.tuscany.sca.assembly.builder.EndpointReferenceBuilder;
-import org.apache.tuscany.sca.context.ContextFactoryExtensionPoint;
-import org.apache.tuscany.sca.context.PropertyValueFactory;
-import org.apache.tuscany.sca.context.RequestContextFactory;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.core.FactoryExtensionPoint;
-import org.apache.tuscany.sca.core.UtilityExtensionPoint;
-import org.apache.tuscany.sca.core.assembly.CompositeActivator;
-import org.apache.tuscany.sca.core.context.ComponentContextExt;
-import org.apache.tuscany.sca.core.context.CompositeContext;
-import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;
-import org.apache.tuscany.sca.interfacedef.Interface;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
-import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
-import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.MonitorFactory;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
-import org.oasisopen.sca.CallableReference;
-import org.oasisopen.sca.RequestContext;
-import org.oasisopen.sca.ServiceReference;
-import org.oasisopen.sca.ServiceRuntimeException;
-
-/**
- * Implementation of ComponentContext that delegates to a ComponentContextProvider.
- *
- * @version $Rev$ $Date$
- */
-public class ComponentContextImpl implements ComponentContextExt {
- private final RuntimeComponent component;
-
- private final CompositeActivator compositeActivator;
- private final RequestContextFactory requestContextFactory;
- private final ProxyFactory proxyFactory;
- private final AssemblyFactory assemblyFactory;
- private final JavaInterfaceFactory javaInterfaceFactory;
- private final PropertyValueFactory propertyFactory;
- private final EndpointReferenceBuilder endpointReferenceBuilder;
- private final Monitor monitor;
-
- public ComponentContextImpl(ExtensionPointRegistry registry, RuntimeComponent component) {
- this.component = component;
- FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class);
- this.assemblyFactory = factories.getFactory(AssemblyFactory.class);
- this.javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class);
- UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
- this.compositeActivator = utilities.getUtility(CompositeActivator.class);
- this.requestContextFactory =
- registry.getExtensionPoint(ContextFactoryExtensionPoint.class).getFactory(RequestContextFactory.class);
- this.proxyFactory = new ExtensibleProxyFactory(registry.getExtensionPoint(ProxyFactoryExtensionPoint.class));
- this.propertyFactory = factories.getFactory(PropertyValueFactory.class);
-
- this.endpointReferenceBuilder = utilities.getUtility(EndpointReferenceBuilder.class);
-
- MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
- this.monitor = monitorFactory.createMonitor();
- }
-
- public String getURI() {
- return component.getURI();
- }
-
- public <B, R extends CallableReference<B>> R cast(B target) throws IllegalArgumentException {
- return (R)proxyFactory.cast(target);
- }
-
- public <B> B getService(Class<B> businessInterface, String referenceName) {
- ServiceReference<B> serviceRef = getServiceReference(businessInterface, referenceName);
- return serviceRef.getService();
- }
-
- public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface, String referenceName) {
- try {
- for (ComponentReference ref : component.getReferences()) {
- if (referenceName.equals(ref.getName())) {
- /* ******************** Contribution for issue TUSCANY-2281 ******************** */
- Multiplicity multiplicity = ref.getMultiplicity();
- if (multiplicity == Multiplicity.ZERO_N || multiplicity == Multiplicity.ONE_N) {
- throw new IllegalArgumentException("Reference " + referenceName
- + " has multiplicity "
- + multiplicity);
- }
- /* ******************** Contribution for issue TUSCANY-2281 ******************** */
-
- return getServiceReference(businessInterface, (RuntimeComponentReference)ref, null);
- }
- }
- throw new ServiceRuntimeException("Reference not found: " + referenceName);
- } catch (ServiceRuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- }
- }
-
- /**
- * Gets the value for the specified property with the specified type.
- *
- * @param type The type of the property value we are getting
- * @param propertyName The name of the property we are getting
- * @param B The class of the property value we are getting
- *
- * @throws ServiceRuntimeException If a Property for the specified propertyName
- * is not found
- *
- * @see #setPropertyValueFactory(PropertyValueFactory)
- */
- public <B> B getProperty(Class<B> type, String propertyName) {
- for (ComponentProperty p : component.getProperties()) {
- if (propertyName.equals(p.getName())) {
- return propertyFactory.createPropertyValue(p, type);
- }
- }
- throw new ServiceRuntimeException("Property not found: " + propertyName);
- }
-
- public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface) {
- ComponentService service = CompositeContext.getSingleService(component);
- try {
- return createSelfReference(businessInterface, service);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- }
- }
-
- public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface, String serviceName) {
- try {
- for (ComponentService service : component.getServices()) {
- if (serviceName.equals(service.getName())) {
- return createSelfReference(businessInterface, service);
- }
- }
- throw new ServiceRuntimeException("Service not found: " + serviceName);
- } catch (ServiceRuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- }
- }
-
- /**
- * @param <B>
- * @param businessInterface
- * @param service
- * @return
- */
- public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface, ComponentService service) {
- try {
- RuntimeComponentReference ref =
- (RuntimeComponentReference)createSelfReference(component, service, businessInterface);
- ref.setComponent(component);
- return getServiceReference(businessInterface, ref, null);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public RequestContext getRequestContext() {
- if (requestContextFactory != null) {
- return requestContextFactory.createRequestContext(component);
- } else {
- return new RequestContextImpl(component);
- }
- }
-
- /**
- * @param businessInterface
- * @param reference
- * @return
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface,
- RuntimeComponentReference reference,
- EndpointReference endpointReference) {
- try {
- RuntimeComponentReference ref = (RuntimeComponentReference)reference;
- InterfaceContract interfaceContract = reference.getInterfaceContract();
- Reference componentTypeReference = reference.getReference();
- if (componentTypeReference != null && componentTypeReference.getInterfaceContract() != null) {
- interfaceContract = componentTypeReference.getInterfaceContract();
- }
- InterfaceContract refInterfaceContract = getInterfaceContract(interfaceContract, businessInterface);
- if (refInterfaceContract != interfaceContract) {
- ref = (RuntimeComponentReference)reference.clone();
- if (interfaceContract != null) {
- ref.setInterfaceContract(interfaceContract);
- } else {
- ref.setInterfaceContract(refInterfaceContract);
- }
- }
- ref.setComponent(component);
- return new ServiceReferenceImpl<B>(businessInterface, component, ref, endpointReference, proxyFactory,
- compositeActivator);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * Bind a component reference to a component service
- * @param <B>
- * @param businessInterface
- * @param reference
- * @param service
- * @return
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface,
- RuntimeComponentReference reference,
- RuntimeComponent component,
- RuntimeComponentService service) {
- try {
- RuntimeComponentReference ref = (RuntimeComponentReference)reference.clone();
- InterfaceContract interfaceContract = reference.getInterfaceContract();
- Reference componentTypeReference = reference.getReference();
- if (componentTypeReference != null && componentTypeReference.getInterfaceContract() != null) {
- interfaceContract = componentTypeReference.getInterfaceContract();
- }
- InterfaceContract refInterfaceContract = getInterfaceContract(interfaceContract, businessInterface);
- if (refInterfaceContract != interfaceContract) {
- ref = (RuntimeComponentReference)reference.clone();
- ref.setInterfaceContract(interfaceContract);
- }
- ref.getTargets().add(service);
- ref.getBindings().clear();
- for (Binding binding : service.getBindings()) {
- if (binding instanceof OptimizableBinding) {
- OptimizableBinding optimizableBinding = (OptimizableBinding)((OptimizableBinding)binding).clone();
- optimizableBinding.setTargetBinding(binding);
- optimizableBinding.setTargetComponent(component);
- optimizableBinding.setTargetComponentService(service);
- ref.getBindings().add(optimizableBinding);
- } else {
- ref.getBindings().add(binding);
- }
- }
- return new ServiceReferenceImpl<B>(businessInterface, component, ref, proxyFactory, compositeActivator);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- public <B> CallableReference<B> getCallableReference(Class<B> businessInterface,
- RuntimeComponent component,
- RuntimeComponentService service) {
- try {
- if (businessInterface == null) {
- InterfaceContract contract = service.getInterfaceContract();
- businessInterface = (Class<B>)((JavaInterface)contract.getInterface()).getJavaClass();
- }
- RuntimeComponentReference ref =
- (RuntimeComponentReference)createSelfReference(component, service, businessInterface);
- ref.setComponent(component);
- return new CallableReferenceImpl<B>(businessInterface, component, ref, null, proxyFactory,
- compositeActivator);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * Create a self-reference for a component service
- * @param component
- * @param service
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- private ComponentReference createSelfReference(Component component,
- ComponentService service,
- Class<?> businessInterface) throws CloneNotSupportedException,
- InvalidInterfaceException {
- ComponentReference componentReference = assemblyFactory.createComponentReference();
- componentReference.setName("$self$." + service.getName());
-
- for (Binding binding : service.getBindings()) {
- if (binding instanceof OptimizableBinding) {
- OptimizableBinding optimizableBinding = (OptimizableBinding)((OptimizableBinding)binding).clone();
- optimizableBinding.setTargetBinding(binding);
- optimizableBinding.setTargetComponent(component);
- optimizableBinding.setTargetComponentService(service);
- componentReference.getBindings().add(optimizableBinding);
- } else {
- componentReference.getBindings().add(binding);
- }
- }
-
- componentReference.setCallback(service.getCallback());
- componentReference.getTargets().add(service);
- componentReference.getPolicySets().addAll(service.getPolicySets());
- componentReference.getRequiredIntents().addAll(service.getRequiredIntents());
-
- InterfaceContract interfaceContract = service.getInterfaceContract();
- Service componentTypeService = service.getService();
- if (componentTypeService != null && componentTypeService.getInterfaceContract() != null) {
- interfaceContract = componentTypeService.getInterfaceContract();
- }
- interfaceContract = getInterfaceContract(interfaceContract, businessInterface);
- componentReference.setInterfaceContract(interfaceContract);
- componentReference.setMultiplicity(Multiplicity.ONE_ONE);
- // component.getReferences().add(componentReference);
-
- // create endpoint reference
- EndpointReference endpointReference = assemblyFactory
- .createEndpointReference();
- endpointReference.setComponent(component);
- endpointReference.setReference(componentReference);
- endpointReference.setUnresolved(false);
-
- // create endpoint.
- Endpoint endpoint = assemblyFactory.createEndpoint();
- endpoint.setComponent(component);
- endpoint.setService(service);
- endpoint.setUnresolved(true);
- endpointReference.setTargetEndpoint(endpoint);
-
- componentReference.getEndpointReferences().add(endpointReference);
-
- // do binding matching
- endpointReferenceBuilder.build(endpointReference, monitor);
-
- return componentReference;
- }
-
- /**
- * @param interfaceContract
- * @param businessInterface
- * @return
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- private InterfaceContract getInterfaceContract(InterfaceContract interfaceContract, Class<?> businessInterface)
- throws CloneNotSupportedException, InvalidInterfaceException {
- boolean compatible = false;
- if (interfaceContract != null && interfaceContract.getInterface() != null) {
- Interface interfaze = interfaceContract.getInterface();
- if (interfaze instanceof JavaInterface) {
- Class<?> cls = ((JavaInterface)interfaze).getJavaClass();
- if (businessInterface.isAssignableFrom(cls)) {
- compatible = true;
- }
- }
- }
-
- if (!compatible) {
- // The interface is not assignable from the interface contract
- interfaceContract = javaInterfaceFactory.createJavaInterfaceContract();
- JavaInterface callInterface = javaInterfaceFactory.createJavaInterface(businessInterface);
- interfaceContract.setInterface(callInterface);
- if (callInterface.getCallbackClass() != null) {
- interfaceContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface(callInterface
- .getCallbackClass()));
- }
- }
-
- return interfaceContract;
- }
-
- /**
- * @return the compositeActivator
- */
- public CompositeActivator getCompositeActivator() {
- return compositeActivator;
- }
-
- /**
- * @see org.apache.tuscany.sca.runtime.RuntimeComponentContext#start(org.apache.tuscany.sca.runtime.RuntimeComponentReference)
- */
- public void start(RuntimeComponentReference reference) {
- compositeActivator.start(component, reference);
- }
-
- /**
- * @see org.apache.tuscany.sca.runtime.RuntimeComponentContext#read(java.io.Reader)
- */
- public RuntimeComponent read(Reader reader) throws IOException {
- RuntimeComponent component = compositeActivator.getCompositeContext().read(reader);
- compositeActivator.configureComponentContext(component);
- return component;
- }
-
- /**
- * @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.getCompositeContext().write(component, reference, writer);
- }
-
- /* ******************** Contribution for issue TUSCANY-2281 ******************** */
-
- /**
- * @see ComponentContext#getServices(Class<B>, String)
- */
- public <B> Collection<B> getServices(Class<B> businessInterface, String referenceName) {
- ArrayList<B> services = new ArrayList<B>();
- Collection<ServiceReference<B>> serviceRefs = getServiceReferences(businessInterface, referenceName);
- for (ServiceReference<B> serviceRef : serviceRefs) {
- services.add(serviceRef.getService());
- }
- return services;
- }
-
- /**
- * @see ComponentContext#getServiceReferences(Class<B>, String)
- */
- public <B> Collection<ServiceReference<B>> getServiceReferences(Class<B> businessInterface, String referenceName) {
- try {
- for (ComponentReference ref : component.getReferences()) {
- if (referenceName.equals(ref.getName())) {
- ArrayList<ServiceReference<B>> serviceRefs = new ArrayList<ServiceReference<B>>();
- for (EndpointReference endpointReference : ref.getEndpointReferences()) {
- serviceRefs
- .add(getServiceReference(businessInterface, (RuntimeComponentReference)ref, endpointReference));
- }
- return serviceRefs;
- }
- }
- throw new ServiceRuntimeException("Reference not found: " + referenceName);
- } catch (ServiceRuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- }
- }
- /* ******************** Contribution for issue TUSCANY-2281 ******************** */
-
- public CompositeContext getCompositeContext() {
- return compositeActivator.getCompositeContext();
- }
-
- public ExtensionPointRegistry getExtensionPointRegistry() {
- return getCompositeContext().getExtensionPointRegistry();
- }
-
-}
diff --git a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CompositeContextImpl.java b/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CompositeContextImpl.java
deleted file mode 100644
index 2fe223c523..0000000000
--- a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CompositeContextImpl.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * 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.sca.core.context.impl;
-
-import java.io.IOException;
-import java.io.Reader;
-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;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.Component;
-import org.apache.tuscany.sca.assembly.ComponentReference;
-import org.apache.tuscany.sca.assembly.ComponentService;
-import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.assembly.Endpoint;
-import org.apache.tuscany.sca.assembly.EndpointReference;
-import org.apache.tuscany.sca.assembly.Multiplicity;
-import org.apache.tuscany.sca.assembly.OptimizableBinding;
-import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.Service;
-import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
-import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.core.FactoryExtensionPoint;
-import org.apache.tuscany.sca.core.UtilityExtensionPoint;
-import org.apache.tuscany.sca.core.assembly.CompositeActivator;
-import org.apache.tuscany.sca.core.context.CompositeContext;
-import org.apache.tuscany.sca.core.conversation.ConversationManager;
-import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;
-import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
-import org.apache.tuscany.sca.interfacedef.Interface;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
-import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
-import org.apache.tuscany.sca.invocation.Message;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
-import org.oasisopen.sca.ServiceRuntimeException;
-
-/**
- * @version $Rev$ $Date$
- */
-public class CompositeContextImpl extends CompositeContext {
- private final ExtensionPointRegistry extensionPointRegistry;
- private final UtilityExtensionPoint utilityExtensionPoint;
- private final AssemblyFactory assemblyFactory;
- private final JavaInterfaceFactory javaInterfaceFactory;
- private final StAXArtifactProcessorExtensionPoint staxProcessors;
- private final XMLInputFactory xmlInputFactory;
- private final XMLOutputFactory xmlOutputFactory;
- private final ProxyFactory proxyFactory;
-
- public CompositeContextImpl(ExtensionPointRegistry registry) {
- this.extensionPointRegistry = registry;
- this.utilityExtensionPoint = extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class);
- FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class);
- this.xmlInputFactory = factories.getFactory(XMLInputFactory.class);
- this.xmlOutputFactory = factories.getFactory(XMLOutputFactory.class);
- this.assemblyFactory = factories.getFactory(AssemblyFactory.class);
- this.javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class);
- this.staxProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
- ProxyFactoryExtensionPoint proxyFactories = extensionPointRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class);
- this.proxyFactory = new ExtensibleProxyFactory(proxyFactories);
- }
-
- /**
- * Create a self-reference for a component service
- * @param component
- * @param service
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- public ComponentReference createSelfReference(Component component,
- ComponentService service,
- Class<?> businessInterface) throws CloneNotSupportedException,
- InvalidInterfaceException {
- ComponentReference componentReference = assemblyFactory.createComponentReference();
- componentReference.setName("$self$." + service.getName());
- for (Binding binding : service.getBindings()) {
- if (binding instanceof OptimizableBinding) {
- OptimizableBinding optimizableBinding = (OptimizableBinding)((OptimizableBinding)binding).clone();
- optimizableBinding.setTargetBinding(binding);
- optimizableBinding.setTargetComponent(component);
- optimizableBinding.setTargetComponentService(service);
- componentReference.getBindings().add(optimizableBinding);
- } else {
- componentReference.getBindings().add(binding);
- }
- }
-
- componentReference.setCallback(service.getCallback());
- componentReference.getTargets().add(service);
- componentReference.getPolicySets().addAll(service.getPolicySets());
- componentReference.getRequiredIntents().addAll(service.getRequiredIntents());
-
- InterfaceContract interfaceContract = service.getInterfaceContract();
- Service componentTypeService = service.getService();
- if (componentTypeService != null && componentTypeService.getInterfaceContract() != null) {
- interfaceContract = componentTypeService.getInterfaceContract();
- }
- interfaceContract = getInterfaceContract(interfaceContract, businessInterface);
- componentReference.setInterfaceContract(interfaceContract);
- componentReference.setMultiplicity(Multiplicity.ONE_ONE);
- // component.getReferences().add(componentReference);
- return componentReference;
- }
-
- /**
- * @param interfaceContract
- * @param businessInterface
- * @return
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- private InterfaceContract getInterfaceContract(InterfaceContract interfaceContract, Class<?> businessInterface)
- throws CloneNotSupportedException, InvalidInterfaceException {
- Interface interfaze = interfaceContract.getInterface();
- boolean compatible = false;
- if (interfaze instanceof JavaInterface) {
- Class<?> cls = ((JavaInterface)interfaze).getJavaClass();
- if (businessInterface.isAssignableFrom(cls)) {
- compatible = true;
- }
- }
- if (!compatible) {
- // The interface is not assignable from the interface contract
- interfaceContract = (InterfaceContract)interfaceContract.clone();
- interfaceContract.setInterface(javaInterfaceFactory.createJavaInterface(businessInterface));
- }
-
- return interfaceContract;
- }
-
- /**
- * Bind a component reference to a component service
- * @param <B>
- * @param businessInterface
- * @param reference
- * @param service
- * @return
- * @throws CloneNotSupportedException
- * @throws InvalidInterfaceException
- */
- public RuntimeComponentReference bindComponentReference(Class<?> businessInterface,
- RuntimeComponentReference reference,
- RuntimeComponent component,
- RuntimeComponentService service)
- throws CloneNotSupportedException, InvalidInterfaceException {
- RuntimeComponentReference ref = (RuntimeComponentReference)reference.clone();
- InterfaceContract interfaceContract = reference.getInterfaceContract();
- Reference componentTypeReference = reference.getReference();
- if (componentTypeReference != null && componentTypeReference.getInterfaceContract() != null) {
- interfaceContract = componentTypeReference.getInterfaceContract();
- }
- InterfaceContract refInterfaceContract = getInterfaceContract(interfaceContract, businessInterface);
- if (refInterfaceContract != interfaceContract) {
- ref = (RuntimeComponentReference)reference.clone();
- ref.setInterfaceContract(interfaceContract);
- }
- ref.setComponent(component);
- ref.getTargets().add(service);
- ref.getBindings().clear();
- for (Binding binding : service.getBindings()) {
- if (binding instanceof OptimizableBinding) {
- OptimizableBinding optimizableBinding = (OptimizableBinding)((OptimizableBinding)binding).clone();
- optimizableBinding.setTargetBinding(binding);
- optimizableBinding.setTargetComponent(component);
- optimizableBinding.setTargetComponentService(service);
- ref.getBindings().add(optimizableBinding);
- } else {
- ref.getBindings().add(binding);
- }
- }
- return ref;
- }
-
- public void write(Component component, ComponentReference reference, Writer writer) throws IOException {
- write(component, reference, null, writer);
- }
-
- public void write(Component component, ComponentReference reference, ComponentService service, Writer writer) throws IOException {
- try {
- StAXArtifactProcessor<Composite> processor = staxProcessors.getProcessor(Composite.class);
- Composite composite = assemblyFactory.createComposite();
- composite.setName(new QName("http://tuscany.apache.org/xmlns/sca/1.1", "default"));
- Component comp = assemblyFactory.createComponent();
- comp.setName("default");
- comp.setURI(component.getURI());
- composite.getComponents().add(comp);
- if (reference != null) {
- comp.getReferences().add(reference);
- }
- if (service != null) {
- comp.getServices().add(service);
- }
-
- XMLStreamWriter streamWriter = xmlOutputFactory.createXMLStreamWriter(writer);
- processor.write(composite, streamWriter);
- } catch (Exception e) {
- throw new IOException(e.getMessage());
- }
- }
-
- public String toXML(Component component, ComponentReference reference) throws IOException {
- StringWriter writer = new StringWriter();
- write(component, reference, writer);
- return writer.toString();
- }
-
- public String toXML(Component component, ComponentService service) throws IOException {
- StringWriter writer = new StringWriter();
- write(component, null, service, writer);
- return writer.toString();
- }
-
- public RuntimeComponent read(Reader reader) throws IOException {
- try {
- XMLStreamReader streamReader = xmlInputFactory.createXMLStreamReader(reader);
- return read(streamReader);
- } catch (Exception e) {
- throw new IOException(e.getMessage());
- }
- }
-
- public RuntimeComponent read(XMLStreamReader streamReader) throws IOException {
- try {
- StAXArtifactProcessor<Composite> processor = staxProcessors.getProcessor(Composite.class);
- Composite composite = processor.read(streamReader);
- RuntimeComponent component = (RuntimeComponent)composite.getComponents().get(0);
- return component;
- } catch (Exception e) {
- throw new IOException(e.getMessage());
- }
- }
-
- public Component fromXML(String xml) throws IOException {
- return read(new StringReader(xml));
- }
-
- public Component fromXML(XMLStreamReader streamReader) throws IOException {
- return read(streamReader);
- }
-
- public static RuntimeComponent getCurrentComponent() {
- Message message = ThreadMessageContext.getMessageContext();
- if (message != null) {
- Endpoint to = message.getTo();
- if (to == null) {
- return null;
- }
- RuntimeComponent component = (RuntimeComponent) message.getTo().getComponent();
- return component;
- }
- return null;
- }
-
- public static CompositeActivator getCurrentCompositeActivator() {
- RuntimeComponent component = getCurrentComponent();
- if (component != null) {
- ComponentContextImpl context = (ComponentContextImpl)component.getComponentContext();
- return context.getCompositeActivator();
- }
- return null;
- }
-
- public static CompositeContext getCurrentCompositeContext() {
- CompositeActivator activator = getCurrentCompositeActivator();
- if (activator != null) {
- return activator.getCompositeContext();
- }
- 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() == 0) {
- throw new ServiceRuntimeException("No service is declared on component " + component.getURI());
- }
- if (regularServices.size() != 1) {
- throw new ServiceRuntimeException("More than one service is declared on component " + component.getURI()
- + ". Service name is required to get the service.");
- }
- targetService = regularServices.get(0);
- return targetService;
- }
-
- public ExtensionPointRegistry getExtensionPointRegistry() {
- return extensionPointRegistry;
- }
-
- public ConversationManager getConversationManager() {
- return utilityExtensionPoint.getUtility(ConversationManager.class);
- }
-
- /**
- * Get the java interface factory
- * @return
- */
- public JavaInterfaceFactory getJavaInterfaceFactory() {
- return javaInterfaceFactory;
- }
-
- /**
- * Get the proxy factory
- * @return
- */
- public ProxyFactory getProxyFactory() {
- return proxyFactory;
- }
-
-}
diff --git a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/RequestContextImpl.java b/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/RequestContextImpl.java
deleted file mode 100644
index 9daf430ad5..0000000000
--- a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/RequestContextImpl.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.sca.core.context.impl;
-
-import java.util.List;
-
-import javax.security.auth.Subject;
-
-import org.apache.tuscany.sca.assembly.Endpoint;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.core.context.CallableReferenceExt;
-import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactory;
-import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;
-import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
-import org.apache.tuscany.sca.core.invocation.impl.CallbackReferenceImpl;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
-import org.apache.tuscany.sca.invocation.Message;
-import org.apache.tuscany.sca.runtime.ReferenceParameters;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
-import org.apache.tuscany.sca.runtime.RuntimeWire;
-import org.oasisopen.sca.CallableReference;
-import org.oasisopen.sca.RequestContext;
-
-/**
- * @version $Rev$ $Date$
- */
-public class RequestContextImpl implements RequestContext {
-
- private ProxyFactoryExtensionPoint proxyFactoryExtensionPoint;
-
- public RequestContextImpl(RuntimeComponent component) {
- ExtensionPointRegistry registry = component.getComponentContext().getExtensionPointRegistry();
- proxyFactoryExtensionPoint = registry.getExtensionPoint(ProxyFactoryExtensionPoint.class);
- }
-
- public Subject getSecuritySubject() {
- Subject subject = null;
-
- for (Object header : ThreadMessageContext.getMessageContext().getHeaders()){
- if (header instanceof Subject){
- subject = (Subject)header;
- break;
- }
- }
- return subject;
- }
-
- public String getServiceName() {
- return ThreadMessageContext.getMessageContext().getTo().getService().getName();
- }
-
- public <B> CallableReference<B> getServiceReference() {
- Message msgContext = ThreadMessageContext.getMessageContext();
- // FIXME: [rfeng] Is this the service reference matching the caller side?
- Endpoint to = msgContext.getTo();
- RuntimeComponentService service = (RuntimeComponentService) to.getService();
- RuntimeComponent component = (RuntimeComponent) to.getComponent();
-
- CallableReference<B> callableReference = component.getComponentContext().getCallableReference(null, component, service);
-
- //TODO - EPR - not required for OASIS
- //ReferenceParameters parameters = msgContext.getFrom().getReferenceParameters();
- //((CallableReferenceExt<B>) callableReference).attachCallbackID(parameters.getCallbackID());
- //((CallableReferenceExt<B>) callableReference).attachConversation(parameters.getConversationID());
-
- return callableReference;
- }
-
- public <CB> CB getCallback() {
- CallableReference<CB> cb = getCallbackReference();
- if (cb == null) {
- return null;
- }
- return cb.getService();
- }
-
- @SuppressWarnings("unchecked")
- public <CB> CallableReference<CB> getCallbackReference() {
- Message msgContext = ThreadMessageContext.getMessageContext();
- Endpoint to = msgContext.getTo();
- RuntimeComponentService service = (RuntimeComponentService) to.getService();
- RuntimeComponentReference callbackReference = (RuntimeComponentReference)service.getCallbackReference();
- if (callbackReference == null) {
- return null;
- }
- JavaInterface javaInterface = (JavaInterface) callbackReference.getInterfaceContract().getInterface();
- Class<CB> javaClass = (Class<CB>)javaInterface.getJavaClass();
- List<RuntimeWire> wires = callbackReference.getRuntimeWires();
- ProxyFactory proxyFactory = new ExtensibleProxyFactory(proxyFactoryExtensionPoint);
- CallbackReferenceImpl ref = CallbackReferenceImpl.newInstance(javaClass, proxyFactory, wires);
- if (ref != null) {
- //ref.resolveTarget();
- // TODO - EPR - not required for OASIS
- //ReferenceParameters parameters = msgContext.getFrom().getReferenceParameters();
- //ref.attachCallbackID(parameters.getCallbackID());
- //if (ref.getConversation() != null) {
- // ref.attachConversationID(parameters.getConversationID());
- //}
- }
- return ref;
- }
-}
diff --git a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java b/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
deleted file mode 100644
index 086c32ee24..0000000000
--- a/tags/java/sca/2.0-M3-RC3a/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.sca.core.context.impl;
-
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.EndpointReference;
-import org.apache.tuscany.sca.core.assembly.CompositeActivator;
-import org.apache.tuscany.sca.core.context.CallableReferenceExt;
-import org.apache.tuscany.sca.core.context.ServiceReferenceExt;
-import org.apache.tuscany.sca.core.conversation.ConversationState;
-import org.apache.tuscany.sca.core.invocation.ProxyFactory;
-import org.apache.tuscany.sca.runtime.ReferenceParameters;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeWire;
-import org.oasisopen.sca.CallableReference;
-import org.oasisopen.sca.ServiceReference;
-
-/**
- * Default implementation of a ServiceReference.
- *
- * @version $Rev$ $Date$
- * @param <B> the type of the business interface
- */
-public class ServiceReferenceImpl<B> extends CallableReferenceImpl<B> implements ServiceReferenceExt<B> {
- private static final long serialVersionUID = 6763709434194361540L;
-
- protected transient Object callback;
-
- /*
- * Public constructor for Externalizable serialization/deserialization
- */
- public ServiceReferenceImpl() {
- super();
- }
-
- /*
- * Public constructor for use by XMLStreamReader2CallableReference
- */
- public ServiceReferenceImpl(XMLStreamReader xmlReader) throws Exception {
- super(xmlReader);
- }
-
- /**
- * @param businessInterface
- * @param wire
- * @param proxyFactory
- */
- public ServiceReferenceImpl(Class<B> businessInterface, RuntimeWire wire, ProxyFactory proxyFactory) {
- super(businessInterface, wire, proxyFactory);
- }
-
- public ServiceReferenceImpl(Class<B> businessInterface,
- RuntimeComponent component,
- RuntimeComponentReference reference,
- ProxyFactory proxyFactory,
- CompositeActivator compositeActivator) {
- super(businessInterface, component, reference, null, proxyFactory, compositeActivator);
- }
-
- public ServiceReferenceImpl(Class<B> businessInterface,
- RuntimeComponent component,
- RuntimeComponentReference reference,
- EndpointReference endpointReference,
- ProxyFactory proxyFactory,
- CompositeActivator compositeActivator) {
- super(businessInterface, component, reference, endpointReference, proxyFactory, compositeActivator);
- }
-
- public Object getConversationID() {
- return conversationID;
- }
-
- public void setConversationID(Object conversationID) throws IllegalStateException {
- if (conversation == null || conversation.getState() != ConversationState.ENDED) {
- this.conversationID = conversationID;
- this.conversation = null;
- } else {
- throw new IllegalStateException("Trying to set the conversationId on a service reference but the state of the conversation "
- + conversation.getConversationID()
- + " is "
- + conversation.getState());
- }
- }
-
- public void setCallbackID(Object callbackID) {
- this.callbackID = callbackID;
- }
-
- public Object getCallback() {
- return callback;
- }
-
- public void setCallback(Object callback) {
- if (callback != null && !(callback instanceof CallableReference)) {
- //FIXME: need to check if callback object supports the callback interface
- // returned by reference.getInterfaceContract().getCallbackInterface()
- }
- this.callback = callback;
- }
-
-/* TODO - EPR - not required in OASIS
- @Override
- protected ReferenceParameters getReferenceParameters() {
- ReferenceParameters parameters = super.getReferenceParameters();
- if (callback != null) {
- if (callback instanceof ServiceReference) {
- EndpointReference callbackRef = ((CallableReferenceExt)callback).getEndpointReference();
- parameters.setCallbackReference(callbackRef);
- } else {
- EndpointReference callbackRef = getRuntimeWire().getSource().getCallbackEndpoint();
- parameters.setCallbackReference(callbackRef);
- parameters.setCallbackObjectID(callback);
- }
- }
- return parameters;
- }
-*/
-}