Hi,

By the SCA spec, when a deployable composite is added to the SCA domain, it's "included" by the logical SCA domain composite. As a result, all top-level components must have unique names.

Thanks,
Raymond

----- Original Message ----- From: "Huang Kai" <[EMAIL PROTECTED]>
To: <[email protected]>
Cc: "???" <[EMAIL PROTECTED]>; "jiaoly" <[EMAIL PROTECTED]>; "??" <[EMAIL PROTECTED]>
Sent: Thursday, May 31, 2007 2:03 AM
Subject: Re: (SCA)How can get the service by composite service name


I understood. It seems so.

While this raise another question: Tuscany seemed skipped the 'composite' layer and direct access component service, then how to access services in two composites within same domain?

like this:

--------------------------------------------------------------------

CompositeA.composite:

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
targetNamespace=http://www.globalfinance.com/NASDAQ";
name="NASDAQ">

<component name="StockQuoteServiceComponent">

   <implementation.java class="com.ibm.stock.StockQuoteServiceImpl"/>

</component>

</composite>

--------------------------------------------------------------------

CompositeB.composite:

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
targetNamespace=http://www.globalfinance.com/HongKong";
name="HongKong">

<component name="StockQuoteServiceComponent">

   <implementation.java class="com.lenovo.stock.StockQuoteServiceImpl"/>

</component>

</composite>

-------------------------------------------------------------------------------

When these two composite all loaded in one SCADomain.

How do I get StockQuoteService supplied by CompositeB or CompositeA?

How can SCADomain.getService(Class, String) handle such name conflict?



----- Original Message ----- From: "Jean-Sebastien Delfino" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, May 30, 2007 12:24 PM
Subject: Re: (SCA)How can get the service by composite service name


Comments inline.

Huang Kai wrote:
Yes, the codes seems does so.
But it's rather strange to access a service not by 'service name' exposed by compoiste, but by directly accessing component nested in a composite.


Here's a little more info that will help explain that design:

- When a composite is added to a domain, it is actually included in it,
so there is really no nesting. Components declared in the composite
become top level components as if they had been directly declared in the
composite describing the entire domain. This process is described in the
SCA assembly spec 1.0 in section 1.10.6.1:
1.10.6.1 add To Domain-Level Composite
3076 This functionality adds the composite identified by a supplied URI
to the Domain Level
3077 Composite. The supplied composite URI must refer to a composite
within a installed contribution.
3078 The composite's installed contribution determines how the
composite’s artifacts are resolved
3079 (directly and indirectly). The supplied composite is added to the
domain composite with
3080 semantics that correspond to the domain-level composite having an
<include> statement that
3081 references the supplied composite. All of the composite’s
components become top-level
3082 components and the services become externally visible services (eg.
they would be present in a
3083 WSDL description of the domain).

- Services offered by components in the composite become visible, and
can be addressed in a form consistent with what you would say in the
target of an SCA wire or reference, as described in section 1.6.4 of the
SCA assembly spec:
1613 The reference element of a component and the reference element of a
service has a list
1614 of one or more of the following wire-target-URI values for the
target, with multiple values
1615 separated by a space:
1616 • <component-name>/<service-name>
1617 o where the target is a service of a component. The specification
of the service name
1618 is optional if the target component only has one service with a
compatible interface

As the spec says "the target is a service of a component". A service is
not really offered by a composite, it is offered by a component. A
composite service declaration is just a statement that a service offered
by a component should be promoted / made visible to the next level of
composition, when the particular composite is used as a (composite)
component implementation (using an <implementation.composite> element).
The service promoted by the composite service will then be offered by
that new component.

Also, some components only offer one service for a given interface. In
that case you don't have to specify the service name, the component name
is sufficient to get the service matching the requested interface.

So in your particular example:
- CalculatorServiceComponent is a top-level component.
- getService(CalculatorService.class, "CalculatorServiceComponent") is a
short form for getService(CalculatorService.class,
"CalculatorServiceComponent/CalculatorService"), you don't need to
specify the service name as CalculatorServiceComponent only provides one
service.

Hope this helps.

----- Original Message ----- From: "Simon Laws" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, May 25, 2007 10:03 PM
Subject: Re: (SCA)How can get the service by composite service name



Hi Tony,

I'm assuming you are using the sample CalculatorClient style code try to access the service, i.e. the part that uses the scaDomain to get a local
reference to a component service.

       CalculatorService calculatorService =
           scaDomain.getService(CalculatorService.class,
"CalculatorServiceComponent");

I just took a look at the code and currently the code behind this method only looks at the components available in the domain composite when looking for the named service, i.e. It's looking for a component and a service it provides rather than a composite service that refers to a component service.
The term service is a little confusing in this regard in my opinion.

Regards

Simon

>


--
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to