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 <[email protected] <mailto:[email protected]>>

    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



Reply via email to