submarine.core
Interface ListeningFunction

All Superinterfaces:
SubmiterAware, XMLConfigurable
All Known Implementing Classes:
InternalListener, XMLListener, SubMLListener

public interface ListeningFunction
extends XMLConfigurable, SubmiterAware

Cette interface est implémentée par des classes qui soumettent des messages au système EAI en attendant des requêtes de leurs clients.
Par exemple on peut imaginer un SoapListener, qui écoute sur un port tcp/ip l'arrivée de messages à destination du BusEAI.
Autre exemple, Un JMSListener qui est client de notifications d'une file de messages JMS et qui transmet ces messages au Systeme EAI.

Quand utiliser ? :

Seul EAISystem utilise cette interface pour initialiser les ListeningFunctions déclarées dans la configuration, puis les lancer dans un Thread (voir création d'une ListeningFunction, et lancement d'une ListeningFunction.

Quand implémenter ? :

Cette interface doit être implémentée si vous devez effectuer un connecteur sur un système tiers qui oblige le programme à se mettre en attente d'une notification. Dans d'autre cas vous préfèrerez PoolingFunction.
Cette interface hérite de XMLConfigurable pour son initialisation à partir d'un élément XML. Le schéma XML de l'initialisation est totalement libre, elle doit seulement être limitée à cet élément et à ses descendants.
Cette interface hérite aussi de SubmiterAware, qui permettra à votre connecteur de recevoir juste après son initialisation la référence sur l'interface qui permettra la soumission de messages à l'EAI.


Method Summary
 void listen()
          Se met en attente d'évènements externes pour toute la durée de vie de la ListeningFunction.
 
Methods inherited from interface submarine.core.XMLConfigurable
init
 
Methods inherited from interface submarine.core.SubmiterAware
setSubmiter
 

Method Detail

listen

public void listen()
Se met en attente d'évènements externes pour toute la durée de vie de la ListeningFunction.
L'implémentation de listen doit être bloquante et ne doit se terminer que dans l'un des deux cas suivants: Pour toutes autres raison (Exception non bloquante, timeout, ...) la ListeningFuntion doit rester active. La ListeningFunction doit tester de manière régulière (5 sec au max) l'état d'interruption de son Thread!
En d'autre mots, il est conseillé d'implémenter une ListeningFunction de la manière suivante:
 	while ( !Thread.interrupted() ) try { 
 	// votre code ici ... durant moins de 5 secondes.
 	} catch( Exception e ) {
 	// Traitement de l'exception
 	}
 

Submarine project. free distribution of this software must include the opensource licence.
Guénolé de Cadoudal.