Système Automatique de Surveillance Jean-Paul Gressard - Jacques Lacote - Laurent Marchand - Xavier Nicolovici Copyright 2003 Package sas.util Classes de base du système SAS. Ce package regroupe l'ensemble des classes de bases utilisées dans le développement du système SAS. Ces classes trouvent leurs paramètres dans un unique fichier de configuration, le fichier sas.properties situé par défaut dans le répertoireconfig, respectant le format nécessaire aux objetProperties p> <br> <table width="100%" border=1> <tr> <th colspan=3>Description des paramètres du fichier de configuration</th> </tr> <tr> <th>Paramètre</th> <th>Commentaires</th> <th>Status</th> </tr> <tr> <td>jndi-server-protocol</td> <td>Dépend de la configuration du serveur JNDI (rmi,tcp,...)</td> <td>Obligatoire</td> </tr> <tr> <td>jndi-server-name</td> <td>Hostname du serveur JNDI</td> <td>Obligatoire</td> </tr> <tr> <td>jndi-server-port</td> <td>Numéro du port du serveur JNDI</td> <td>Obligatoire</td> </tr> <tr> <td>topic-connection-factory</td> <td>Dépend de la configuration du serveur OpenJMS</td> <td>Obligatoire</td> </tr> <tr> <td>queue-connection-factory</td> <td>Dépend de la configuration du serveur OpenJMS</td> <td>Obligatoire</td> </tr> <tr> <td>jms-user-id</td> <td>Le nom d'utilisateur JMS, est aussi utilisé pour identifier l'expéditeur des messages</td> <td>Obligatoire</td> </tr> <tr> <td>jms-user-password</td> <td>Le mot de passe du jms-userid. Pas utilisé pour l'instant</td> <td>Optionnel</td> </tr> <tr> <td>main-topic-name</td> <td>Dépend de la configuration du serveur OpenJMS</td> <td>Obligatoire</td> </tr> <tr> <td>helpdesk-queue-name</td> <td>Dépend de la configuration du serveur OpenJMS</td> <td>Obligatoire</td> </tr> </table> <br> Page 2 sas.util.Connector sas.util Class Connector java.lang.Object | +-sas.util.Connector Direct Known Subclasses: MainTopicConnector public class Connector extends java.lang.Object La classe Connector se charge d'initialiser le contexte JNDI. Cette classe s'occupe aussi de la gestion du fichier de configuration du package et propose quelques méthodes utiles au développement de sous classes: - Des méthodes d'accès aux paramètres du fichier de configuration ({@link #getSasProperty(String)}, {@link #getSasProperty(String,String)}) - Des méthodes pour l'émission de message de log ({@link #log(String) log}, {@link #warning(String) warning}, {@link #debug(String) debug} et {@link #error(String) error}) A faire: - Passer les variables {@link #jndiContext} et {@link #configProperties} en variables statiques afin d'éviter de les initialiser à chaques instanciation d'un objet {@link Connector}. Il faut pour celà modifier le comportement des méthodes {@link #loadConfigFile(File)} et {@link #initJndi()}. - Créer un nouveau constructeur acceptant un objet File en paramètre afin de pouvoir transmettre le nom du fichier en tant que paramètre. Attention, les sous classes devront être adaptée en conséquence See Also: sas.util Fields jndiContext private javax.naming.InitialContext jndiContext Variable interne permettant de stocker le contexte JNDI de l'application SAS. See Also: #initJndi() configProperties private java.util.Properties configProperties Variable interne permettant de stocker les paramètres du fichier de configuration. See Also: #loadConfigFile(File) Constructors (continued on next page) Page 3 sas.util.Connector (continued from last page) Connector public Connector() Charge le fichier de configuration de l'application et initialise le contexte JNDI. Le fichier de configuration sas.properties est chargé par la méthode {@link #loadConfigFile(File)}, puis le contexte JNDI est initialisé en faisant appel à la méthode {@link #initJndi()}. Methods loadConfigFile private void loadConfigFile(java.io.File configFile) Lit le fichier de config sas.properties et initialise la variable interne {@link #configProperties} initJndi private void initJndi() Initialise le context JNDI et stocke une référence dans la variable interne {@link #jndiContext}. Repose sur les paramètres: jndi-server-protocoljndi-server-namejndi-server-port getJndiContext public javax.naming.InitialContext getJndiContext() Méthode d'accès au membre privé {@link #jndiContext}. Returns: un objet InitialContext référencant le service JNDI SAS getSasProperty public java.lang.String getSasProperty(java.lang.String key) Renvoie la valeur de la clef du fichier de configuration. Parameters: key - nom de la clef Returns: valeur de la clef See Also: #getSasProperty(String,String) getSasProperty public java.lang.String getSasProperty(java.lang.String key, java.lang.String defaultValue) Renvoie la valeur de la clef du fichier de configuration ou une valeur par défaut si la clef n'existe pas. Parameters: key - nom de la clef defaultValue - valeur par défault Returns: (continued on next page) Page 4 sas.util.Connector (continued from last page) la valeur de la clef ou à défaut le paramètre defaultValue See Also: #getSasProperty(String) logMessage private void logMessage(java.lang.String mess, int type) Permet d'écrire une chaîne de type INFO ou DEBUG sur la console. En fonction du type de message, définit à l'aide des constantes exportées par l'interface {@link LogType}, la chaîne s'affiche différement sur la console. Cette méthode privée existe pour les besoins des méthodes {@link #log(String)}, {@link #warning(String)}, {@link #debug(String)} et {@link #error(String)}. Parameters: mess - la chaîne à afficher type - le type de message See Also: LogType #log(String) #debug(String) log public void log(java.lang.String mess) Affiche une chaîne de caratère sur la sortie standard de la console. Parameters: mess - la chaîne à afficher warning public void warning(java.lang.String mess) Affiche une chaîne précédée des caractères **WARNING**sur la sortie d'erreur de la console. Parameters: mess - la chaîne à afficher debug public void debug(java.lang.String mess) Affiche une chaîne précédée des caractères **DEBUG**sur la sortie d'erreur de la console. Parameters: mess - la chaîne à afficher error public void error(java.lang.String mess) Affiche une chaîne précédée des caractères **ERROR**sur la sortie d'erreur de la console et stop le programme avec le code de retour -1 Parameters: mess - la chaîne à afficher Page 5 sas.util.LogType sas.util Interface LogType interface LogType Cette interface exporte deux int destinés à être transmis à la méthode {@link Connector#logMessage(String,int)} pour définir le type de message à afficher. Fields INFO public static final int INFO Message de type INFO. See Also: Connector#log(String) WARNING public static final int WARNING Message de type WARNING. See Also: Connector#warning(String) DEBUG public static final int DEBUG Message de type DEBUG. See Also: Connector#debug(String) ERROR public static final int ERROR Message de type ERROR (Attention, ces messages arrêtent l'exécution du programme). See Also: Connector#error(String) Page 6 sas.util.MainTopicConnector sas.util Class MainTopicConnector java.lang.Object | +-sas.util.Connector | +-sas.util.MainTopicConnector Direct Known Subclasses: MainTopicReceiver, MainTopicSender public class MainTopicConnector extends Connector Cette classe assure l'établissement d'une connexion vers une file de message du serveur OpenJMS. Le nom de la file de message, le nom JNDI de la fabrique de connexion et le nom de l'utilisateur sont récupérés dans le fichier de configuration du package. See Also: sas.util Fields jmsConnection private TopicConnection jmsConnection Variable interne destinée de type TopicConnection destinée à conserver une référence sur la connexion JMS créée par la méthode {@link #jmsConnect(String,String,String)}. Constructors MainTopicConnector public MainTopicConnector() Récupère le nom de la fabrique de connexion et l'utilisateur local dans le fichier de configuration du package et se connecte au serveur JMS à l'aide de la méthode {@link #jmsConnect(String,String,String)}. Repose sur les paramètres: topic-connection-factoryjms-user-idjms-user-password Methods jmsConnect private void jmsConnect(java.lang.String factoryName, java.lang.String username, java.lang.String password) Etablit la connexion avec le serveur OpenJMS. Parameters: factoryName - le nom JNDI de la fabrique de connexion username - le nom d'utilisateur à utiliser pour se connecter Page 7 sas.util.MainTopicConnector (continued from last page) password - le mot de passe de l'utilisateur getConnection public TopicConnection getConnection() Méthode d'accès à la variable interne {@link #jmsConnection}. Returns: une référence sur la variable interne {@link #jmsConnection} Page 8 sas.util.MainTopicReceiver sas.util Class MainTopicReceiver java.lang.Object | +-sas.util.Connector | +-sas.util.MainTopicConnector | +-sas.util.MainTopicReceiver public class MainTopicReceiver extends MainTopicConnector Cette classe se charge d'écouter la file de message principale et encapsule les messages reçus dans des instances de l'objet {@link SasMessage}. Elle dispose de plusieurs option de configuration comme la possibilité de définir un abonné durable et de filtrer les messages en fonction des critères propres aux {@link SasMessage} Fields session private TopicSession session Variable interne référencant l'objet TopicSession de la classe. subscriber private TopicSubscriber subscriber Variable interne référencant l'objet TopicSubscriber de la classe filter private java.lang.String filter Variable interne contenant chaîne utilisée pour filtrer les messages reçus. Constructors MainTopicReceiver public MainTopicReceiver() Initialise un récepteur de message sans abonné durable. Ce constructeur fait simplement appel au constructeur {@link #MainTopicReceiver(boolean)} en mettent le paramètre durableName égual à "". MainTopicReceiver public MainTopicReceiver(boolean durable) Initialise un récepteur de message. Si la valeur du paramètre durable est à true, le subscriber sera créé durable, et dans le cas ou ce paramètre est à false, l'abonné sera non durable. L'initialisation se fait d'abord en créant une session grâce à la méthode {@link #initSession()}, puis en déclarant un subscriber avec la méthode {@link #initSubscriber(boolean)}. Parameters: durableName Page 9 sas.util.MainTopicReceiver (continued from last page) Methods initSession private void initSession() Initialise une session à l'aide de la connexion créée par l'objet parent et conserve une référence dans la variable interne {@link #session}. initSubscriber private void initSubscriber(boolean durable) Initialise un subscriber à l'aide de la session créée au préalable et conserve une référence dans la variable interne {@link #subscriber}. Si le contenu de la variable durableName est égual à true, le subscriber sera créé durable, avec comme nom de référence la valeur du paramètre jms-user-id du fichier de configuration du package. Repose sur le paramètre: main-topic-name Parameters: durableName - nom de l'abonné durable onMessage public void onMessage(Message message) setFilter public void setFilter(java.lang.String filter) Initialise le filtre interne de message. Le filtre doit respsecter deux conditions: Utiliser la sémantique propre à l'API JMSFiltrer les champs propres à l'objet SAS Pour la première, veuillez vous reporter à la documentation de JMS, et la secande, consultez la documentation de la classe {@link SasMessage}. Parameters: filter - une chaîne contenant le filtre à appliquer run public void run() Enclenche l'écoute de la file de message principale. Cette méthode déclenche l'appel de la méthode {@link #newSasMessage(SasMessage)} de la classe dès qu'un nouveau message est disponible. close public void close() Cette arrête l'écoute de la file de message principale. newSasMessage public void newSasMessage(SasMessage message) Méthode appelée à la réception d'un nouveau message. Parameters: message - un objet SasMessage représentant le message reçu Page 10 sas.util.MainTopicSender sas.util Class MainTopicSender java.lang.Object | +-sas.util.Connector | +-sas.util.MainTopicConnector | +-sas.util.MainTopicSender Direct Known Subclasses: Controler public class MainTopicSender extends MainTopicConnector Cette classe est chargé d'offrir un nombre suffisant de méthodes pour permettre à ses classes filles d'émettre des messages SAS dans la file de message principal. Elle dérive directement de la classe MainTopicConnector et utilise des instance de la classe {@link SasMessage}. Fields session private TopicSession session Variable interne référencant l'objet TopicSession de la classe. publisher private TopicPublisher publisher Variable interne référencant l'objet TopicPublisher de la classe Constructors MainTopicSender public MainTopicSender() Le constructeur de la classe initialise une session JMS et ensuite créé un éditeur sur cette session. Il utilise la méthode {@link #initSession()} pour initialiser une session, puis la méthode {@link #initPublisher()} pour créer un publisher. Methods initSession private void initSession() Initialise une session à l'aide de la connexion créée par l'objet parent et conserve une référence dans la variable interne {@link #session}. initPublisher private void initPublisher() Page 11 sas.util.MainTopicSender (continued from last page) Initialise un publisher à l'aide de la seesion créée au préalable et conserve une référence dans la variable interne {@link #publisher}. Repose sur le paramètre: main-topic-name getSession private Session getSession() Renvoie la session JMS interne de l'objet. Returns: un objet session See Also: SasMessage#getJmsMessage(Session) sendMessage public void sendMessage(SasMessage message) Envoie un message SAS sur la file de message principale Parameters: message - un message SAS Page 12 sas.util.SasMessage sas.util Class SasMessage java.lang.Object | +-sas.util.SasMessage public class SasMessage extends java.lang.Object Cette classe modélise les messages transmis entre les différents acteurs du système SAS. Elle se charge de valider les informations essentielles au bon acheminement des messages du système, mais fournit aussi une couche d'abstraction d'accès au message JMS pour les classes dérivées des classes du package {@link sas.util}. See Also: MainTopicSender.sendMessage(SasMessage)(), sas.util Fields messageId private java.lang.String messageId messageCorrelationId private java.lang.String messageCorrelationId type private int type level private int level senderId private java.lang.String senderId comment private java.lang.String comment Constructors Page 13 sas.util.SasMessage (continued from last page) SasMessage public SasMessage() SasMessage public SasMessage(int type, int level, java.lang.String sender, java.lang.String comment) SasMessage public SasMessage(TextMessage jmsMessage) Methods getJmsMessage public TextMessage getJmsMessage(Session session) throws JMSException setMessageCorrelationId public void setMessageCorrelationId(java.lang.String id) setType public void setType(int type) setLevel public void setLevel(int level) setSenderId public void setSenderId(java.lang.String id) setComment public void setComment(java.lang.String comment) Page 14 sas.util.SasMessage (continued from last page) getMessageId public java.lang.String getMessageId() getMessageCorrelationId public java.lang.String getMessageCorrelationId() getType public int getType() getLevel public int getLevel() getSenderId public java.lang.String getSenderId() getComment public java.lang.String getComment() Page 15 sas.util.SasMessageType sas.util Interface SasMessageType public interface SasMessageType Fields INFO public static final int INFO CONF public static final int CONF Page 16 Package sas.mdc Page 17 sas.mdc.Controler sas.mdc Class Controler java.lang.Object | +-sas.util.Connector | +-sas.util.MainTopicConnector | +-sas.util.MainTopicSender | +-sas.mdc.Controler public class Controler extends MainTopicSender Doc à faire Constructors Controler public Controler() Constructeur de la classe Page 18 sas.mdc.Watcher sas.mdc Class Watcher java.lang.Object | +-sas.mdc.Watcher abstract class Watcher extends java.lang.Object Classe abstraite permettant l'implémentation de nouveau modules de contrôle indépendant du code principal de l'application SAS. Pour plus d'information sur l'utilisation de cette classe, veuillez vous référer au mode de fonctionnement de la classe {@link Controler}. Constructors Watcher public Watcher() Constructeur de la classe. Page 19 Package sas.misc Page 20 sas.misc.Demo sas.misc Class Demo java.lang.Object | +-sas.misc.Demo public class Demo extends java.lang.Object Cette classe ne sert qu'à tester la connexion au serveur OpenJMS. Elle se connecte au topic "topic1" et envoie 10 message de type String contenant la chaîne "démo" Fields pubSession private TopicSession pubSession Objet TopicSession servant à créer le publisher et les TextMessage publisher private TopicPublisher publisher Objet Publisher servant à publier sur le topic "topic1" Constructors Demo public Demo() Le constructeur se charge d'initialiser la connexion au serveur OpenJMS et le TopicPublisher de la classe Methods run public void run() Envoie 10 message de type TextMessage contenant la chaîne "démo" sur le topic "topic1" à l'aide des membres privé pubSession et publisher de la classe Page 21 Package sas Page 22 sas.Main sas Class Main java.lang.Object | +-sas.Main public class Main extends java.lang.Object Constructors Main public Main() Methods DemoUnitTest public void DemoUnitTest() ConnectorUnitTest public void ConnectorUnitTest() MainTopicConnectorUnitTest public void MainTopicConnectorUnitTest() MainTopicSenderUnitTest public void MainTopicSenderUnitTest() MainTopicReceiverUnitTest public void MainTopicReceiverUnitTest() main public static void main(java.lang.String args) Page 23 Index Index Page 24 Index INFO 16 initJndi 4 C initPublisher 11 initSession 9 close 10 initSession 11 comment 13 initSubscriber 10 CONF 16 configProperties 3 J Connector 3 ConnectorUnitTest 23 jmsConnect 7 Controler 18 jmsConnection 7 jndiContext 3 D L debug 5 DEBUG 6 level 13 Demo 21 loadConfigFile 4 DemoUnitTest 23 log 5 logMessage 5 E M error 5 ERROR 6 Main 23 main 23 F MainTopicConnector 7 MainTopicConnectorUnitTest 23 filter 9 MainTopicReceiver 9 MainTopicReceiverUnitTest 23 G MainTopicSender 11 MainTopicSenderUnitTest 23 getComment 15 messageCorrelationId 13 getConnection 8 messageId 13 getJmsMessage 14 getJndiContext 4 N getLevel 15 getMessageCorrelationId 15 newSasMessage 10 getMessageId 14 getSasProperty 4 O getSenderId 15 getSession 12 onMessage 10 getType 15 P I publisher 21 INFO 6 publisher 11 Page 25 Index pubSession 21 R run 21 run 10 S SasMessage 14 senderId 13 sendMessage 12 session 9 session 11 setComment 14 setFilter 10 setLevel 14 setMessageCorrelationId 14 setSenderId 14 setType 14 subscriber 9 T type 13 W warning 5 WARNING 6 Watcher 19 Page 26