On 10/5/07, Rajini Sivaram <[EMAIL PROTECTED]> wrote:
>
> Simon,
>
> The service that the reference is wired to is not in the same JVM. At the
> moment, the component definition looks like this:
>
>     <composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
>             targetNamespace="http://osgidistribution";
>             name="helloworldreference">
>
>             <component name="HelloWorldServiceComponent">
>                    <implementation.java class="helloworld.DummyImpl" />
>                    <reference name="helloWorldService">
>                         <interface.java interface="
> helloworld.HelloWorldService" />
>                         <binding.ws wsdlElement="
> http://helloworld#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/<
> http://helloworld/#wsdl.port(HelloWorldService/HelloWorldSoapPort)"/>
> >
>                    </reference>
>             </component>
>
>    </composite>
> I would like to get hold of the proxy corresponding to the reference and
> add
> it to the OSGi registry so that an OSGi bundle which has no knowledge of
> SCA
> can lookup the proxy in its OSGi registry and invoke the service through
> this proxy. The OSGi bundle which wants to use this reference is not
> running
> in an SCA runtime. It is running in an OSGi runtime and uses its normal
> OSGi
> registry lookup (with no remote service support) to resolve its
> references.
> We would like to use Tuscany to parse the metadata corresponding to the
> reference element above and create a proxy for the remote service which is
> then registered with the OSGi registry.
>
> Which code in Tuscany should I look at to create a reference on the fly?
>
>
> Thank you...
>
> Regards,
>
> Rajini
>
>
> On 10/5/07, Simon Laws <[EMAIL PROTECTED]> wrote:
> >
> > On 10/4/07, Rajini Sivaram <[EMAIL PROTECTED]> wrote:
> > >
> > > Hello,
> > >
> > > I would like to use Tuscany as a library (rather than a runtime) to
> > parse
> > > a
> > > reference or service definition containing bindings, and obtain a
> proxy
> > to
> > > a
> > > service.
> > >
> > > At the moment, I create a composite containing a dummy component with
> a
> > > reference, and then create an SCA domain, add a contribution
> containing
> > > the
> > > composite, and then obtain the reference and get a proxy through the
> > > runtimeWire. Apart from being very messy, this requires a large number
> > of
> > > Tuscany modules to be in the classpath.
> > >
> > > Is there a better way for me to use the modules in Tuscany -
> > specifically
> > > the bindings modules?
> > >
> > > Thank you...
> > >
> > > Regards,
> > >
> > > Rajini
> > >
> > Hi Rajini
> >
> > Is the service you are trying to get a reference to local to the JVM you
> > are
> > running in?
> >
> > If yes, what runtime is the component/service running it?
> >
> > If no,  then the tuscany code should already be able to construct a
> > reference on the fly for you without you having to go through the
> process
> > of
> > creating the dummy component. The code in getService looks in the local
> > model and if it can't find the required service creates a unresolved
> > reference which will be resolved when you try to use it. This relies on
> > using the distributed domain support.
> >
> > Can you say a bit more about the scenario you are working with?
> >
> > Regards
> >
> > Simon
> >
>
I'm going to talk in terms of the new domain and node apis. Within a given
domain I would expect you to be able to get hold of the domain and ask it
for a reference to a service that exists in the domain. The reference
returned with hide whether that service is local or remote.  So that is the
intention, if you look at some of the code in the node implementation you
can see this at work..

http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java

Here you see that a number of nodes are created and contributions are added
and toward the end you see local references being extracted. Right at the
end you see a reference being retrieved for a service that is not in the
node being asked.

addServiceB = nodeA.getDomain().getService(AddService.class,
"AddServiceComponentB");


The domain that the node belongs to is retrieved from the node and the
domain is asked for a reference to the required service. In this case the
AddServiceComponentB is not in nodeA so a remote reference is created.

Now this doesn;t necessarily meet your requirements as I had to create a
node here. As part of the new interfaces there is a domain finder mechanism

  SCADomainFinder domainFinder = SCADomainFinder.newInstance();
  SCADomain domain = domainFinder.getDomain(domainName);

This provides an SCADomain interface that you can then call getService on.
The resulting reference can be stored somewhere (your OSGi registry) for
future use. The slight drawback is that this doesn't work properly just yet
(a little more work required). However if it did work would this fit the
bill?

Regards

Simon

Reply via email to