TUSCANY-3082 TUSCANY-3090 - Remove references to the old EndpointReference and replace with EndpointReference2 and Endpoint2 as appropriate. You'll see that some of the changes have left more commented out code as the old EndpointReference has code to support callback/conversation function not required by OASIS. I've also disabled some itests for this reason. Note that callbacks over web services won't work yet as work on EndpointReference2 is still ongoing.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@783664 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0a3afafcf3
commit
0300e06525
34 changed files with 335 additions and 477 deletions
|
@ -52,15 +52,19 @@
|
|||
<module>callback-api</module>
|
||||
<module>callback-basic</module>
|
||||
<module>callback-complex-type</module>
|
||||
<module>callback-id</module>
|
||||
<module>callback-multiple-wires</module>
|
||||
<module>callback-separatethread</module>
|
||||
|
||||
<!-- not supported in OASIS
|
||||
<module>callback-id</module>
|
||||
<module>callback-set-callback</module>
|
||||
<module>callback-set-conversation</module>
|
||||
<module>conversations</module>
|
||||
-->
|
||||
<module>component-type</module>
|
||||
<module>contribution-folder</module>
|
||||
<module>contribution-zip</module>
|
||||
<module>conversations</module>
|
||||
|
||||
<!--module>definitions-multiple</module-->
|
||||
<module>distribution</module>
|
||||
<module>exceptions</module>
|
||||
|
|
|
@ -23,6 +23,8 @@ import java.net.URI;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.DistributedSCABinding;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.assembly.OptimizableBinding;
|
||||
import org.apache.tuscany.sca.assembly.SCABinding;
|
||||
import org.apache.tuscany.sca.assembly.SCABindingFactory;
|
||||
|
@ -35,7 +37,6 @@ import org.apache.tuscany.sca.invocation.Invoker;
|
|||
import org.apache.tuscany.sca.provider.BindingProviderFactory;
|
||||
import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
|
||||
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -185,13 +186,13 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi
|
|||
}
|
||||
|
||||
private Invoker getInvoker(RuntimeWire wire, Operation operation) {
|
||||
EndpointReference target = wire.getTarget();
|
||||
Endpoint2 target = wire.getEndpoint();
|
||||
if (target != null) {
|
||||
RuntimeComponentService service = (RuntimeComponentService)target.getContract();
|
||||
RuntimeComponentService service = (RuntimeComponentService)target.getService();
|
||||
if (service != null) { // not a callback wire
|
||||
SCABinding scaBinding = service.getBinding(SCABinding.class);
|
||||
InvocationChain chain =
|
||||
service.getInvocationChain(scaBinding, wire.getSource().getInterfaceContract(), operation);
|
||||
service.getInvocationChain(scaBinding, wire.getEndpointReference().getInterfaceContract(), operation);
|
||||
return chain == null ? null : new SCABindingInvoker(chain);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ import org.apache.axis2.client.OperationClient;
|
|||
import org.apache.axis2.client.Options;
|
||||
import org.apache.axis2.context.MessageContext;
|
||||
import org.apache.axis2.transport.http.HTTPConstants;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
|
||||
import org.apache.tuscany.sca.binding.ws.axis2.policy.authentication.token.Axis2TokenAuthenticationPolicy;
|
||||
import org.apache.tuscany.sca.binding.ws.axis2.policy.configurator.Axis2BindingBasicAuthenticationConfigurator;
|
||||
|
@ -218,8 +219,9 @@ public class Axis2BindingInvoker implements Invoker, DataExchangeSemantics {
|
|||
final OperationClient operationClient = serviceClient.getServiceClient().createClient(wsdlOperationName);
|
||||
operationClient.setOptions(options);
|
||||
|
||||
ReferenceParameters parameters = msg.getFrom().getReferenceParameters();
|
||||
Endpoint2 callbackEndpoint = msg.getFrom().getCallbackEndpoint();
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
// set callback endpoint and callback ID for WS-Addressing header
|
||||
EndpointReference fromEPR = null;
|
||||
org.apache.tuscany.sca.runtime.EndpointReference callbackEPR = parameters.getCallbackReference();
|
||||
|
@ -244,10 +246,12 @@ public class Axis2BindingInvoker implements Invoker, DataExchangeSemantics {
|
|||
//FIXME: serialize conversation ID to XML in case it is not a string
|
||||
fromEPR.addReferenceParameter(CONVERSATION_ID_REFPARM_QN, conversationId.toString());
|
||||
}
|
||||
*/
|
||||
|
||||
// add WS-Addressing header
|
||||
//FIXME: is there any way to use the Axis2 addressing support for this?
|
||||
if (fromEPR != null) {
|
||||
if (callbackEndpoint != null) {
|
||||
EndpointReference fromEPR = new EndpointReference(callbackEndpoint.getBinding().getURI());
|
||||
SOAPEnvelope sev = requestMC.getEnvelope();
|
||||
SOAPHeader sh = sev.getHeader();
|
||||
OMElement epr =
|
||||
|
@ -267,9 +271,9 @@ public class Axis2BindingInvoker implements Invoker, DataExchangeSemantics {
|
|||
// if target endpoint was not specified when this invoker was created,
|
||||
// use dynamically specified target endpoint passed in on this call
|
||||
if (options.getTo() == null) {
|
||||
org.apache.tuscany.sca.runtime.EndpointReference ep = msg.getTo();
|
||||
Endpoint2 ep = msg.getTo();
|
||||
if (ep != null) {
|
||||
requestMC.setTo(new EndpointReference(ep.getURI()));
|
||||
requestMC.setTo(new EndpointReference(ep.getBinding().getURI()));
|
||||
} else {
|
||||
throw new RuntimeException("Unable to determine destination endpoint");
|
||||
}
|
||||
|
|
|
@ -80,6 +80,8 @@ import org.apache.axis2.transport.jms.JMSUtils;
|
|||
import org.apache.tuscany.sca.assembly.AbstractContract;
|
||||
import org.apache.tuscany.sca.assembly.AssemblyFactory;
|
||||
import org.apache.tuscany.sca.assembly.Binding;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
|
||||
import org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceClient.URIResolverImpl;
|
||||
import org.apache.tuscany.sca.binding.ws.axis2.policy.authentication.token.Axis2TokenAuthenticationPolicy;
|
||||
|
@ -100,7 +102,6 @@ import org.apache.tuscany.sca.invocation.MessageFactory;
|
|||
import org.apache.tuscany.sca.policy.PolicySet;
|
||||
import org.apache.tuscany.sca.policy.PolicySubject;
|
||||
import org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationPolicy;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -130,6 +131,8 @@ public class Axis2ServiceProvider {
|
|||
private WebServiceBinding wsBinding;
|
||||
private ServletHost servletHost;
|
||||
private MessageFactory messageFactory;
|
||||
private FactoryExtensionPoint modelFactories;
|
||||
private RuntimeAssemblyFactory assemblyFactory;
|
||||
private ConfigurationContext configContext;
|
||||
private JMSSender jmsSender;
|
||||
private JMSListener jmsListener;
|
||||
|
@ -236,6 +239,8 @@ public class Axis2ServiceProvider {
|
|||
this.wsBinding = wsBinding;
|
||||
this.servletHost = servletHost;
|
||||
this.messageFactory = messageFactory;
|
||||
this.modelFactories = modelFactories;
|
||||
this.assemblyFactory = (RuntimeAssemblyFactory)modelFactories.getFactory(AssemblyFactory.class);
|
||||
|
||||
final boolean isRampartRequired = AxisPolicyHelper.isRampartRequired(wsBinding);
|
||||
try {
|
||||
|
@ -330,13 +335,15 @@ public class Axis2ServiceProvider {
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME: [rfeng] Need to have a better way
|
||||
private EndpointReference createEndpointReference(String uri) {
|
||||
// TODO - EPR - what to do with URI
|
||||
/*
|
||||
private EndpointReference2 createEndpointReference() {
|
||||
FactoryExtensionPoint factories =
|
||||
component.getComponentContext().getExtensionPointRegistry().getExtensionPoint(FactoryExtensionPoint.class);
|
||||
RuntimeAssemblyFactory factory = (RuntimeAssemblyFactory)factories.getFactory(AssemblyFactory.class);
|
||||
return factory.createEndpointReference(uri);
|
||||
return factory.createEndpointReference();
|
||||
}
|
||||
*/
|
||||
|
||||
private String computeEndpointURI(String uri, ServletHost servletHost) {
|
||||
|
||||
|
@ -762,6 +769,8 @@ public class Axis2ServiceProvider {
|
|||
callbackAddress = callbackAddrElement.getText();
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required by OASIS
|
||||
OMElement params = from.getFirstChildWithName(QNAME_WSA_REFERENCE_PARAMETERS);
|
||||
if (params != null) {
|
||||
OMElement convIDElement =
|
||||
|
@ -777,6 +786,7 @@ public class Axis2ServiceProvider {
|
|||
callbackID = callbackIDElement.getText();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// get policy specified headers
|
||||
|
@ -797,14 +807,16 @@ public class Axis2ServiceProvider {
|
|||
fillQoSContext(msg, inMC);
|
||||
|
||||
// if reference parameters are needed, create a new "From" EPR to hold them
|
||||
EndpointReference from = null;
|
||||
ReferenceParameters parameters = null;
|
||||
if (callbackAddress != null || callbackID != null || conversationID != null) {
|
||||
from = createEndpointReference(null);
|
||||
parameters = from.getReferenceParameters();
|
||||
EndpointReference2 from = null;
|
||||
if (callbackAddress != null ) {
|
||||
from = assemblyFactory.createEndpointReference();
|
||||
Endpoint2 fromEndpoint = assemblyFactory.createEndpoint();
|
||||
from.setTargetEndpoint(fromEndpoint);
|
||||
// TODO - EPR - need to set callback address
|
||||
msg.setFrom(from);
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required in OASIS
|
||||
// set the reference parameters into the "From" EPR
|
||||
if (callbackAddress != null) {
|
||||
parameters.setCallbackReference(createEndpointReference(callbackAddress));
|
||||
|
@ -819,6 +831,7 @@ public class Axis2ServiceProvider {
|
|||
if (basicAuthenticationPolicy != null) {
|
||||
Axis2BindingBasicAuthenticationConfigurator.parseHTTPHeader(inMC, msg, basicAuthenticationPolicy);
|
||||
}
|
||||
*/
|
||||
|
||||
// find the runtime wire and invoke it with the message
|
||||
RuntimeWire wire = ((RuntimeComponentService)contract).getRuntimeWire(getBinding());
|
||||
|
|
|
@ -130,8 +130,8 @@ public class DataBindingRuntimeWireProcessor implements RuntimeWireProcessor {
|
|||
}
|
||||
|
||||
public void process(RuntimeWire wire) {
|
||||
InterfaceContract sourceContract = wire.getSource().getInterfaceContract();
|
||||
InterfaceContract targetContract = wire.getTarget().getInterfaceContract();
|
||||
InterfaceContract sourceContract = wire.getEndpointReference().getInterfaceContract();
|
||||
InterfaceContract targetContract = wire.getEndpoint().getInterfaceContract();
|
||||
if (targetContract == null) {
|
||||
targetContract = sourceContract;
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ public class DataBindingRuntimeWireProcessor implements RuntimeWireProcessor {
|
|||
}
|
||||
if (interceptor != null) {
|
||||
String phase =
|
||||
(wire.getSource().getContract() instanceof ComponentReference) ? Phase.REFERENCE_INTERFACE
|
||||
(wire.getEndpointReference().getReference() instanceof ComponentReference) ? Phase.REFERENCE_INTERFACE
|
||||
: Phase.SERVICE_INTERFACE;
|
||||
chain.addInterceptor(phase, interceptor);
|
||||
}
|
||||
|
|
|
@ -20,8 +20,9 @@ package org.apache.tuscany.sca.invocation;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
|
||||
/**
|
||||
* Represents a request, response, or exception flowing through a wire
|
||||
|
@ -46,25 +47,25 @@ public interface Message {
|
|||
* Get the end point reference of the source reference
|
||||
* @return The end point reference of the reference originating the message
|
||||
*/
|
||||
EndpointReference getFrom();
|
||||
EndpointReference2 getFrom();
|
||||
|
||||
/**
|
||||
* Set the end point reference of the reference originating the message
|
||||
* @param from The end point reference of the reference originating the message
|
||||
*/
|
||||
void setFrom(EndpointReference from);
|
||||
void setFrom(EndpointReference2 from);
|
||||
|
||||
/**
|
||||
* Get the end point reference of target service
|
||||
* @return The end point reference of the service that the message targets
|
||||
*/
|
||||
EndpointReference getTo();
|
||||
Endpoint2 getTo();
|
||||
|
||||
/**
|
||||
* Set the end point reference of target service
|
||||
* @param to The end point reference of the service that the message targets
|
||||
*/
|
||||
void setTo(EndpointReference to);
|
||||
void setTo(Endpoint2 to);
|
||||
|
||||
/**
|
||||
* Returns the id of the message
|
||||
|
|
|
@ -1,93 +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.runtime;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Binding;
|
||||
import org.apache.tuscany.sca.assembly.Contract;
|
||||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
|
||||
/**
|
||||
* The endpoint reference for a component service or reference
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public interface EndpointReference extends Cloneable {
|
||||
/**
|
||||
* Get the component for the endpoint
|
||||
* @return The component, null of the EPR is for a non-SCA service
|
||||
*/
|
||||
RuntimeComponent getComponent();
|
||||
|
||||
/**
|
||||
* Get the component service or reference for the endpoint
|
||||
* @return The component service or reference, null if the EPR is for a non-SCA service
|
||||
*/
|
||||
Contract getContract();
|
||||
|
||||
/**
|
||||
* Get the binding for the endpoint
|
||||
* @return The binding
|
||||
*/
|
||||
Binding getBinding();
|
||||
|
||||
/**
|
||||
* Get the interface contract for the endpoint
|
||||
* @return The interface contract
|
||||
*/
|
||||
InterfaceContract getInterfaceContract();
|
||||
|
||||
/**
|
||||
* Update the interface contract for the endpoint
|
||||
* @param interfaceContract The updated interface contract
|
||||
*/
|
||||
void setInterfaceContract(InterfaceContract interfaceContract);
|
||||
|
||||
/**
|
||||
* Get the URI for this endpoint
|
||||
* @return The URI of the endpoint
|
||||
*/
|
||||
String getURI();
|
||||
|
||||
/**
|
||||
* Set the URI for this endpoint
|
||||
* @param uri The new URI of the endpoint
|
||||
*/
|
||||
void setURI(String uri);
|
||||
|
||||
/**
|
||||
* Get the callback endpoint for this endpoint
|
||||
* @return The callback endpoint for this endpoint
|
||||
*/
|
||||
EndpointReference getCallbackEndpoint();
|
||||
|
||||
/**
|
||||
* Set the callback endpoint for this endpoint
|
||||
* @param callbackEndpoint The new callback endpoint for this endpoint
|
||||
*/
|
||||
void setCallbackEndpoint(EndpointReference callbackEndpoint);
|
||||
|
||||
Object clone() throws CloneNotSupportedException;
|
||||
|
||||
void setReferenceParameters(ReferenceParameters parameters);
|
||||
ReferenceParameters getReferenceParameters();
|
||||
|
||||
void mergeEndpoint(EndpointReference epr);
|
||||
|
||||
}
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.apache.tuscany.sca.runtime;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
|
||||
/**
|
||||
* Parameters for the EndPointReference
|
||||
*
|
||||
|
@ -61,9 +63,9 @@ public interface ReferenceParameters extends Cloneable {
|
|||
*/
|
||||
void setCallbackObjectID(Object callbackObjectID);
|
||||
|
||||
EndpointReference getCallbackReference();
|
||||
EndpointReference2 getCallbackReference();
|
||||
|
||||
void setCallbackReference(EndpointReference callback);
|
||||
void setCallbackReference(EndpointReference2 callback);
|
||||
|
||||
Object clone() throws CloneNotSupportedException;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.apache.tuscany.sca.runtime;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.invocation.InvocationChain;
|
||||
|
@ -45,20 +46,20 @@ public interface RuntimeWire extends Cloneable {
|
|||
*
|
||||
* @return The end point reference of the source
|
||||
*/
|
||||
EndpointReference getSource();
|
||||
// EndpointReference getSource();
|
||||
|
||||
/**
|
||||
* Get the target of the wire
|
||||
*
|
||||
* @return The end point reference of the target
|
||||
*/
|
||||
EndpointReference getTarget();
|
||||
// EndpointReference getTarget();
|
||||
|
||||
/**
|
||||
* Rebind the runtime wire with the given target
|
||||
* @param target The target endpoint reference
|
||||
*/
|
||||
void setTarget(EndpointReference target);
|
||||
// void setTarget(EndpointReference target);
|
||||
|
||||
//==================================================================
|
||||
|
||||
|
@ -69,6 +70,13 @@ public interface RuntimeWire extends Cloneable {
|
|||
*/
|
||||
EndpointReference2 getEndpointReference();
|
||||
|
||||
/**
|
||||
* return the endpoint that configured this wire
|
||||
*
|
||||
* @return the endpoint that configured this wire
|
||||
*/
|
||||
Endpoint2 getEndpoint();
|
||||
|
||||
/**
|
||||
* Force the invocation chains to be rebuilt
|
||||
*/
|
||||
|
|
|
@ -20,25 +20,19 @@
|
|||
package org.apache.tuscany.sca.core.assembly;
|
||||
|
||||
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.Contract;
|
||||
import org.apache.tuscany.sca.assembly.DefaultAssemblyFactory;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.ReferenceParametersImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeComponentImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeComponentReferenceImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeComponentServiceImpl;
|
||||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
|
||||
|
||||
/**
|
||||
* The runtime version of assembly factory
|
||||
|
@ -65,6 +59,7 @@ public class RuntimeAssemblyFactory extends DefaultAssemblyFactory implements As
|
|||
return new RuntimeComponentServiceImpl();
|
||||
}
|
||||
|
||||
/* TODO - EPR - remove now
|
||||
// FIXME: [rfeng] We need to find a more consistent story to deal with EPR, EP and CallableReference
|
||||
public EndpointReference createEndpointReference(String uri) {
|
||||
return new EndpointReferenceImpl(uri);
|
||||
|
@ -76,10 +71,12 @@ public class RuntimeAssemblyFactory extends DefaultAssemblyFactory implements As
|
|||
InterfaceContract interfaceContract) {
|
||||
return new EndpointReferenceImpl(component, contract, binding, interfaceContract);
|
||||
}
|
||||
|
||||
|
||||
public ReferenceParameters createReferenceParameters() {
|
||||
return new ReferenceParametersImpl();
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public Endpoint2 createEndpoint() {
|
||||
|
|
|
@ -1,186 +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.assembly.impl;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Binding;
|
||||
import org.apache.tuscany.sca.assembly.Contract;
|
||||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
|
||||
/**
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class EndpointReferenceImpl implements EndpointReference {
|
||||
private RuntimeComponent component;
|
||||
private Contract contract;
|
||||
private Binding binding;
|
||||
private InterfaceContract interfaceContract;
|
||||
private String uri;
|
||||
private EndpointReference callbackEndpoint;
|
||||
private ReferenceParameters parameters = new ReferenceParametersImpl();
|
||||
|
||||
/**
|
||||
* @param component
|
||||
* @param contract
|
||||
* @param binding
|
||||
* @param interfaceContract
|
||||
*/
|
||||
public EndpointReferenceImpl(RuntimeComponent component,
|
||||
Contract contract,
|
||||
Binding binding,
|
||||
InterfaceContract interfaceContract) {
|
||||
super();
|
||||
this.component = component;
|
||||
this.contract = contract;
|
||||
this.binding = binding;
|
||||
this.interfaceContract = interfaceContract;
|
||||
this.uri = (component != null ? component.getURI() : "") + '/' +
|
||||
(contract != null ? contract.getName() : "");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri
|
||||
*/
|
||||
public EndpointReferenceImpl(String uri) {
|
||||
super();
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public Binding getBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
public void setBinding(Binding binding) {
|
||||
this.binding = binding;
|
||||
}
|
||||
|
||||
public RuntimeComponent getComponent() {
|
||||
return component;
|
||||
}
|
||||
|
||||
public void setComponent(RuntimeComponent component) {
|
||||
this.component = component;
|
||||
}
|
||||
|
||||
public Contract getContract() {
|
||||
return contract;
|
||||
}
|
||||
|
||||
public void setContract(Contract contract) {
|
||||
this.contract = contract;
|
||||
}
|
||||
|
||||
public InterfaceContract getInterfaceContract() {
|
||||
return interfaceContract;
|
||||
}
|
||||
|
||||
public void setInterfaceContract(InterfaceContract interfaceContract) {
|
||||
this.interfaceContract = interfaceContract;
|
||||
}
|
||||
|
||||
public String getURI() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public void setURI(String uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public EndpointReference getCallbackEndpoint() {
|
||||
return callbackEndpoint;
|
||||
}
|
||||
|
||||
public void setCallbackEndpoint(EndpointReference callbackEndpoint) {
|
||||
this.callbackEndpoint = callbackEndpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = PRIME * result + ((uri == null) ? 0 : uri.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final EndpointReferenceImpl other = (EndpointReferenceImpl)obj;
|
||||
if (uri == null) {
|
||||
if (other.uri != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!uri.equals(other.uri)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.lang.Object#clone()
|
||||
*/
|
||||
@Override
|
||||
public Object clone() throws CloneNotSupportedException {
|
||||
EndpointReferenceImpl copy = (EndpointReferenceImpl)super.clone();
|
||||
/* [nash] no need to copy callback endpoint
|
||||
if (callbackEndpoint != null) {
|
||||
copy.callbackEndpoint = (EndpointReference)callbackEndpoint.clone();
|
||||
}
|
||||
*/
|
||||
if (parameters != null) {
|
||||
copy.parameters = (ReferenceParameters)parameters.clone();
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the parameters
|
||||
*/
|
||||
public ReferenceParameters getReferenceParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parameters the parameters to set
|
||||
*/
|
||||
public void setReferenceParameters(ReferenceParameters parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public void mergeEndpoint(EndpointReference epr) {
|
||||
this.component = epr.getComponent();
|
||||
this.contract = epr.getContract();
|
||||
this.binding = epr.getBinding();
|
||||
this.interfaceContract = epr.getInterfaceContract();
|
||||
this.uri = epr.getURI();
|
||||
this.callbackEndpoint = epr.getCallbackEndpoint();
|
||||
}
|
||||
|
||||
}
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
package org.apache.tuscany.sca.core.assembly.impl;
|
||||
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
|
||||
/**
|
||||
|
@ -28,7 +28,7 @@ import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
|||
public class ReferenceParametersImpl implements ReferenceParameters {
|
||||
private Object callbackID;
|
||||
private Object conversationID;
|
||||
private EndpointReference callbackReference;
|
||||
private EndpointReference2 callbackReference;
|
||||
private Object callbackObjectID;
|
||||
|
||||
/**
|
||||
|
@ -59,13 +59,13 @@ public class ReferenceParametersImpl implements ReferenceParameters {
|
|||
/**
|
||||
* @see org.apache.tuscany.sca.runtime.ReferenceParameters#getCallbackReference()
|
||||
*/
|
||||
public EndpointReference getCallbackReference() {
|
||||
public EndpointReference2 getCallbackReference() {
|
||||
return callbackReference;
|
||||
}
|
||||
/**
|
||||
* @see org.apache.tuscany.sca.runtime.ReferenceParameters#setCallback(java.lang.Object)
|
||||
*/
|
||||
public void setCallbackReference(EndpointReference callback) {
|
||||
public void setCallbackReference(EndpointReference2 callback) {
|
||||
this.callbackReference = callback;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ public class RuntimeComponentReferenceImpl extends ComponentReferenceImpl implem
|
|||
// TODO - EPR - shouldn't rely on this anymore
|
||||
public RuntimeWire getRuntimeWire(Binding binding) {
|
||||
for (RuntimeWire wire : getRuntimeWires()) {
|
||||
if (wire.getSource().getBinding() == binding) {
|
||||
if (wire.getEndpointReference().getBinding() == binding) {
|
||||
return wire;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ public class RuntimeComponentServiceImpl extends ComponentServiceImpl implements
|
|||
|
||||
public RuntimeWire getRuntimeWire(Binding binding) {
|
||||
for (RuntimeWire wire : wires) {
|
||||
if (wire.getTarget().getBinding() == binding) {
|
||||
if (wire.getEndpoint().getBinding() == binding) {
|
||||
return wire;
|
||||
}
|
||||
}
|
||||
|
@ -68,11 +68,11 @@ public class RuntimeComponentServiceImpl extends ComponentServiceImpl implements
|
|||
if (wire == null) {
|
||||
return null;
|
||||
}
|
||||
if (interfaceContract != null && interfaceContract != wire.getSource().getInterfaceContract()) {
|
||||
if (interfaceContract != null && interfaceContract != wire.getEndpointReference().getInterfaceContract()) {
|
||||
try {
|
||||
// FIXME: [rfeng] We could avoid clone() using a better comparison of the two interface contracts
|
||||
wire = (RuntimeWire)wire.clone();
|
||||
wire.getSource().setInterfaceContract(interfaceContract);
|
||||
wire.getEndpointReference().setInterfaceContract(interfaceContract);
|
||||
wire.rebuild();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new ServiceRuntimeException(e);
|
||||
|
@ -112,11 +112,11 @@ public class RuntimeComponentServiceImpl extends ComponentServiceImpl implements
|
|||
if (wire == null) {
|
||||
return null;
|
||||
}
|
||||
if (interfaceContract != null && interfaceContract != wire.getSource().getInterfaceContract()) {
|
||||
if (interfaceContract != null && interfaceContract != wire.getEndpointReference().getInterfaceContract()) {
|
||||
try {
|
||||
// FIXME: [rfeng] We could avoid clone() using a better comparison of the two interface contracts
|
||||
wire = (RuntimeWire)wire.clone();
|
||||
wire.getSource().setInterfaceContract(interfaceContract);
|
||||
wire.getEndpointReference().setInterfaceContract(interfaceContract);
|
||||
wire.rebuild();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new ServiceRuntimeException(e);
|
||||
|
|
|
@ -60,7 +60,6 @@ import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
|
|||
import org.apache.tuscany.sca.provider.ReferenceBindingProviderRRB;
|
||||
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
|
||||
import org.apache.tuscany.sca.provider.ServiceBindingProviderRRB;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -89,7 +88,7 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
|
||||
// the following is a very simple cache that avoids re-cloning a wire
|
||||
// when consecutive callbacks to the same endpoint are made
|
||||
private EndpointReference lastCallback;
|
||||
private Endpoint2 lastCallback;
|
||||
private RuntimeWire cachedWire;
|
||||
private boolean wireReserved;
|
||||
private RuntimeWireImpl2 clonedFrom;
|
||||
|
@ -441,6 +440,7 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
// TODO - EPR remove when we convert fully over to EndpointReference2
|
||||
|
||||
// TODO - remove. Just here during development
|
||||
/*
|
||||
static EndpointReference epr;
|
||||
|
||||
public EndpointReference getSource() {
|
||||
|
@ -482,6 +482,7 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
// TODO - can we use the idea of setTarget to rebuild the wire?
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
// ===================================================================
|
||||
|
||||
|
@ -493,12 +494,16 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
|
||||
// TODO - cheating here as I fixed the RuntimeComponentService code
|
||||
// to call this when it resets the interface contract
|
||||
endpointReference.setInterfaceContract(epr.getInterfaceContract());
|
||||
//endpointReference.setInterfaceContract(epr.getInterfaceContract());
|
||||
}
|
||||
|
||||
public EndpointReference2 getEndpointReference() {
|
||||
return endpointReference;
|
||||
}
|
||||
|
||||
public Endpoint2 getEndpoint() {
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the interceptor for a reference binding
|
||||
|
@ -635,8 +640,10 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
return conversationManager;
|
||||
}
|
||||
|
||||
public synchronized RuntimeWire lookupCache(EndpointReference callback) {
|
||||
if (lastCallback != null && callback.getURI().equals(lastCallback.getURI()) && !wireReserved) {
|
||||
public synchronized RuntimeWire lookupCache(Endpoint2 callback) {
|
||||
if (lastCallback != null &&
|
||||
callback.getURI().equals(lastCallback.getURI()) &&
|
||||
!wireReserved) {
|
||||
wireReserved = true;
|
||||
return cachedWire;
|
||||
} else {
|
||||
|
@ -644,7 +651,7 @@ public class RuntimeWireImpl2 implements RuntimeWire {
|
|||
}
|
||||
}
|
||||
|
||||
public synchronized void addToCache(EndpointReference callback, RuntimeWire clonedWire) {
|
||||
public synchronized void addToCache(Endpoint2 callback, RuntimeWire clonedWire) {
|
||||
((RuntimeWireImpl2)clonedWire).setClonedFrom(this);
|
||||
lastCallback = callback;
|
||||
cachedWire = clonedWire;
|
||||
|
|
|
@ -24,8 +24,8 @@ import java.io.IOException;
|
|||
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.core.conversation.ConversationExt;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeWire;
|
||||
import org.oasisopen.sca.CallableReference;
|
||||
|
||||
|
@ -58,7 +58,7 @@ public interface CallableReferenceExt<B> extends CallableReference<B>, Externali
|
|||
/**
|
||||
* @return
|
||||
*/
|
||||
EndpointReference getEndpointReference();
|
||||
EndpointReference2 getEndpointReference();
|
||||
|
||||
/**
|
||||
* @return
|
||||
|
|
|
@ -30,6 +30,7 @@ import javax.xml.stream.XMLStreamReader;
|
|||
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.Endpoint2;
|
||||
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
|
||||
import org.apache.tuscany.sca.core.assembly.CompositeActivator;
|
||||
import org.apache.tuscany.sca.core.conversation.ConversationManager;
|
||||
|
@ -38,7 +39,6 @@ import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
|
|||
import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -146,11 +146,11 @@ public abstract class CompositeContext {
|
|||
public static RuntimeComponent getCurrentComponent() {
|
||||
Message message = ThreadMessageContext.getMessageContext();
|
||||
if (message != null) {
|
||||
EndpointReference to = message.getTo();
|
||||
Endpoint2 to = message.getTo();
|
||||
if (to == null) {
|
||||
return null;
|
||||
}
|
||||
RuntimeComponent component = message.getTo().getComponent();
|
||||
RuntimeComponent component = (RuntimeComponent) message.getTo().getComponent();
|
||||
return component;
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -27,19 +27,23 @@ 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.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
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.CompositeActivatorImpl2;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
|
||||
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;
|
||||
|
@ -52,7 +56,6 @@ 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.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
|
@ -88,6 +91,9 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
|
|||
private transient RuntimeComponentReference clonedRef;
|
||||
private transient ReferenceParameters refParams;
|
||||
private transient XMLStreamReader xmlReader;
|
||||
|
||||
private FactoryExtensionPoint modelFactories;
|
||||
protected RuntimeAssemblyFactory assemblyFactory;
|
||||
|
||||
/*
|
||||
* Public constructor for Externalizable serialization/deserialization
|
||||
|
@ -116,6 +122,11 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
|
|||
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) {
|
||||
|
@ -164,8 +175,8 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
|
|||
|
||||
protected void bind(RuntimeWire wire) {
|
||||
if (wire != null) {
|
||||
this.component = wire.getSource().getComponent();
|
||||
this.reference = (RuntimeComponentReference)wire.getSource().getContract();
|
||||
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();
|
||||
|
@ -508,7 +519,7 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
|
|||
}
|
||||
|
||||
// TODO - EPR - needs sorting out for new endpoint references
|
||||
public EndpointReference getEndpointReference() {
|
||||
public EndpointReference2 getEndpointReference() {
|
||||
try {
|
||||
resolve();
|
||||
|
||||
|
@ -517,9 +528,16 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> {
|
|||
InterfaceContract sourceContract =
|
||||
componentTypeRef == null ? reference.getInterfaceContract() : componentTypeRef.getInterfaceContract();
|
||||
sourceContract = sourceContract.makeUnidirectional(false);
|
||||
EndpointReference epr = new EndpointReferenceImpl(component, reference, null /*binding*/, sourceContract);
|
||||
ReferenceParameters parameters = getReferenceParameters();
|
||||
epr.setReferenceParameters(parameters);
|
||||
|
||||
EndpointReference2 epr = assemblyFactory.createEndpointReference();
|
||||
epr.setComponent(component);
|
||||
epr.setReference(reference);
|
||||
//epr.setBinding(binding);
|
||||
epr.setInterfaceContract(sourceContract);
|
||||
|
||||
Endpoint2 endpoint = assemblyFactory.createEndpoint();
|
||||
epr.setTargetEndpoint(endpoint);
|
||||
|
||||
return epr;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceRuntimeException(e);
|
||||
|
|
|
@ -39,6 +39,8 @@ 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.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.assembly.Multiplicity;
|
||||
import org.apache.tuscany.sca.assembly.OptimizableBinding;
|
||||
import org.apache.tuscany.sca.assembly.Reference;
|
||||
|
@ -61,7 +63,6 @@ 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.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -274,11 +275,11 @@ public class CompositeContextImpl extends CompositeContext {
|
|||
public static RuntimeComponent getCurrentComponent() {
|
||||
Message message = ThreadMessageContext.getMessageContext();
|
||||
if (message != null) {
|
||||
EndpointReference to = message.getTo();
|
||||
Endpoint2 to = message.getTo();
|
||||
if (to == null) {
|
||||
return null;
|
||||
}
|
||||
RuntimeComponent component = message.getTo().getComponent();
|
||||
RuntimeComponent component = (RuntimeComponent) message.getTo().getComponent();
|
||||
return component;
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.List;
|
|||
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
|
||||
import org.apache.tuscany.sca.core.context.CallableReferenceExt;
|
||||
import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;
|
||||
|
@ -31,7 +32,6 @@ 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.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
|
@ -65,20 +65,23 @@ public class RequestContextImpl implements RequestContext {
|
|||
}
|
||||
|
||||
public String getServiceName() {
|
||||
return ThreadMessageContext.getMessageContext().getTo().getContract().getName();
|
||||
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?
|
||||
EndpointReference to = msgContext.getTo();
|
||||
RuntimeComponentService service = (RuntimeComponentService) to.getContract();
|
||||
Endpoint2 to = msgContext.getTo();
|
||||
RuntimeComponentService service = (RuntimeComponentService) to.getService();
|
||||
RuntimeComponent component = (RuntimeComponent) to.getComponent();
|
||||
|
||||
CallableReference<B> callableReference = component.getComponentContext().getCallableReference(null, component, service);
|
||||
ReferenceParameters parameters = msgContext.getFrom().getReferenceParameters();
|
||||
((CallableReferenceExt<B>) callableReference).attachCallbackID(parameters.getCallbackID());
|
||||
((CallableReferenceExt<B>) callableReference).attachConversation(parameters.getConversationID());
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
|
@ -93,8 +96,8 @@ public class RequestContextImpl implements RequestContext {
|
|||
@SuppressWarnings("unchecked")
|
||||
public <CB> CallableReference<CB> getCallbackReference() {
|
||||
Message msgContext = ThreadMessageContext.getMessageContext();
|
||||
EndpointReference to = msgContext.getTo();
|
||||
RuntimeComponentService service = (RuntimeComponentService) to.getContract();
|
||||
Endpoint2 to = msgContext.getTo();
|
||||
RuntimeComponentService service = (RuntimeComponentService) to.getService();
|
||||
RuntimeComponentReference callbackReference = (RuntimeComponentReference)service.getCallbackReference();
|
||||
if (callbackReference == null) {
|
||||
return null;
|
||||
|
@ -106,11 +109,12 @@ public class RequestContextImpl implements RequestContext {
|
|||
CallbackReferenceImpl ref = CallbackReferenceImpl.newInstance(javaClass, proxyFactory, wires);
|
||||
if (ref != null) {
|
||||
//ref.resolveTarget();
|
||||
ReferenceParameters parameters = msgContext.getFrom().getReferenceParameters();
|
||||
ref.attachCallbackID(parameters.getCallbackID());
|
||||
if (ref.getConversation() != null) {
|
||||
ref.attachConversationID(parameters.getConversationID());
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ 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.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
|
@ -118,6 +117,7 @@ public class ServiceReferenceImpl<B> extends CallableReferenceImpl<B> implements
|
|||
this.callback = callback;
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required in OASIS
|
||||
@Override
|
||||
protected ReferenceParameters getReferenceParameters() {
|
||||
ReferenceParameters parameters = super.getReferenceParameters();
|
||||
|
@ -133,4 +133,5 @@ public class ServiceReferenceImpl<B> extends CallableReferenceImpl<B> implements
|
|||
}
|
||||
return parameters;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -37,13 +37,18 @@ public class CallbackInterfaceInterceptor implements Interceptor {
|
|||
}
|
||||
|
||||
public Message invoke(Message msg) {
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
ReferenceParameters parameters = msg.getFrom().getReferenceParameters();
|
||||
if (parameters.getCallbackObjectID() != null || parameters.getCallbackReference() != msg.getFrom()
|
||||
.getCallbackEndpoint()) {
|
||||
*/
|
||||
return next.invoke(msg);
|
||||
/*
|
||||
} else {
|
||||
throw new NoRegisteredCallbackException("Callback target does not implement the callback interface");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public void setNext(Invoker next) {
|
||||
|
|
|
@ -24,11 +24,12 @@ import java.util.Map;
|
|||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.invocation.Interceptor;
|
||||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeWire;
|
||||
import org.apache.tuscany.sca.work.WorkScheduler;
|
||||
import org.oasisopen.sca.ServiceRuntimeException;
|
||||
|
@ -151,19 +152,19 @@ public class NonBlockingInterceptor implements Interceptor {
|
|||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public EndpointReference getFrom() {
|
||||
public EndpointReference2 getFrom() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public EndpointReference getTo() {
|
||||
public Endpoint2 getTo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setFrom(EndpointReference from) {
|
||||
public void setFrom(EndpointReference2 from) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public void setTo(EndpointReference to) {
|
||||
public void setTo(Endpoint2 to) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -178,7 +179,7 @@ public class NonBlockingInterceptor implements Interceptor {
|
|||
/**
|
||||
* @see org.apache.tuscany.sca.invocation.Message#getReplyTo()
|
||||
*/
|
||||
public EndpointReference getReplyTo() {
|
||||
public EndpointReference2 getReplyTo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.apache.tuscany.sca.core.invocation;
|
|||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.core.conversation.ConversationExt;
|
||||
import org.apache.tuscany.sca.core.conversation.ConversationManager;
|
||||
import org.apache.tuscany.sca.core.conversation.ConversationState;
|
||||
|
@ -37,7 +38,6 @@ import org.apache.tuscany.sca.invocation.InvocationChain;
|
|||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.invocation.MessageFactory;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeWire;
|
||||
|
@ -61,11 +61,13 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
this.messageFactory = messageFactory;
|
||||
this.wire = wire;
|
||||
this.conversationManager = conversationManager;
|
||||
init(wire);
|
||||
//init(wire);
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
protected void init(RuntimeWire wire) {
|
||||
if (wire != null) {
|
||||
|
||||
ReferenceParameters parameters = wire.getSource().getReferenceParameters();
|
||||
this.callbackID = parameters.getCallbackID();
|
||||
this.callbackObject = parameters.getCallbackReference();
|
||||
|
@ -74,6 +76,7 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
this.conversational = contract.getInterface().isConversational();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO - Introduced to allow the RuntimeWireInvoker to sit on the end of the
|
||||
|
@ -105,25 +108,35 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
}
|
||||
|
||||
protected Object invoke(InvocationChain chain, Message msg, RuntimeWire wire) throws InvocationTargetException {
|
||||
EndpointReference from = msg.getFrom();
|
||||
EndpointReference epFrom = wire.getSource();
|
||||
EndpointReference2 from = msg.getFrom();
|
||||
EndpointReference2 epFrom = wire.getEndpointReference();
|
||||
if (from != null) {
|
||||
from.mergeEndpoint(epFrom);
|
||||
from.setComponent(epFrom.getComponent());
|
||||
from.setReference(epFrom.getReference());
|
||||
from.setBinding(epFrom.getBinding());
|
||||
from.setInterfaceContract(epFrom.getInterfaceContract());
|
||||
from.setTargetEndpoint(epFrom.getTargetEndpoint());
|
||||
from.setCallbackEndpoint(epFrom.getCallbackEndpoint());
|
||||
|
||||
// TODO - EPR - what's going on here?
|
||||
//from.mergeEndpoint(epFrom);
|
||||
} else {
|
||||
msg.setFrom(epFrom);
|
||||
}
|
||||
msg.setTo(wire.getTarget());
|
||||
msg.setTo(wire.getEndpoint());
|
||||
|
||||
Invoker headInvoker = chain.getHeadInvoker();
|
||||
Operation operation = chain.getTargetOperation();
|
||||
msg.setOperation(operation);
|
||||
|
||||
Message msgContext = ThreadMessageContext.getMessageContext();
|
||||
Object currentConversationID = msgContext.getFrom().getReferenceParameters().getConversationID();
|
||||
// TODO - EPR - no required for OASIS
|
||||
//Object currentConversationID = msgContext.getFrom().getReferenceParameters().getConversationID();
|
||||
|
||||
ThreadMessageContext.setMessageContext(msg);
|
||||
try {
|
||||
conversationPreinvoke(msg);
|
||||
// TODO - EPR - no required for OASIS
|
||||
//conversationPreinvoke(msg);
|
||||
// handleCallback(msg, currentConversationID);
|
||||
// dispatch the wire down the chain and get the response
|
||||
Message resp = headInvoker.invoke(msg);
|
||||
|
@ -138,9 +151,10 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
throw new ServiceRuntimeException(e);
|
||||
} finally {
|
||||
try {
|
||||
conversationPostInvoke(msg);
|
||||
} catch (TargetDestructionException e) {
|
||||
throw new ServiceRuntimeException(e);
|
||||
// TODO - EPR - no required for OASIS
|
||||
//conversationPostInvoke(msg);
|
||||
//} catch (TargetDestructionException e) {
|
||||
// throw new ServiceRuntimeException(e);
|
||||
} finally {
|
||||
ThreadMessageContext.setMessageContext(msgContext);
|
||||
}
|
||||
|
@ -150,16 +164,19 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
/**
|
||||
* @param msgContext
|
||||
*/
|
||||
/* TODO - EPR - no required for OASIS
|
||||
protected EndpointReference getCallbackEndpoint(Message msgContext) {
|
||||
EndpointReference from = msgContext.getFrom();
|
||||
return from == null ? null : from.getReferenceParameters().getCallbackReference();
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Pre-invoke for the conversation handling
|
||||
* @param msg
|
||||
* @throws TargetResolutionException
|
||||
*/
|
||||
/* TODO - EPR - no required for OASIS
|
||||
private void conversationPreinvoke(Message msg) {
|
||||
if (conversational) {
|
||||
ReferenceParameters parameters = msg.getFrom().getReferenceParameters();
|
||||
|
@ -185,6 +202,7 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
parameters.setConversationID(conversation.getConversationID());
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Post-invoke for the conversation handling
|
||||
|
@ -192,6 +210,7 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
* @param operation
|
||||
* @throws TargetDestructionException
|
||||
*/
|
||||
/* TODO - EPR - no required for OASIS
|
||||
@SuppressWarnings("unchecked")
|
||||
private void conversationPostInvoke(Message msg) throws TargetDestructionException {
|
||||
if (conversational) {
|
||||
|
@ -222,7 +241,7 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
private ScopeContainer getConversationalScopeContainer(Message msg) {
|
||||
ScopeContainer scopeContainer = null;
|
||||
|
||||
RuntimeComponent component = msg.getTo().getComponent();
|
||||
RuntimeComponent component = (RuntimeComponent) msg.getTo().getComponent();
|
||||
|
||||
if (component instanceof ScopedRuntimeComponent) {
|
||||
ScopedRuntimeComponent scopedRuntimeComponent = (ScopedRuntimeComponent)component;
|
||||
|
@ -235,6 +254,7 @@ public class RuntimeWireInvoker implements Invoker{
|
|||
|
||||
return scopeContainer;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
*/
|
||||
package org.apache.tuscany.sca.core.invocation;
|
||||
|
||||
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
|
||||
import org.apache.tuscany.sca.core.invocation.impl.MessageImpl;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
|
||||
|
@ -33,7 +32,8 @@ public final class ThreadMessageContext {
|
|||
@Override
|
||||
protected synchronized Message initialValue() {
|
||||
Message msg = new MessageImpl();
|
||||
msg.setFrom(new EndpointReferenceImpl("/"));
|
||||
// TODO - EPR - What to set as default?
|
||||
//msg.setFrom(new EndpointReferenceImpl("/"));
|
||||
return msg;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -27,9 +27,9 @@ 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.Contract;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.assembly.OptimizableBinding;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeComponentReferenceImpl;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeWireImpl2;
|
||||
import org.apache.tuscany.sca.core.context.CompositeContext;
|
||||
|
@ -39,7 +39,6 @@ import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
|
|||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
|
||||
|
@ -53,13 +52,13 @@ import org.apache.tuscany.sca.runtime.RuntimeWire;
|
|||
public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
||||
private RuntimeWire wire;
|
||||
private List<RuntimeWire> wires;
|
||||
private EndpointReference resolvedEndpoint;
|
||||
private Endpoint2 resolvedEndpoint;
|
||||
private Object convID;
|
||||
|
||||
public static CallbackReferenceImpl newInstance(Class interfaze,
|
||||
ProxyFactory proxyFactory,
|
||||
List<RuntimeWire> wires) {
|
||||
if (getCallbackEndpoint(ThreadMessageContext.getMessageContext()) != null) {
|
||||
if (ThreadMessageContext.getMessageContext().getFrom().getCallbackEndpoint() != null) {
|
||||
return new CallbackReferenceImpl(interfaze, proxyFactory, wires);
|
||||
} else {
|
||||
return null;
|
||||
|
@ -84,11 +83,14 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
wire = selectCallbackWire(msgContext);
|
||||
if (wire == null) {
|
||||
//FIXME: need better exception
|
||||
throw new RuntimeException("No callback binding found for " + msgContext.getTo().getURI());
|
||||
throw new RuntimeException("No callback binding found for " + msgContext.getTo().toString());
|
||||
}
|
||||
resolvedEndpoint = getCallbackEndpoint(msgContext);
|
||||
resolvedEndpoint = msgContext.getFrom().getCallbackEndpoint();
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
convID = msgContext.getFrom().getReferenceParameters().getConversationID();
|
||||
callbackID = msgContext.getFrom().getReferenceParameters().getCallbackID();
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -108,26 +110,26 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
return convID;
|
||||
}
|
||||
|
||||
protected EndpointReference getResolvedEndpoint() {
|
||||
protected Endpoint2 getResolvedEndpoint() {
|
||||
return resolvedEndpoint;
|
||||
}
|
||||
|
||||
private RuntimeWire selectCallbackWire(Message msgContext) {
|
||||
// look for callback binding with same name as service binding
|
||||
EndpointReference to = msgContext.getTo();
|
||||
Endpoint2 to = msgContext.getTo();
|
||||
if (to == null) {
|
||||
//FIXME: need better exception
|
||||
throw new RuntimeException("Destination for forward call is not available");
|
||||
}
|
||||
for (RuntimeWire wire : wires) {
|
||||
if (wire.getSource().getBinding().getName().equals(to.getBinding().getName())) {
|
||||
if (wire.getEndpointReference().getBinding().getName().equals(to.getBinding().getName())) {
|
||||
return wire;
|
||||
}
|
||||
}
|
||||
|
||||
// if no match, look for callback binding with same type as service binding
|
||||
for (RuntimeWire wire : wires) {
|
||||
if (wire.getSource().getBinding().getClass() == to.getBinding().getClass()) {
|
||||
if (wire.getEndpointReference().getBinding().getClass() == to.getBinding().getClass()) {
|
||||
return wire;
|
||||
}
|
||||
}
|
||||
|
@ -136,20 +138,6 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the endpoint reference from the incoming message that points
|
||||
* back to the callback service
|
||||
*
|
||||
* @param msgContext
|
||||
*/
|
||||
private static EndpointReference getCallbackEndpoint(Message msgContext) {
|
||||
EndpointReference from = msgContext.getFrom();
|
||||
if (from == null) {
|
||||
return null;
|
||||
}
|
||||
return from.getReferenceParameters().getCallbackReference();
|
||||
}
|
||||
|
||||
private RuntimeWire cloneAndBind(RuntimeWire wire) {
|
||||
RuntimeWire boundWire = null;
|
||||
if (resolvedEndpoint != null) {
|
||||
|
@ -158,7 +146,20 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
return boundWire;
|
||||
}
|
||||
try {
|
||||
Contract contract = resolvedEndpoint.getContract();
|
||||
// TODO - EPR - is this correct?
|
||||
|
||||
// Fluff up a new response wire based on the callback endpoint
|
||||
RuntimeComponentReference ref =
|
||||
bind((RuntimeComponentReference)wire.getEndpointReference().getReference(),
|
||||
resolvedEndpoint);
|
||||
|
||||
boundWire = ref.getRuntimeWires().get(0);
|
||||
|
||||
Binding binding = wire.getEndpointReference().getBinding();
|
||||
binding.setURI(resolvedEndpoint.getBinding().getURI());
|
||||
|
||||
/* TODO - EPR - remove as there are no callback objects now
|
||||
* Contract contract = resolvedEndpoint.getContract();
|
||||
RuntimeComponentReference ref = null;
|
||||
if (contract == null) {
|
||||
//TODO - EPR - does it ever go through here?
|
||||
|
@ -177,24 +178,27 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
// TODO - EPR - get the wire from the reference that matches the
|
||||
// injected callback reference wire. We don't have bindings yet as the
|
||||
// callback object wire hasn't been initialized
|
||||
/*
|
||||
for (RuntimeWire runtimeWire : ref.getRuntimeWires()){
|
||||
if (runtimeWire.getEndpointReference().getBinding().getName().equals(wire.getEndpointReference().getBinding().getName())){
|
||||
boundWire = runtimeWire;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// for (RuntimeWire runtimeWire : ref.getRuntimeWires()){
|
||||
// if (runtimeWire.getEndpointReference().getBinding().getName().equals(wire.getEndpointReference().getBinding().getName())){
|
||||
// boundWire = runtimeWire;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// just get the first one for now
|
||||
boundWire = ref.getRuntimeWires().get(0);
|
||||
|
||||
} else { // contract instanceof RuntimeComponentService
|
||||
//TODO - EPR - I think it does this if no callback object has been set explicitly
|
||||
ref = bind((RuntimeComponentReference)wire.getSource().getContract(),
|
||||
ref = bind((RuntimeComponentReference)wire.getEndpointReference().getReference(),
|
||||
resolvedEndpoint);
|
||||
boundWire = ref.getRuntimeWires().get(0);
|
||||
}
|
||||
|
||||
configureWire(boundWire);
|
||||
*/
|
||||
|
||||
((RuntimeWireImpl2)wire).addToCache(resolvedEndpoint, boundWire);
|
||||
} catch (CloneNotSupportedException e) {
|
||||
// will not happen
|
||||
|
@ -205,13 +209,15 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
|
||||
// TODO - EPR - why static & convert to ne endpoint reference
|
||||
private static RuntimeComponentReference bind(RuntimeComponentReference reference,
|
||||
EndpointReference resolvedEndpoint) throws CloneNotSupportedException {
|
||||
RuntimeComponent component = resolvedEndpoint.getComponent();
|
||||
RuntimeComponentService service = (RuntimeComponentService)resolvedEndpoint.getContract();
|
||||
Endpoint2 resolvedEndpoint) throws CloneNotSupportedException {
|
||||
RuntimeComponent component = (RuntimeComponent)resolvedEndpoint.getComponent();
|
||||
RuntimeComponentService service = (RuntimeComponentService)resolvedEndpoint.getService();
|
||||
|
||||
RuntimeComponentReference ref = (RuntimeComponentReference)reference.clone();
|
||||
ref.getTargets().add(service);
|
||||
ref.getBindings().clear();
|
||||
|
||||
/* TODO - EPR - don't think this is require now we have endpoint references
|
||||
for (Binding binding : service.getBindings()) {
|
||||
if (binding instanceof OptimizableBinding) {
|
||||
OptimizableBinding optimizableBinding = (OptimizableBinding)((OptimizableBinding)binding).clone();
|
||||
|
@ -223,6 +229,7 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
ref.getBindings().add(binding);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
ref.getEndpointReferences().clear();
|
||||
|
||||
|
@ -230,10 +237,10 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
EndpointReference2 clone = (EndpointReference2)endpointReference.clone();
|
||||
|
||||
clone.setReference(ref);
|
||||
clone.getBinding().setURI(resolvedEndpoint.getURI());
|
||||
clone.getBinding().setURI(resolvedEndpoint.getBinding().getURI());
|
||||
|
||||
clone.getTargetEndpoint().setComponent(resolvedEndpoint.getComponent());
|
||||
clone.getTargetEndpoint().setService((ComponentService)resolvedEndpoint.getContract());
|
||||
clone.getTargetEndpoint().setService((ComponentService)resolvedEndpoint.getService());
|
||||
clone.getTargetEndpoint().setBinding(resolvedEndpoint.getBinding());
|
||||
|
||||
ref.getEndpointReferences().add(clone);
|
||||
|
@ -242,27 +249,29 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
return ref;
|
||||
}
|
||||
|
||||
/* TODO - EPR - remove
|
||||
private void configureWire(RuntimeWire wire ) {
|
||||
|
||||
// TODO - EPR - do we actiually need this code? Combine with bind?
|
||||
// TODO - EPR - do we actually need this code? Combine with bind?
|
||||
// need to set the endpoint on the binding also so that when the chains are created next
|
||||
// the sca binding can decide whether to provide local or remote invokers.
|
||||
// TODO - there is a problem here though in that I'm setting a target on a
|
||||
// binding that may possibly be trying to point at two things in the multi threaded
|
||||
// case. Need to confirm the general model here and how the clone and bind part
|
||||
// is intended to work
|
||||
Binding binding = wire.getSource().getBinding();
|
||||
binding.setURI(resolvedEndpoint.getURI());
|
||||
Binding binding = wire.getEndpointReference().getBinding();
|
||||
binding.setURI(resolvedEndpoint.getBinding().getURI());
|
||||
|
||||
// set the target contract as it varies for the sca binding depending on
|
||||
// whether it is local or remote
|
||||
RuntimeComponentReference ref = (RuntimeComponentReference)wire.getSource().getContract();
|
||||
RuntimeComponentReference ref = (RuntimeComponentReference)wire.getEndpointReference().getReference();
|
||||
|
||||
// TODO - EPR
|
||||
// needs to be set after the chains have been created for the first time
|
||||
// as now the binding provider won't be created until that time
|
||||
//wire.getEndpointReference().getTargetEndpoint().setInterfaceContract(ref.getBindingProvider(binding).getBindingInterfaceContract());
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
@ -282,9 +291,10 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
final InterfaceContract targetServiceIfaceContract = targetService.getInterfaceContract();
|
||||
|
||||
// Re-create the resolved Endpoint
|
||||
this.resolvedEndpoint = new EndpointReferenceImpl(
|
||||
(RuntimeComponent) targetComponent, targetService, null,
|
||||
targetServiceIfaceContract);
|
||||
this.resolvedEndpoint = assemblyFactory.createEndpoint();
|
||||
this.resolvedEndpoint.setComponent(targetComponent);
|
||||
this.resolvedEndpoint.setService(targetService);
|
||||
this.resolvedEndpoint.setInterfaceContract(targetServiceIfaceContract);
|
||||
|
||||
// Copy the Java Interface from the Service
|
||||
final JavaInterface ji = (JavaInterface) targetServiceIfaceContract.getInterface();
|
||||
|
@ -300,11 +310,12 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
throw new IOException(e.toString());
|
||||
}
|
||||
|
||||
// TODO - EPR - This doesn't sound right to me.
|
||||
// Setup the reference on the cloned wire
|
||||
final RuntimeComponentReference ref = new RuntimeComponentReferenceImpl();
|
||||
ref.setComponent((RuntimeComponent) targetComponent);
|
||||
ref.setInterfaceContract(targetServiceIfaceContract);
|
||||
((EndpointReferenceImpl) this.wire.getSource()).setContract(ref);
|
||||
((EndpointReference2) this.wire.getEndpointReference()).setReference(ref);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -315,6 +326,8 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> {
|
|||
super.writeExternal(out);
|
||||
out.writeObject(this.callbackID);
|
||||
out.writeObject(this.convID);
|
||||
out.writeUTF(this.resolvedEndpoint.getURI());
|
||||
|
||||
// TODO - EPR - What to do about URI?
|
||||
out.writeUTF(this.resolvedEndpoint.getBinding().getURI());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,8 @@ public class JDKCallbackInvocationHandler extends JDKInvocationHandler {
|
|||
|
||||
// set the conversational state based on the interface that
|
||||
// is specified for the reference that this wire belongs to
|
||||
initConversational(wire);
|
||||
// TODO - EPR - not required for OASIS
|
||||
//initConversational(wire);
|
||||
|
||||
// set the conversation id into the conversation object. This is
|
||||
// a special case for callbacks as, unless otherwise set manually,
|
||||
|
@ -94,7 +95,7 @@ public class JDKCallbackInvocationHandler extends JDKInvocationHandler {
|
|||
}
|
||||
|
||||
try {
|
||||
return invoke(chain, args, wire, wire.getSource());
|
||||
return invoke(chain, args, wire, wire.getEndpointReference());
|
||||
} catch (InvocationTargetException e) {
|
||||
Throwable t = e.getCause();
|
||||
if (t instanceof NoRegisteredCallbackException) {
|
||||
|
|
|
@ -28,6 +28,8 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.core.assembly.impl.RuntimeWireImpl2;
|
||||
import org.apache.tuscany.sca.core.context.CallableReferenceExt;
|
||||
import org.apache.tuscany.sca.core.context.impl.CallableReferenceImpl;
|
||||
|
@ -51,7 +53,6 @@ import org.apache.tuscany.sca.invocation.InvocationChain;
|
|||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.invocation.MessageFactory;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeWire;
|
||||
|
@ -69,8 +70,8 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
protected boolean conversational;
|
||||
protected ConversationExt conversation;
|
||||
protected MessageFactory messageFactory;
|
||||
protected EndpointReference source;
|
||||
protected EndpointReference target;
|
||||
protected EndpointReference2 source;
|
||||
protected Endpoint2 target;
|
||||
protected RuntimeWire wire;
|
||||
protected CallableReference<?> callableReference;
|
||||
protected Class<?> businessInterface;
|
||||
|
@ -100,7 +101,8 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
}
|
||||
|
||||
protected void init(RuntimeWire wire) {
|
||||
// TODO - EPR needs fixing when we remove the old EndpointReference
|
||||
// TODO - EPR not required for OASIS
|
||||
/*
|
||||
if (wire != null) {
|
||||
try {
|
||||
// Clone the endpoint reference so that reference parameters can be changed
|
||||
|
@ -110,12 +112,15 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
}
|
||||
initConversational(wire);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
protected void initConversational(RuntimeWire wire) {
|
||||
InterfaceContract contract = wire.getSource().getInterfaceContract();
|
||||
this.conversational = contract.getInterface().isConversational();
|
||||
}
|
||||
*/
|
||||
|
||||
protected Object getCallbackID() {
|
||||
if (callableReference != null) {
|
||||
|
@ -156,7 +161,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
|
||||
// The EndpointReference is not now resolved until the invocation chain
|
||||
// is first created so reset the source here
|
||||
source = wire.getSource();
|
||||
source = wire.getEndpointReference();
|
||||
|
||||
// send the invocation down the wire
|
||||
Object result = invoke(chain, args, wire, source);
|
||||
|
@ -265,18 +270,18 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
return found;
|
||||
}
|
||||
|
||||
protected void setEndpoint(EndpointReference endpoint) {
|
||||
protected void setEndpoint(Endpoint2 endpoint) {
|
||||
this.target = endpoint;
|
||||
}
|
||||
|
||||
protected Object invoke(InvocationChain chain, Object[] args, RuntimeWire wire, EndpointReference source)
|
||||
protected Object invoke(InvocationChain chain, Object[] args, RuntimeWire wire, EndpointReference2 source)
|
||||
throws Throwable {
|
||||
Message msg = messageFactory.createMessage();
|
||||
msg.setFrom(source);
|
||||
if (target != null) {
|
||||
msg.setTo(target);
|
||||
} else {
|
||||
msg.setTo(wire.getTarget());
|
||||
msg.setTo(wire.getEndpoint());
|
||||
}
|
||||
Invoker headInvoker = chain.getHeadInvoker();
|
||||
Operation operation = chain.getTargetOperation();
|
||||
|
@ -284,10 +289,12 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
msg.setBody(args);
|
||||
|
||||
Message msgContext = ThreadMessageContext.getMessageContext();
|
||||
Object currentConversationID = msgContext.getFrom().getReferenceParameters().getConversationID();
|
||||
|
||||
conversationPreinvoke(msg, wire);
|
||||
handleCallback(msg, wire, currentConversationID);
|
||||
|
||||
// TODO - EPR - not required for OASIS
|
||||
//Object currentConversationID = msgContext.getFrom().getReferenceParameters().getConversationID();
|
||||
//conversationPreinvoke(msg, wire);
|
||||
|
||||
handleCallback(msg, wire);
|
||||
ThreadMessageContext.setMessageContext(msg);
|
||||
boolean abnormalEndConversation = false;
|
||||
try {
|
||||
|
@ -295,6 +302,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
Message resp = headInvoker.invoke(msg);
|
||||
Object body = resp.getBody();
|
||||
if (resp.isFault()) {
|
||||
/* TODO - EPR - not required in OASIS
|
||||
// mark the conversation as ended if the exception is not a business exception
|
||||
if (currentConversationID != null ){
|
||||
try {
|
||||
|
@ -315,11 +323,12 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
// a system exception in the middle of a business exception
|
||||
}
|
||||
}
|
||||
*/
|
||||
throw (Throwable)body;
|
||||
}
|
||||
return body;
|
||||
} finally {
|
||||
conversationPostInvoke(msg, wire, abnormalEndConversation);
|
||||
//conversationPostInvoke(msg, wire, abnormalEndConversation);
|
||||
ThreadMessageContext.setMessageContext(msgContext);
|
||||
}
|
||||
}
|
||||
|
@ -330,14 +339,17 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
* @param interfaze
|
||||
* @throws TargetResolutionException
|
||||
*/
|
||||
private void handleCallback(Message msg, RuntimeWire wire, Object currentConversationID)
|
||||
private void handleCallback(Message msg, RuntimeWire wire)
|
||||
throws TargetResolutionException {
|
||||
ReferenceParameters parameters = msg.getFrom().getReferenceParameters();
|
||||
parameters.setCallbackID(getCallbackID());
|
||||
|
||||
//ReferenceParameters parameters = msg.getFrom().getReferenceParameters();
|
||||
//parameters.setCallbackID(getCallbackID());
|
||||
|
||||
if (msg.getFrom() == null || msg.getFrom().getCallbackEndpoint() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
parameters.setCallbackReference(msg.getFrom().getCallbackEndpoint());
|
||||
|
||||
// If we are passing out a callback target
|
||||
|
@ -386,6 +398,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -393,6 +406,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
* @param msg
|
||||
* @throws TargetResolutionException
|
||||
*/
|
||||
/* TODO - EPR - not required for OASIS
|
||||
private void conversationPreinvoke(Message msg, RuntimeWire wire) {
|
||||
if (!conversational) {
|
||||
// Not conversational or the conversation has been started
|
||||
|
@ -407,8 +421,8 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
|
||||
// if this is a local wire then set up the conversation timeouts here based on the
|
||||
// parameters from the component
|
||||
if (wire.getTarget().getComponent() != null){
|
||||
conversation.initializeConversationAttributes(wire.getTarget().getComponent());
|
||||
if (wire.getEndpoint().getComponent() != null){
|
||||
conversation.initializeConversationAttributes((RuntimeComponent)wire.getEndpoint().getComponent());
|
||||
}
|
||||
|
||||
// connect the conversation to the CallableReference so it can be retrieve in the future
|
||||
|
@ -422,13 +436,14 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
// if this is a local wire then schedule conversation timeouts based on the timeout
|
||||
// parameters from the service implementation. If this isn't a local wire then
|
||||
// the RuntimeWireInvoker will take care of this
|
||||
if (wire.getTarget().getComponent() != null){
|
||||
if (wire.getEndpoint().getComponent() != null){
|
||||
conversation.updateLastReferencedTime();
|
||||
}
|
||||
|
||||
msg.getFrom().getReferenceParameters().setConversationID(conversation.getConversationID());
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Post-invoke for the conversation handling
|
||||
|
@ -436,6 +451,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
* @param operation
|
||||
* @throws TargetDestructionException
|
||||
*/
|
||||
/* TODO - not required for OASIS
|
||||
@SuppressWarnings("unchecked")
|
||||
private void conversationPostInvoke(Message msg, RuntimeWire wire, boolean abnormalEndConversation)
|
||||
throws TargetDestructionException {
|
||||
|
@ -457,11 +473,12 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
conversation.end();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ScopeContainer<Object> getConversationalScopeContainer(RuntimeWire wire) {
|
||||
ScopeContainer<Object> scopeContainer = null;
|
||||
|
||||
RuntimeComponent runtimeComponent = wire.getSource().getComponent();
|
||||
RuntimeComponent runtimeComponent = (RuntimeComponent)wire.getEndpointReference().getComponent();
|
||||
|
||||
if (runtimeComponent instanceof ScopedRuntimeComponent) {
|
||||
ScopedRuntimeComponent scopedRuntimeComponent = (ScopedRuntimeComponent)runtimeComponent;
|
||||
|
@ -474,12 +491,14 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
|
||||
return scopeContainer;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new conversation id
|
||||
*
|
||||
* @return the conversation id
|
||||
*/
|
||||
/* TODO - EPR - not required for OASIS
|
||||
private Object createConversationID() {
|
||||
if (getConversationID() != null) {
|
||||
return getConversationID();
|
||||
|
@ -487,6 +506,7 @@ public class JDKInvocationHandler implements InvocationHandler, Serializable {
|
|||
return UUID.randomUUID().toString();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @return the callableReference
|
||||
|
|
|
@ -21,10 +21,10 @@ package org.apache.tuscany.sca.core.invocation.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
|
||||
/**
|
||||
* The default implementation of a message flowed through a wire during an invocation
|
||||
|
@ -38,12 +38,15 @@ public class MessageImpl implements Message {
|
|||
private boolean isFault;
|
||||
private Operation operation;
|
||||
|
||||
private EndpointReference from;
|
||||
private EndpointReference to;
|
||||
private EndpointReference2 from;
|
||||
private Endpoint2 to;
|
||||
|
||||
public MessageImpl() {
|
||||
this.from = new EndpointReferenceImpl("/");
|
||||
this.to = new EndpointReferenceImpl("/");
|
||||
// TODO - EPR - What to do by default?
|
||||
//this.from = new EndpointReferenceImpl("/");
|
||||
//this.to = new EndpointReferenceImpl("/");
|
||||
this.from = null;
|
||||
this.to = null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -73,19 +76,19 @@ public class MessageImpl implements Message {
|
|||
this.body = fault;
|
||||
}
|
||||
|
||||
public EndpointReference getFrom() {
|
||||
public EndpointReference2 getFrom() {
|
||||
return from;
|
||||
}
|
||||
|
||||
public void setFrom(EndpointReference from) {
|
||||
public void setFrom(EndpointReference2 from) {
|
||||
this.from = from;
|
||||
}
|
||||
|
||||
public EndpointReference getTo() {
|
||||
public Endpoint2 getTo() {
|
||||
return to;
|
||||
}
|
||||
|
||||
public void setTo(EndpointReference to) {
|
||||
public void setTo(Endpoint2 to) {
|
||||
this.to = to;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,8 @@ public class ConversationalScopeContainer extends AbstractScopeContainer<Object>
|
|||
Message msgContext = ThreadMessageContext.getMessageContext();
|
||||
|
||||
if (msgContext != null) {
|
||||
msgContext.getFrom().getReferenceParameters().setConversationID(contextId);
|
||||
// TODO - EPR - not required for OASIS
|
||||
//msgContext.getFrom().getReferenceParameters().setConversationID(contextId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,10 @@ public class ConversationIDObjectFactory implements ObjectFactory {
|
|||
}
|
||||
|
||||
public Object getInstance() {
|
||||
/* TODO - EPR - not reqiured for OASIS
|
||||
return ThreadMessageContext.getMessageContext().getFrom().getReferenceParameters().getConversationID();
|
||||
*/
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.logging.Level;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.Contract;
|
||||
import org.apache.tuscany.sca.assembly.Endpoint2;
|
||||
import org.apache.tuscany.sca.assembly.Implementation;
|
||||
import org.apache.tuscany.sca.core.invocation.CallbackInterfaceInterceptor;
|
||||
import org.apache.tuscany.sca.implementation.java.JavaImplementation;
|
||||
|
@ -33,7 +34,6 @@ import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
|||
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
|
||||
import org.apache.tuscany.sca.invocation.InvocationChain;
|
||||
import org.apache.tuscany.sca.invocation.Phase;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeWire;
|
||||
|
@ -63,19 +63,19 @@ public class JavaCallbackRuntimeWireProcessor implements RuntimeWireProcessor {
|
|||
}
|
||||
|
||||
private void addCallbackInterfaceInterceptors(RuntimeWire wire) {
|
||||
Contract contract = wire.getSource().getContract();
|
||||
Contract contract = wire.getEndpointReference().getReference();
|
||||
if (!(contract instanceof RuntimeComponentReference)) {
|
||||
return;
|
||||
}
|
||||
RuntimeComponent component = wire.getSource().getComponent();
|
||||
RuntimeComponent component = (RuntimeComponent) wire.getEndpointReference().getComponent();
|
||||
Implementation implementation = component.getImplementation();
|
||||
if (!(implementation instanceof JavaImplementation)) {
|
||||
return;
|
||||
}
|
||||
JavaImplementation javaImpl = (JavaImplementation)implementation;
|
||||
EndpointReference callbackEndpoint = wire.getSource().getCallbackEndpoint();
|
||||
Endpoint2 callbackEndpoint = wire.getEndpointReference().getCallbackEndpoint();
|
||||
if (callbackEndpoint != null) {
|
||||
Interface iface = callbackEndpoint.getContract().getInterfaceContract().getInterface();
|
||||
Interface iface = callbackEndpoint.getService().getInterfaceContract().getInterface();
|
||||
if (!supportsCallbackInterface(iface, javaImpl)) {
|
||||
// callback to this impl is not possible, so ensure a callback object is set
|
||||
for (InvocationChain chain : wire.getInvocationChains()) {
|
||||
|
|
|
@ -149,7 +149,7 @@ public class JavaComponentContextProvider {
|
|||
if (callbackReference != null) {
|
||||
List<RuntimeWire> wires = callbackReference.getRuntimeWires();
|
||||
if (!wires.isEmpty()) {
|
||||
callbackWires.put(wires.get(0).getSource().getInterfaceContract().getInterface().toString(),
|
||||
callbackWires.put(wires.get(0).getEndpointReference().getInterfaceContract().getInterface().toString(),
|
||||
wires);
|
||||
}
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ public class JavaComponentContextProvider {
|
|||
factory =
|
||||
new CallableReferenceObjectFactory(businessInterface, component,
|
||||
(RuntimeComponentReference)wireList.get(i)
|
||||
.getSource().getContract(), wireList.get(i)
|
||||
.getEndpointReference().getReference(), wireList.get(i)
|
||||
.getEndpointReference());
|
||||
} else {
|
||||
factory = createObjectFactory(baseType, wireList.get(i));
|
||||
|
|
|
@ -21,8 +21,8 @@ package org.apache.tuscany.sca.implementation.java.invocation;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference2;
|
||||
import org.apache.tuscany.sca.core.factory.InstanceWrapper;
|
||||
import org.apache.tuscany.sca.core.scope.Scope;
|
||||
import org.apache.tuscany.sca.core.scope.ScopeContainer;
|
||||
import org.apache.tuscany.sca.core.scope.ScopedRuntimeComponent;
|
||||
import org.apache.tuscany.sca.implementation.java.JavaImplementation;
|
||||
|
@ -33,7 +33,6 @@ import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
|
|||
import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
|
||||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.EndpointReference;
|
||||
import org.apache.tuscany.sca.runtime.ReferenceParameters;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeComponent;
|
||||
import org.oasisopen.sca.ServiceRuntimeException;
|
||||
|
@ -77,11 +76,13 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
|
|||
|
||||
Object contextId = null;
|
||||
|
||||
EndpointReference from = msg.getFrom();
|
||||
EndpointReference2 from = msg.getFrom();
|
||||
/* TODO - EPR - not required for OASIS
|
||||
ReferenceParameters parameters = null;
|
||||
if (from != null) {
|
||||
parameters = from.getReferenceParameters();
|
||||
}
|
||||
|
||||
// check what sort of context is required
|
||||
if (scopeContainer != null) {
|
||||
Scope scope = scopeContainer.getScope();
|
||||
|
@ -91,6 +92,7 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
|
|||
contextId = parameters.getConversationID();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
try {
|
||||
// The following call might create a new conversation, as a result, the msg.getConversationID() might
|
||||
|
@ -104,11 +106,13 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
|
|||
// to get the contextId of this component and remove it after we have invoked the method on
|
||||
// it. It is possible that the component instance will not go away when it is removed below
|
||||
// because a callback conversation will still be holding a reference to it
|
||||
/* TODO - EPR - not required for OASIS
|
||||
boolean removeTemporaryConversationalComponentAfterCall = false;
|
||||
if (parameters != null && (contextId == null) && (parameters.getConversationID() != null)) {
|
||||
contextId = parameters.getConversationID();
|
||||
removeTemporaryConversationalComponentAfterCall = true;
|
||||
}
|
||||
*/
|
||||
|
||||
Object instance = wrapper.getInstance();
|
||||
|
||||
|
@ -134,12 +138,15 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
|
|||
|
||||
scopeContainer.returnWrapper(wrapper, contextId);
|
||||
|
||||
/* TODO - EPR - not required for OASIS
|
||||
if ((sequence == ConversationSequence.CONVERSATION_END) || (removeTemporaryConversationalComponentAfterCall)) {
|
||||
// if end conversation, or we have the special case where a conversational
|
||||
// object was created to service the stateless half of a stateful component
|
||||
scopeContainer.remove(contextId);
|
||||
parameters.setConversationID(null);
|
||||
}
|
||||
*/
|
||||
|
||||
msg.setBody(ret);
|
||||
} catch (InvocationTargetException e) {
|
||||
Throwable cause = e.getTargetException();
|
||||
|
@ -168,7 +175,9 @@ public class JavaImplementationInvoker implements Invoker, DataExchangeSemantics
|
|||
|
||||
if (!isChecked && contextId != null) {
|
||||
scopeContainer.remove(contextId);
|
||||
/* TODO - EPR - not required for OASIS
|
||||
parameters.setConversationID(null);
|
||||
*/
|
||||
}
|
||||
} catch (Exception ex){
|
||||
// TODO - sure what the best course of action is here. We have
|
||||
|
|
Loading…
Reference in a new issue