What's the implementation of Second?

On 12 Jan 2007, at 13:19, Jean-Marie Galliot wrote:


Sorry, I made a mistake in copying the code. The second datalink is in the
element Second like this:

<site>
    <arrival destid="Start"/>

    <element id="Start" url="/start" implementation="com.test.Start">
        <exit name="started" />
        <flowlink srcexit="started" destid="Second">
                <datalink srcoutput="counter" destinput="counter"/>
        </flowlink>
    </element>

<element id="Second" url="/second" implementation="com.test.Second">
        <input name="counter" />
<datalink srcoutput="counter" destinput="counter" destid="Second" />
        <submission name="increase">
                <param name="increment" />                              
        </submission>
    </element>


Jean-Marie Galliot wrote:

Hi,

I have this simple site :

<site>
    <arrival destid="Start"/>

    <element id="Start" url="/start" implementation="com.test.Start">
        <exit name="started" />
        <flowlink srcexit="started" destid="Second">
                <datalink srcoutput="counter" destinput="counter"/>
        </flowlink>
<datalink srcoutput="counter" destinput="counter" destid="Second"
/>
    </element>

<element id="Second" url="/second" implementation="com.test.Second">
        <input name="counter" />
        <submission name="increase">
                <param name="increment" />                              
        </submission>
    </element>

</site>

And this is the implementation of the element Start:

public class Start extends Element {
        
        public void initialize() {
                System.out.println("Start.initialize");
        }
        
        public int getCounter() {
                System.out.println("Start.getCounter() = 3");
                return 3;
        }
        
        public void processElement() {
                System.out.println("Start.processElement()");
                exit("started");
        }
}

The output trace is:
Start.initialize
Start.processElement()
Start.getCounter() = 3
Start.getCounter() = 3
Start.getCounter() = 3
Guess.setCounter(3)
Guess.processElement()

Could you explain why getCounter() is called three times?

Also, what I am trying to do is having this element Start initializing and
transmitting a value to element Second.
For the time being it'a a simple integer but it will be eventually a bean.

Then, the subsequent requests will be processed by element Second. At each
request, the value originally initialized by the element Start will
evolve, so It will use a datalink from element Second to itself to keep
the state like you suggested in the example : statefull components.

But the problem is :

Apparently, each time the element Second is processed (and not only the first time) the method getCounter of element Start is called and the value
is set into element Second.

I can understand why but how can we accomplish this simple behavior :

Element second is initialized with a value from Element Start. But after
that, the value is modified iteratively in element Second by the very
process of subsequent requests, without the value being reinitialized each
time by the element Start?

I can imagine two datalinks with two distincts variables. Then element
Second has to decide that the second variable (the one coming from
himself) has precedence over the one coming from element Start. But it
looks unnatural.

Can you help?

Tks


--
View this message in context: http://www.nabble.com/Datalink- semantics-tf2965628.html#a8297430
Sent from the RIFE - users mailing list archive at Nabble.com.

_______________________________________________
Rife-users mailing list
Rife-users@uwyn.com
http://lists.uwyn.com/mailman/listinfo/rife-users


--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com


_______________________________________________
Rife-users mailing list
Rife-users@uwyn.com
http://lists.uwyn.com/mailman/listinfo/rife-users

Reply via email to