You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@tuscany.apache.org by Simon Nash <na...@apache.org> on 2009/08/01 22:34:29 UTC

Re: ServiceReference and accessing SCA Component from non SCA-client

Hi Antonio,
The only supported way to do this is to use the SCAClient API
as (the other) Simon has suggested.  It looks like you were just
"lucky" that the client invocation worked when you returned a
CService proxy to your non-SCA code.

   Simon

Antonio Mirarchi wrote:
> Thank for your answers, for the first point i have another questions: if 
> component is running, is it  possible to obtain a reference to its 
> service from a non sca-client code?
> The second  point  is connect to the firstm, since i cannot ( or i don't 
> know) to  obtain a reference to service from non  sca client of a 
> component that is running (called A) , i launch from non sca client a 
> component (called B) that use the injection to use the first component 
> (A), more accurately B use A to obtain a ServiceReference of another 
> Component (C)  and pass this reference to the rest of non sca 
> method/code of the library, if i use this reference in B method it's all 
> ok, but if I use this reference out of B method i get the error, i post 
> the method example
> Non Sca Client Code:
> 
>  nodelauncher.createnodeFromURL(...) //launch B
> 
> ServiceReference Cserv=B.getCreferencefromA();
> Cservice C=(Cservice) Cserv.getService(); <----- this get error 
> NullpointerException
>  
> the B.getCreferenceFromA() code is something like this
> 1 row:   ServiceReference temp= A.getCServRef();
> 2 row:   return(temp);
> 
> but if i modify the code like this
> 
> 1 row:   ServiceReference temp= A.getCServRef();
> 2 row:  Cservice C=(Cservice) Cserv.getService();
> 3 row: return(temp); //is not an error i return temp
> 
> all it's ok that i don't know is how can the presence of 2 row eliminate 
> the NullpointerException.
> 
> Thanks
> 
> 2009/7/23 Simon Laws <simonslaws@googlemail.com 
> <ma...@googlemail.com>>
> 
>     Hi Antonio
> 
>     ..snip
>      > but i don't know how obtained the "context". Is there an api that
>     i've not
>      > seen or an example how to do it? thanks a lot.
>      >
> 
>     There are two ways to access SCA component from non-SCA applications.
> 
>     Firstly you could put a remote binding, like web services or RMI, on
>     the SCA service and then access the service remotely from you client.
>     I'm assuming in this case that you've started a Tuscany node from the
>     command line to run the application
> 
>     Secondly, if you're starting a node programmatically, then we provide
>     a client API for retrieving proxies to local SCA services.
>     Communication between the proxy and the service will use the SCA
>     binding in this case. You can see an example of how to get a proxy
>     using the Client API here
>     (http://svn.apache.org/repos/asf/tuscany/branches/sca-java-1.x/samples/calculator/src/test/java/calculator/CalculatorTestCase.java).
>     This example also shows the node being created programmatically using
>     the node factory.
> 
>      >
>      > 2) I have this scenario: 3 Component A, B,C  C send is
>     ServiceReference to B
>      > (Cref=context.createSelfReference(..) and
>     B.registerReference(Cref)), A is a
>      > part of code non SCA for example ia have a library that when it's
>     necessary
>      > launch A compoentn (nodelauncher.CreateNode(...)) A receive a
>     Cref from B,
>      > if A use Cref  to access C service it's Ok, bui if i use Cref in
>     other
>      > library method (example:  ReceivedCref=A.getCref();
>      > ReceiveCref.getService().somemethod()) i receive a
>      > java.lang.NullPoinerException. How can i use a Cref without using
>     A services
>      > in other library method if is it  possible?
>      >
> 
>     I think it should be possible assuming that the other library has
>     access to the Tuscany libraries. Where is the null pointer happening?
> 
>     Regards
> 
>     Simon
> 
>