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]