RE: how to terminate components

"Guijarro, Julio" <[email protected]>
Newsgroups gmane.comp.java.smartfrog.user
Message-ID <[email protected]>
Hi Andreas,


> -----Original Message-----
> From: smartfrog-support-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org [mailto:smartfrog-
> [email protected]] On Behalf Of Andreas Unterkircher
> Sent: 26 July 2005 10:20
> To: smartfrog-support-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> Subject: [Smartfrog-support] how to terminate components
> 
> 
> Hello,
> 
> I'm wondering which is the "best" way to asynchronously terminate a
> component. 


To terminate a component asynchronously the best way is to use the
TerminatorThread with the right Termination Record properly configured.

Ex.

TerminatorThread terminator = new TerminatorThread(targetComponent,
              excp, componentId).quietly();
// start the thead
terminator.start();


Or

TerminatorThread terminator = new TerminatorThread(primTarget,
terminationRecord).detach();

Termainator.start();


Say I have
> some failure within sfStart and I want to terminate the component
> immediately. I could call sfTerminate(...). But then I found out that
I
> have to make the subsequent executing lines of sfStart
> dependent on sfIsTerminating(). So far I understand sfTerminate starts
a
> TerminatorThread thus termination is not "immediately"

[1] Standard sfTerminate() does not use any TerminatorThread but
Compound will terminate its children asynchronously unless otherwise
specified. This is because the complete shutdown of a distributed system
when an error happened can be very tricky.

If you add the attribute "sfSyncTerminate true;" before calling
sfTerminate() then the termination of its children will be synchronous.
Be aware that there is no termination watchdog in Compound and
therefore, the termination can be locked down if any of its children
does not complete termination.


>. On the other hand
> I could
> throw a SmartFrog exception. But this does not seem appropiate.

> I understand that SF exceptions are for SF inherent errors and not for
> components failing for other reasons. What does throwing an SF
exception
> mean ? Would it also terminate other Compounds resp. components then
the
> one which threw the exception ?

If you throw an exception the Termination Record used will be tagged:
ABNORMAL. Abnormal termination means and error happened and Sequence and
Parallel, for example, will clean up. For a Sequence to progress
normally, its children have to terminate normally.

> 
> To sum up: I want to terminate a component immediately on some failure
> encountered during sfStart. Therefore I use sfTerminate in conjuntion
with
> sfIsTerminating(). Is this the right way to do this ?

If you want to initiate termination from inside a lifecycle method, you
must use a TerminatorThread. Lifecycle methods are synchronized and
calling sfTerminate directly could cause a deadlock in certain
circumstances (ex. remote parent). See [1] above for synchronous
termition.

It you throw and exception then the exception will be trapped, the
component terminated appropriately and "abnormal" termination reported.
Then is up to its parent lifecycle to determine what happens next. As I
said before, Compound, Sequence and Parallel will clean up because it is
assumed that something went wrong. 


Julio 
> 
> Thanks for your advice,
> Andreas
> 
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> Smartfrog-support mailing list
> Smartfrog-support-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> https://lists.sourceforge.net/lists/listinfo/smartfrog-sup


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.