Sorry, I took the wrong class name. But the story stays. 

In this case is that the "salutation" property is injected. It is configured to 
two different values by the two components. Since Tuscany interprets the spec 
in the 1st way, and there is a single java object 
(sample.HelloworldDelegateImpl) , the field got injected twice and the later 
one overrode the first one. That's why you only see the same salutation.

Thanks,
Raymond 


From: Vamsavardhana Reddy 
Sent: Wednesday, February 04, 2009 12:47 PM
To: [email protected] 
Subject: Re: Callback problem with COMPOSITE scoped implementation


Raymond,

HelloworldDelegateComponent and HelloworldDelegateComponent2 are using the 
implementation class sample.HelloworldDelegateImpl. Both these components are 
invoking a service from HelloworldXComponent which uses implementation class 
sample.HelloworldImpl.  Each of these components are using a single instance 
per component of the respective implementation classes through out the scope of 
the composite. Let us say
1. HelloworldDelegateComponent is using instance A of HelloworldDelegateImpl
2. HelloworldDelegateComponent2 is using instance B of HelloworldDelegateImpl
3. HelloworldXComponent is using instance C of HelloworldImpl.

The problem is that
a) when A is invoking service from C, C.callback should be injected with the 
callback service provided by A and
b) when B is invoking service from C, C.callback should be injected with the 
callback service provided by B

Even though it is one instance of HelloworldImpl that is used, the callback 
field should keep changing depending on who is invoking the service.  Don't 
know if it is feasible.


On Thu, Feb 5, 2009 at 12:49 AM, Raymond Feng <[email protected]> wrote:

  Hi,

  This is interesting. In your case, you have two components 
HelloworldDelegateComponent and HelloworldDelegateComponent2 that use the same 
java implementation class: sample.HelloworldImpl which is composite scoped. Now 
the question is how to interpret the following statement in the SCA java spec:

  295 1.2.4.3. Composite scope
  296 All service requests are dispatched to the same implementation instance 
for the lifetime of the containing
  297 composite. The lifetime of the containing composite is defined as the 
time it becomes active in the runtime
  298 to the time it is deactivated, either normally or abnormally.

  There are two ways:

  1) There is going to be one instance of sample.HelloworldImpl (A) that are 
shared by HelloworldDelegateComponent and HelloworldDelegateComponent2. 
Requests to both components will be dispatched to A.

  2) There are going to be two instances of sample.HelloworldImpl (A & B), one 
for HelloworldDelegateComponent and the other for HelloworldDelegateComponent2. 
Request to HelloworldDelegateComponent will be dispatched to  A while requests 
to HelloworldDelegateComponent2 will be dispatched B.

  It seems that Tuscany works in the 1st way. We need clarifications from the 
spec group.

  Thanks,
  Raymond

  From: Vamsavardhana Reddy
  Sent: Wednesday, February 04, 2009 8:30 AM
  To: [email protected]
  Subject: Callback problem with COMPOSITE scoped implementation 



  I have a composite with three components as given below:

  <composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
           targetNamespace="http://sample";
           name="HelloworldDelegate">

    <component name="HelloworldXComponent">
        <implementation.java class="sample.HelloworldImpl"/>
    </component>

    <component name="HelloworldDelegateComponent">
        <implementation.java class="sample.HelloworldDelegateImpl"/>
        <service name="HelloworldDelegate">
            <binding.ws uri="http://localhost:8080/tuscany/HelloworldDelegate"/>
        </service>
        <reference name="helloworld" target="HelloworldXComponent"/>
        <property name="salutation">Monsieur</property>
    </component>

    <component name="HelloworldDelegateComponent2">
        <implementation.java class="sample.HelloworldDelegateImpl"/>
        <service name="HelloworldDelegate">
            <binding.ws 
uri="http://localhost:8080/tuscany/HelloworldDelegate2"/>
        </service>
        <reference name="helloworld" target="HelloworldXComponent"/>
        <property name="salutation">Mr.</property>
    </component>
  </composite>

  HelloworldImpl provides a Helloworld service and requires a 
HelloworldCallback callback service.
  HelloworldDelegateImpl provides HelloworldDelegate service and 
HelloworldCallback service. There are two components, namely 
HelloworldDelegateComponent (with salutation "Monsieur") and 
HelloworldDelegateComponent2 (with salutation "Mr.").  Both these components 
invoke Helloworld service provided by HelloworldXComponent.
  Both the implementations are COMPOSITE scoped.

  When I use the HelloworldDelegate service from HelloworldDelegateComponent 
the output I see in the console is the following:
    HelloworldDelegateComponent: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@28e2f1).sayHello: vamsi
    HelloworldXComponent: 
HelloworldImpl(sample.helloworldi...@10076aa).sayHello: vamsi
    HelloworldDelegateComponent: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@28e2f1).whoIs: vamsi

  and the message got back is "Hello Monsieur vamsi".
  ------------------------------
  When I use the HelloworldDelegate service from HelloworldDelegateComponent 
the output I see in the console is the following:
    HelloworldDelegateComponent2: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@146e74b).sayHello: vamsi
    HelloworldXComponent: 
HelloworldImpl(sample.helloworldi...@10076aa).sayHello: vamsi
    HelloworldDelegateComponent: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@28e2f1).whoIs: vamsi

  and the message got back is "Hello Monsieur vamsi".  I was expecting "Hello 
Mr. vamsi".

  Notice that in the second case, the callback service is called from 
HelloworldDelegateComponent instead of HelloworldDelegateComponent2. Is this 
the expected behaviour?
  -----------------

  If I make HelloworldImpl as STATELESS scoped (which is the default), then I 
am seeing that the callback service is invoked on the same component that is 
invoking the Helloworld service. The following is the output:

  HelloworldDelegateComponent: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@1c704a7).sayHello: vamsi
  HelloworldXComponent: HelloworldImpl(sample.helloworldi...@1af0f92).sayHello: 
vamsi
  HelloworldDelegateComponent: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@1c704a7).whoIs: vamsi
  Hello Monsieur vamsi

  HelloworldDelegateComponent2: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@61dec0).sayHello: vamsi
  HelloworldXComponent: HelloworldImpl(sample.helloworldi...@4f3d72).sayHello: 
vamsi
  HelloworldDelegateComponent2: 
HelloworldDelegateImpl(sample.helloworlddelegatei...@61dec0).whoIs: vamsi
  Hello Mr. vamsi

  What am I missing?

  ++Vamsi 




-- 
Vamsi

Reply via email to