submarine.core
Class Channel

java.lang.Object
  |
  +--submarine.core.Channel
All Implemented Interfaces:
Finalizable, java.lang.Runnable

public class Channel
extends java.lang.Object
implements java.lang.Runnable, Finalizable

Un Channel est l'implémentation d'une chaîne complète de transformation.

Un Channel réalise les taches suivantes :

Un Channel ne doit pas être directement utilisé. L'EAISystem se charge de l'instancier et de l'initialiser à partir d'un objet ChannelInfos. Il existe deux type d'utilisation de Channel :


Inner Class Summary
private  class Channel.ErrorListener
          Classe locale pour la réception des erreurs de transformations XSL.
 
Field Summary
private  EAISystem eai
          L'instance de EAISystem gérant ce Channel.
 ChannelInfos infos
          Les informations qui définissent le Channel. initilisée par init(ChannelInfos).
 java.lang.String name
          Le nom du Channel.
private  Serializer parser
          L'instance de type Serializer utilisé pour l'étape de parsing.
private static int S_DONE
           
private static int S_INIT
           
private static int S_PARSE
           
private static int S_SERIALIZE
           
private static int S_WRITE
           
private static int S_XSLTRANSFORM
           
private  Serializer serializer
          L'instance de type Serializer utilisé pour l'étape de serialisation.
 int step
          Gives the current step in executing the channel process. usefull to build a string message on failure.
static java.lang.String[] stepMessages
          Gives the equivalent messages string to the steps.
private  WritingFunction writer
          L'instance de WritingFunction utilisé pour émettre le message vers le destinataire.
private  java.util.Vector xslMessages
          messages de type String remplis par le ErrorListener et vidé avant chaque traitement
private  javax.xml.transform.Templates xslTemplate
          le template pour la transformation.
 
Constructor Summary
Channel(EAISystem _eai)
          Contructeur utiliser par EAISystem pour créer une instance vide.
 
Method Summary
 void finalize()
          Appelée sur une instance de PoolingFunction ou de WritingFunction avant la libération de celle-ci.
 void init(ChannelInfos infos)
          Initialise le Channel pour l'utilisation de la fonction submit(java.lang.Object, submarine.core.RouteInfos, submarine.core.Message.MsgContext, submarine.core.ChannelInfos).
 void run()
          Boucle infinie de traitement des messages de EAISystem.waitingQueue la file d'attente des messages asynchrones.
private  org.w3c.dom.Document serializeObject(Serializer ser, Message.MsgContext context, java.lang.Object o)
          Encapsulate a call to a Serializer to test whether the serializer need the context
private  java.lang.Object serializeXML(Serializer ser, Message.MsgContext context, org.w3c.dom.Document doc)
          Encapsulate a call to a Serializer to test whether the serializer need the context
 java.lang.Object submit(java.lang.Object message, RouteInfos infos, Message.MsgContext context, ChannelInfos ChannelInfos)
          Implémente la transformation d'un message Object vers Object en passant par XML.
 
Methods inherited from class java.lang.Object
, clone, equals, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

name

public java.lang.String name
Le nom du Channel. Voué à disparaître au profit d'un getName(). Ne pas modifier manuellement, utiliser plutôt init()

S_INIT

private static final int S_INIT

S_PARSE

private static final int S_PARSE

S_XSLTRANSFORM

private static final int S_XSLTRANSFORM

S_SERIALIZE

private static final int S_SERIALIZE

S_WRITE

private static final int S_WRITE

S_DONE

private static final int S_DONE

step

public int step
Gives the current step in executing the channel process. usefull to build a string message on failure.

stepMessages

public static final java.lang.String[] stepMessages
Gives the equivalent messages string to the steps.

xslMessages

private java.util.Vector xslMessages
messages de type String remplis par le ErrorListener et vidé avant chaque traitement

infos

public ChannelInfos infos
Les informations qui définissent le Channel. initilisée par init(ChannelInfos). Voué à disparaître au profit d'un getChannelInfos()

xslTemplate

private javax.xml.transform.Templates xslTemplate
le template pour la transformation. Peut être null si l'initialisation ne peut pas trouver le fichier xsl spécifié.

parser

private Serializer parser
L'instance de type Serializer utilisé pour l'étape de parsing. Cette instance est spécifique à ce Channel car créé lors de init(ChannelInfos).

serializer

private Serializer serializer
L'instance de type Serializer utilisé pour l'étape de serialisation. Cette instance est spécifique à ce Channel car créé lors de init(ChannelInfos).

writer

private WritingFunction writer
L'instance de WritingFunction utilisé pour émettre le message vers le destinataire. Attention, cette instance peut être partagée par plusieurs Channel.

eai

private EAISystem eai
L'instance de EAISystem gérant ce Channel. Définie lors du constructeur Channel(EAISystem).
Constructor Detail

Channel

public Channel(EAISystem _eai)
Contructeur utiliser par EAISystem pour créer une instance vide. Une telle instance ne peut pas être utilisée telle quel. Elle doit forcément être initialisé par un appel à init(ChannelInfos)
Parameters:
_eai - Le EAISystem qui crée le Channel
Method Detail

serializeXML

private java.lang.Object serializeXML(Serializer ser,
                                      Message.MsgContext context,
                                      org.w3c.dom.Document doc)
                               throws java.lang.Exception
Encapsulate a call to a Serializer to test whether the serializer need the context

serializeObject

private org.w3c.dom.Document serializeObject(Serializer ser,
                                             Message.MsgContext context,
                                             java.lang.Object o)
                                      throws java.lang.Exception
Encapsulate a call to a Serializer to test whether the serializer need the context

submit

public java.lang.Object submit(java.lang.Object message,
                               RouteInfos infos,
                               Message.MsgContext context,
                               ChannelInfos ChannelInfos)
Implémente la transformation d'un message Object vers Object en passant par XML. L'algorithme utilisé suit les phase d'un Channel décrite en entête
Parameters:
message - Le message d'entré soumis au Channel.
infos - Les informations de routages de ce message. Seul infos.sync est utilisé actuellement dans cette fonction.
context - Le contexte de soumission du message. contient surtout le docId. Pourraît contenir par la suite la transaction.
Returns:
java.lang.Object Si les transformations se déroulent correctement, cette fonction retourne le retour du serializer spécifié dans ce Channel ou le retour de WritingFunction.putSyncDocument(submarine.core.Message.MsgContext, java.lang.Object) dans le cas d'une soumission synchrone. Si une exception est levée lors de ce traitement, elle est retournée ici et non pas levée.

run

public void run()
Boucle infinie de traitement des messages de EAISystem.waitingQueue la file d'attente des messages asynchrones. Si le thread est interrompu par Thread.interrupt(), la boucle infinie s'arrête.
Specified by:
run in interface java.lang.Runnable

init

public void init(ChannelInfos infos)
          throws java.lang.Exception
Initialise le Channel pour l'utilisation de la fonction submit(java.lang.Object, submarine.core.RouteInfos, submarine.core.Message.MsgContext, submarine.core.ChannelInfos).
Parameters:
infos - Les informations de configuration d'un Channel.
Throws:
java.lang.Exception -  

finalize

public void finalize()
Description copied from interface: Finalizable
Appelée sur une instance de PoolingFunction ou de WritingFunction avant la libération de celle-ci.
Specified by:
finalize in interface Finalizable
Overrides:
finalize in class java.lang.Object

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