Author: rfeng
Date: Wed Aug 22 23:13:10 2007
New Revision: 568837
URL: http://svn.apache.org/viewvc?rev=568837&view=rev
Log:
Apply Simon's patch2 for TUSCANY-1500
Added:
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
- copied, changed from r568821,
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
Removed:
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
Modified:
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
Modified:
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
(original)
+++
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
Wed Aug 22 23:13:10 2007
@@ -32,8 +32,9 @@
@Context
protected ComponentContext componentContext;
+
@Reference
- protected CallBackIdService aCallBackService;
+ protected ServiceReference<CallBackIdService> aCallBackService;
private static String returnMessage = null;
private static Object monitor = new Object();
@@ -61,8 +62,8 @@
// received the callback ID will be compared with the one
// returned. Equal is good.
- Object origCallBackId =
((ServiceReference)aCallBackService).getCallbackID();
- aCallBackService.knockKnock("Knock Knock - Test1");
+ Object origCallBackId = aCallBackService.getCallbackID();
+ aCallBackService.getService().knockKnock("Knock Knock - Test1");
int count = 0;
//
@@ -90,9 +91,9 @@
// returned. Equal is good.
String origCallBackId = "CallBackId1";
- ((ServiceReference)aCallBackService).setCallbackID(origCallBackId);
+ aCallBackService.setCallbackID(origCallBackId);
- aCallBackService.knockKnock("Knock Knock - Test2");
+ aCallBackService.getService().knockKnock("Knock Knock - Test2");
int count = 0;
//
Modified:
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
(original)
+++
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
Wed Aug 22 23:13:10 2007
@@ -37,7 +37,7 @@
System.out.println("CallBackIdServiceImpl message received: " +
aString);
RequestContext rc = compositeContext.getRequestContext();
Object callBackId = rc.getServiceReference().getCallbackID();
- System.out.println("CallBackIdServiceImpl callbackID: " +
callBackId.toString());
+ System.out.println("CallBackIdServiceImpl callbackID: " + callBackId);
callback.callBackMessage("Who's There");
System.out.println("CallBackIdServiceImpl response sent");
Copied:
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
(from r568821,
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java)
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java?p2=incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java&p1=incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java&r1=568821&r2=568837&rev=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
(original)
+++
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
Wed Aug 22 23:13:10 2007
@@ -22,8 +22,7 @@
import org.apache.tuscany.sca.host.embedded.SCADomain;
-//FIXME Fix this test case
-public class CallBackIdTestCaseFIXME extends TestCase {
+public class CallBackIdTestCase extends TestCase {
private SCADomain domain;
private CallBackIdClient aCallBackClient;
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
Wed Aug 22 23:13:10 2007
@@ -50,8 +50,6 @@
* @param <B> the type of the business interface
*/
public class CallableReferenceImpl<B> implements CallableReference<B>,
Externalizable {
- private static final long serialVersionUID = -4340454651451953916L;
-
protected transient CompositeActivator compositeActivator;
protected transient ProxyFactory proxyFactory;
@@ -91,6 +89,7 @@
this.componentURI = componentURI;
this.compositeActivator = compositeActivator;
this.factory = getObjectFactory();
+ this.callbackID = this.factory.getCallbackID();
}
protected CallableReferenceImpl(Class<B> businessInterface,
WireObjectFactory<B> factory) {
@@ -105,6 +104,7 @@
String componentURI = component.getURI(); // The target will be
relative to this base URI
this.componentURI = componentURI;
this.compositeActivator =
((ComponentContextImpl)component.getComponentContext()).getCompositeActivator();
+ this.callbackID = factory.getCallbackID();
}
private WireObjectFactory<B> getObjectFactory() {
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
Wed Aug 22 23:13:10 2007
@@ -63,7 +63,10 @@
RuntimeComponent component = (RuntimeComponent) to.getComponent();
// FIXME: [rfeng] What if the interface is not a java interface?
JavaInterface javaInterface = (JavaInterface)
service.getInterfaceContract().getInterface();
- return (ServiceReference<B>)
component.getComponentContext().createSelfReference(javaInterface.getJavaClass(),
service.getName());
+ ServiceReference<B> ref = (ServiceReference<B>)
component.getComponentContext()
+
.createSelfReference(javaInterface.getJavaClass(), service.getName());
+
ref.setCallbackID(ThreadMessageContext.getMessageContext().getCorrelationID());
+ return ref;
}
@SuppressWarnings("unchecked")
@@ -84,6 +87,7 @@
List<RuntimeWire> wires = callbackReference.getRuntimeWires();
CallbackWireObjectFactory factory = new
CallbackWireObjectFactory(javaClass, proxyFactory, wires);
factory.resolveTarget();
+
factory.setCallbackID(ThreadMessageContext.getMessageContext().getCorrelationID());
return (CallableReference<CB>) new
CallableReferenceImpl<CB>(javaClass, (WireObjectFactory<CB>)factory);
}
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
Wed Aug 22 23:13:10 2007
@@ -87,6 +87,7 @@
public void setCallbackID(Object callbackID) {
this.callbackID = callbackID;
+ factory.setCallbackID(callbackID);
}
public Object getCallback() {
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
Wed Aug 22 23:13:10 2007
@@ -53,7 +53,12 @@
//FIXME: need better exception
throw new RuntimeException("No callback wire found for " +
msgContext.getFrom().getURI());
}
- resolvedEndpoint = msgContext.getFrom();
+ EndpointReference from = msgContext.getFrom();
+ if (from != null && from.getCallbackEndpoint() != null) {
+ resolvedEndpoint = from.getCallbackEndpoint();
+ } else {
+ resolvedEndpoint = from;
+ }
}
@Override
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
Wed Aug 22 23:13:10 2007
@@ -54,11 +54,16 @@
}
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws
ProxyCreationException {
- return createProxy(interfaze, wire, null, null);
+ return createProxy(interfaze, wire, null, null, null);
}
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation) throws ProxyCreationException {
- return createProxy(interfaze, wire, conversation, null);
+ return createProxy(interfaze, wire, conversation, null, null);
+ }
+
+ public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation,
+ EndpointReference endpoint) throws
ProxyCreationException {
+ return createProxy(interfaze, wire, conversation, endpoint, null);
}
/**
@@ -66,7 +71,7 @@
* JDKProxyService.
*/
public <T> T createProxy(final Class<T> interfaze, final RuntimeWire wire,
final Conversation conversation,
- final EndpointReference endpoint) throws
ProxyCreationException {
+ final EndpointReference endpoint, final Object
callbackID) throws ProxyCreationException {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(interfaze);
enhancer.setCallback(new MethodInterceptor() {
@@ -75,6 +80,7 @@
JDKInvocationHandler invocationHandler = new
JDKInvocationHandler(messageFactory, interfaze, wire);
invocationHandler.setConversation(conversation);
invocationHandler.setEndpoint(endpoint);
+ invocationHandler.setCallbackID(callbackID);
Object result = invocationHandler.invoke(proxy, method, args);
return result;
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
Wed Aug 22 23:13:10 2007
@@ -132,6 +132,20 @@
/**
* @see
org.apache.tuscany.sca.core.invocation.ProxyFactory#createProxy(java.lang.Class,
+ * org.apache.tuscany.sca.runtime.RuntimeWire,
+ * org.osoa.sca.Conversation)
+ */
+ public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation, EndpointReference endpoint,
+ Object callbackID) throws ProxyCreationException {
+ if (interfaze.isInterface()) {
+ return interfaceFactory.createProxy(interfaze, wire, conversation,
endpoint, callbackID);
+ } else {
+ return classFactory.createProxy(interfaze, wire, conversation,
endpoint, callbackID);
+ }
+ }
+
+ /**
+ * @see
org.apache.tuscany.sca.core.invocation.ProxyFactory#createProxy(java.lang.Class,
* org.apache.tuscany.sca.runtime.RuntimeWire)
*/
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws
ProxyCreationException {
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
Wed Aug 22 23:13:10 2007
@@ -25,6 +25,7 @@
import org.apache.tuscany.sca.invocation.InvocationChain;
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.RuntimeWire;
import org.osoa.sca.NoRegisteredCallbackException;
@@ -71,7 +72,13 @@
throw new RuntimeException("No callback wire found for " +
msgContext.getFrom().getURI());
}
setConversational(wire);
- setEndpoint(msgContext.getFrom());
+ setCallbackID(msgContext.getCorrelationID());
+ EndpointReference from = msgContext.getFrom();
+ if (from != null && from.getCallbackEndpoint() != null) {
+ setEndpoint(from.getCallbackEndpoint());
+ } else {
+ setEndpoint(from);
+ }
//FIXME: can we use the same code as JDKInvocationHandler to select
the chain?
InvocationChain chain = getInvocationChain(method, wire);
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
Wed Aug 22 23:13:10 2007
@@ -49,6 +49,7 @@
private MessageFactory messageFactory;
private EndpointReference endpoint;
private RuntimeWire wire;
+ private Object callbackID;
public JDKInvocationHandler(MessageFactory messageFactory, Class<?>
proxyInterface, RuntimeWire wire) {
this.conversational = false;
@@ -132,14 +133,18 @@
return null;
}
- public void setConversation(Conversation conversation){
+ public void setConversation(Conversation conversation) {
this.conversation = (ConversationImpl)conversation;
}
- public void setEndpoint(EndpointReference endpoint){
+ public void setEndpoint(EndpointReference endpoint) {
this.endpoint = endpoint;
}
-
+
+ public void setCallbackID(Object callbackID) {
+ this.callbackID = callbackID;
+ }
+
protected Object invoke(InvocationChain chain, Object[] args, RuntimeWire
wire) throws Throwable {
Message msgContext = ThreadMessageContext.getMessageContext();
@@ -194,7 +199,7 @@
}
Invoker headInvoker = chain.getHeadInvoker();
- msg.setCorrelationID(msgContext.getCorrelationID());
+ msg.setCorrelationID(callbackID);
Operation operation = chain.getTargetOperation();
msg.setOperation(operation);
Interface contract = operation.getInterface();
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
Wed Aug 22 23:13:10 2007
@@ -53,20 +53,25 @@
* share conversation state so sets the conversaton object to null
*/
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws
ProxyCreationException {
- return createProxy(interfaze, wire, null, null);
+ return createProxy(interfaze, wire, null, null, null);
}
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation) throws ProxyCreationException {
- return createProxy(interfaze, wire, conversation, null);
+ return createProxy(interfaze, wire, conversation, null, null);
}
public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation, EndpointReference endpoint)
throws ProxyCreationException {
+ return createProxy(interfaze, wire, conversation, endpoint, null);
+ }
+ public <T> T createProxy(Class<T> interfaze, RuntimeWire wire,
Conversation conversation, EndpointReference endpoint,
+ Object callbackID) throws ProxyCreationException {
assert interfaze != null;
assert wire != null;
JDKInvocationHandler handler = new
JDKInvocationHandler(messageFactory, interfaze, wire);
handler.setConversation(conversation);
handler.setEndpoint(endpoint);
+ handler.setCallbackID(callbackID);
ClassLoader cl = interfaze.getClassLoader();
return interfaze.cast(Proxy.newProxyInstance(cl, new Class[]
{interfaze}, handler));
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
Wed Aug 22 23:13:10 2007
@@ -71,6 +71,23 @@
throws ProxyCreationException;
/**
+ * Creates a Java proxy for the given wire and accepts
+ * a conversation object to represent conversational state, an endpoint
+ * that should be used instead of the wire's target endpoint, and a
+ * callback ID.
+ *
+ * @param interfaze the interface the proxy implements
+ * @param wire the wire to proxy
+ * @param conversation the conversation object
+ * @param endpoint the target endpoint
+ * @param callbackID the callback ID
+ * @return the proxy
+ * @throws ProxyCreationException
+ */
+ <T> T createProxy(Class<T> interfaze, RuntimeWire wire, Conversation
conversation, EndpointReference endpoint,
+ Object callbackID) throws ProxyCreationException;
+
+ /**
* Creates a Java proxy for the service contract callback
*
* @param interfaze the interface the proxy should implement
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
Wed Aug 22 23:13:10 2007
@@ -18,6 +18,9 @@
*/
package org.apache.tuscany.sca.core.invocation;
+import java.util.UUID;
+
+import org.apache.tuscany.sca.assembly.Contract;
import org.apache.tuscany.sca.core.context.ConversationImpl;
import org.apache.tuscany.sca.core.factory.ObjectCreationException;
import org.apache.tuscany.sca.core.factory.ObjectFactory;
@@ -36,6 +39,7 @@
protected Class<T> interfaze;
protected RuntimeWire wire;
protected ProxyFactory proxyFactory;
+ protected Object callbackID;
// if the wire targets a conversational service this holds the
conversation state
private Conversation conversation = null;
@@ -54,21 +58,29 @@
this.wire = wire;
this.proxyFactory = proxyService;
- // look to see if the target is conversational and if so create
- // a conversation
if (wire != null) {
EndpointReference wireTarget = wire.getTarget();
+
+ // look to see if the target is conversational and if so create a
conversation
InterfaceContract contract = wireTarget.getInterfaceContract();
Interface contractInterface = contract.getInterface();
if (contractInterface != null &&
contractInterface.isConversational()) {
conversation = new ConversationImpl();
}
+
+ // if target has a callback interface, create a default callback ID
+ Contract targetContract = wireTarget.getContract();
+ if (targetContract != null &&
targetContract.getInterfaceContract().getCallbackInterface() != null) {
+ callbackID = createCallbackID();
+ }
}
}
public T getInstance() throws ObjectCreationException {
- return interfaze.cast(proxyFactory.createProxy(interfaze, wire,
conversation));
+ // the callback ID is passed by value, so any subsequent calls to
ServiceReference.setCallbackID()
+ // won't change the callback ID used by this proxy
+ return interfaze.cast(proxyFactory.createProxy(interfaze, wire,
conversation, null, callbackID));
}
public Conversation getConversation() {
@@ -87,6 +99,31 @@
*/
public ProxyFactory getProxyFactory() {
return proxyFactory;
+ }
+
+ /**
+ * @return the callback ID
+ */
+ public Object getCallbackID() {
+ return callbackID;
+ }
+
+ /**
+ * Customize the callback ID
+ *
+ * @param the callback ID
+ */
+ public void setCallbackID(Object callbackID) {
+ this.callbackID = callbackID;
+ }
+
+ /**
+ * Create a callback id
+ *
+ * @return the callback id
+ */
+ private String createCallbackID() {
+ return UUID.randomUUID().toString();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]