Thanks for your work. While waiting for the fix, I wil use @Callback and Stateless service to do a walk around.
Cheers Dong --- On Wed, 9/2/09, Simon Nash <[email protected]> wrote: > From: Simon Nash <[email protected]> > Subject: Re: GetCallbackReference return NULL for pomote service > To: [email protected] > Date: Wednesday, September 2, 2009, 6:23 PM > Simon Nash wrote: > > Dong Liu wrote: > >> Hi, > >> > >> It seems the API > ComponentContext.getRequestContext().getCallbackReference() > will not work if the service is pormte to composite service > and used by other compsite as implementation.composite. Here > are the composite files I tried: > >> > >> innercomposite: > >> <?xml version="1.0" encoding="UTF-8"?> > >> > >> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" > >> targetNamespace="http://inner" > name="InnerComposite"> > >> > >> <service name="Source" > promote="InnerSourceComponent" > interface="source.Source" > callbackInterface="source.SourceCallback" > > </service> > >> <component > name="InnerSourceComponent"> > >> > <implementation.java > class="source.SourceImpl"/> > </component> > >> </composite> > >> > >> OuterComposite: > >> <?xml version="1.0" encoding="UTF-8"?> > >> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" > >> targetNamespace="http://outer" > xmlns:inner="http://inner" > >> name="OuterComposite"> > >> > <component name="InnerComponent"> > >> > <implementation.composite > name="inner:InnerComposite"/> > >> <service > name="Source" interface="source.Source" > >> > callbackInterface="source.SourceCallback" > > > >> > </service> > >> </component> > >> <component > name="RequestComponent"> > >> > <implementation.java > class="request.RequestImpl"/> > >> > <reference name="sourceReference" > target="InnerComponent/Source" /> > >> </component> > </composite> > >> > >> SourceImpl.java: > >> @Service(Source.class) > >> @Scope("COMPOSITE") > >> public class SourceImpl implements Source{ > >> > >> final static Logger logger > = Logger.getLogger(SourceImpl.class); > >> private SourceCallback > cb; > >> private ComponentContext > ct; �...@context > public void setContext(ComponentContext > context) > >> { > >> > logger.debug("Set ComponentContext "); > >> ct = context; > >> } > >> /* > >> �...@callback > >> public void > setSourceCallback(SourceCallback sourceCallback) { > >> > logger.info("Set callback "); > >> cb = > sourceCallback; > >> } > >> */ > >> > public void clientMethod(String arg) { > >> > logger.debug("SOurce clientMehod"); > >> cb = > (SourceCallback) > ct.getRequestContext().getCallbackReference().getService(); > >> > cb.receiveResult("Callbak response "+ > arg); > >> } > >> } > >> > >> > >> When method clientMethod() is invoked, the > getCallbackReference only reutrns NULL. > >> > >> However, the callbackReference is able to be > injected by using @Callback annotation. > >> > >> > >> > >> Would you like to check my composites/java files > to help me fimd out where the error happens. > >> > >> > >> Thanks > >> Dong > >> > >> > > Hi Dong, > > Thans for reporting this problem. Your > composites and Java files are > > fine, and this is a bug in the Tuscany runtime. > I don't yet know what > > is causing it, but while debugging it I have found 3 > other problems > > so far: > > > > 1. When using a local callback interface > together with reference or > > service promotion, the Tuscany > runtime produces a warning message for > > interface incompatibility even > though the interface is compatible. > > I have created TUSCANY-3251 to > track this. > > > > 2. The warning messages for incompatible > references and services are > > worded incorrectly. They > include the name of the component reference > > or service but the message > wordings refer to this as a composite > > reference or service. I > have created TUSCANY-3252 to track this. > > > > 3. The implementation-composite sample and the > itest/recursive test case > > don't verify that the > callbacks were received. If the callbacks are > > not received because of null > pointer exceptions, the tests appear to > > pass even though they have > failed. I have created TUSCANY-3253 to > > track this. > > > > I am still looking into the cause of the null return > value from > > getCallbackReference(). I will post more > information when I have it. > > > > Simon > > > > > > > I have found the cause of the problem with null being > returned by > getCallbackReference() for composite implementations. > Some code needs > to be added to ComponentServicePromotionBuilderImpl.java > and > CompositeServicePromotionBuilderImpl.java. I have > created TUSCANY-3254 > to track this. > > Simon > >
