Projet boîte à outils Batch générique Framework GenericBatch Spécification DSTI Historique des modifications Version Date Auteur 1.1 27/01/2014 G. Weber 1.2 03/02/2014 G. Lannoo 1.3 04/02/2014 G. Weber Documentations de référence Nom Documentation Log4J v1.2.17 Documentation DBUtils v1.5 Modification Compléments Compléments Version http://logging.apache.org/log4j/1.2/apidocs/index.html http://commons.apache.org/proper/commonsdbutils/apidocs/index.html 1 TABLE DES MATIERES 1. OBJET ............................................................................................................................................. 3 1. 2. 3. 2. RAPPEL DU BESOIN ........................................................................................................................ 3 CHANTIER « BOITES A OUTILS »...................................................................................................... 3 FRAMEWORK GENERICBATCH ........................................................................................................ 3 CONCEPTION ................................................................................................................................. 4 1. 2. 3. 4. 5. 3. CLASSES PRINCIPALES ET ELEMENTS REMARQUABLES ..................................................................... 4 LECTURE DU FICHIER DE PROPRIETES ............................................................................................. 4 UTILISATION DE LOG4J V1.2.17 ...................................................................................................... 4 UTILISATION DE DBUTILS V1.5 ET OJDBC14.JAR .............................................................................. 4 TRAITEMENT DES EXCEPTIONS ET RENVOI DES CODES DE SORTIE ..................................................... 5 UTILISATION .................................................................................................................................. 6 1. 2. RAPPEL SUR LES LIBRAIRIES A INCLURE ........................................................................................... 6 EXEMPLE D’IMPLEMENTATION ......................................................................................................... 6 2 1. Objet 1. Rappel du besoin Plusieurs projets logiciels au sein de la Direction Informatique de la Ville de Paris nécessitent des outils répondant à des besoins similaires. 2. Chantier « Boîtes à outils » Le chantier « Boîte à outils » a pour finalité de proposer et maintenir plusieurs composants développés en Java pour répondre à ces besoins de façon standardisée. Certains composants sont fournis pour répondre à quelques besoins (requêtes SQL). 3. Framework GenericBatch Le premier besoin identifié correspond à un jeu de composants permettant de concevoir et mettre en exploitation un traitement de données autonome (traitement par lot ou batch). Le framework GenericBatch est un package Java (fichier archive .jar) contenant l’ensemble des classes spécifiquement développées pour son fonctionnement, proposant les fonctionnalités suivantes : - Lecture d’un fichier de propriétés, pour standardiser la configuration - Création et alimentation d’un fichier de trace d’exécution (basé sur la librairie OpenSource Log4J v1) - Création et exploitation d’une connexion à une base de données (basé sur la librairie OpenSource DbUtils) - Gestion d’exceptions spécifiques pour traiter les cas d’erreur de façon unifiée - Renvoi de codes de fin d’exécution standardisés aux normes d’exploitation de la Ville de Paris Le framework propose une classe centrale (org.paris.gbatch.GenericBatch) qu’il appartient au développeur d’étendre, le principe recherché étant de décharger le développeur des tâches spécifiques et répétitives liées à la gestion des logs et des appels à la base de données, pour concentrer ses travaux sur le développement des fonctionnalités métier spécifiques au batch à produire. 3 2. Conception 1. Classes principales et éléments remarquables Generic Batch Logger Connexion Database Driver Not Found Exception Database Connection Failed Exception Log4j v1 DbUtils No Properties Found Exception ojdbc14.jar (abstract) Generic Batch Exception 2. Lecture des fichiers de propriétés Le constructeur GenericBatch utilise une méthode qui charge les fichiers de propriétés « query.properties » et « config.properties ». Le fichier devra se trouver dans le répertoire config qui sera dans le répertoire courant de l’exécutable pour qu’il soit détecté. Si le fichier est vide, une exception de type NoPropertiesFoundException est levée. Si la classe n’arrive pas à charger son fichier de propriétés, une exception de type IOException est levée. 3. Utilisation de Log4J v1.2.17 Le constructeur GenericBatch instancie un constructeur de type LogBatch. Cette classe implémente la librairie Log4J. Le constructeur de type LogBatch instancie un logger. La méthode charge le fichier de propriétés « config.properties » contenant le chemin et le nom du log : configurationLog(). La méthode permettant d’écrire dans un log est : info(String). Si le fichier de log ne peut pas être enregistré à l’endroit défini, une exception de type IOException est levée. 4. Utilisation de DbUtils v1.5 et ojdbc14.jar Le constructeur GenericBatch instancie un objet de la classe Connection à l’état null. 4 La classe GenericBatch possède une méthode qui va créer une connexion à la base de données : getInstance() utilisant le patron de conception « Singleton ». Une méthode permet de clôturer la connexion à la base de données : closeInstance(). Il y a des méthodes prévues pour chaque type de requête SQL : requête SELECT (executeSelect(nomRequête)), requête UPDATE (executeUpdate(nomRequête)), requête INSERT (executeInsert(nomRequête)) et requête DELETE (executeDelete(nomRequête)) Si le driver ojdbc14.jar est absent, une exception de type DatabaseDriverNotFoundException sera levée. Si la connexion à la base de donnée a echoué, une exception de type DatabaseConnectionFailedException. 5. Traitement des exceptions et renvoi des codes de sortie Si une mauvaise requête SQL est exécutée par une méthode de GenericBatch (executeSelect, executeUpdate, executeInsert ou executeDelete) une exception SQLException est levée. Les codes retour sont : [0] = Normal [5] = Anomalie non bloquante [10] = Anomalie bloquante La classe CodeRetourBatch fournit ces codes de retour dans des variables statiques : [0] = EXIT_OK [5] = EXIT_WARNING [10] = EXIT_ERROR //On écrit dans le log configuré un code de retour erreur : 10 Batch.logger.getLogBatch().info("Code de retour :"+ CodeRetourBatch.EXIT_ERROR); 5 3. Utilisation 1. Rappel sur les librairies à inclure Le framework GenericBatch s’appuie sur plusieurs librairies qui doivent apparaître dans le paramètre classpath fourni à la JVM lors de l’exécution du batch exploitant le framework : - Librairie Log4J v 1.2.17 : (log4j-1.2.17.jar – 381 ko) - Librairie DbUtils vXX : (commons-dbutils-1.5.jar – 61 ko) - Driver Jdbc : (objdbc6.jar – 2676 ko) - Etc… 2. Exemple d’implémentation public class MonBatch extends GenericBatch { public static void main(String[] args) throws Exception { //Constructeur de la classe GenericBatch afin d'instancier le log GenericBatch Batch = new GenericBatch(); //Configuration d'une connexion à une base de données Oracle Batch.dbConnect(); //Exécution d'une requête de type SELECT située dans le fichier de propriétés //Le nom de la requête est : nbLignes Batch.executeSelect("nbLignes"); //Fermeture de la connexion à la base de données Oracle Batch.dbDisconnect(); } } Contenu du fichier query.properties : #Fichier de propriétés contenant les requêtes SQL nbLignes=select count(1) from edition_testbatch deleteLignes=delete from edition_testbatch Contenu du fichier config.properties : #Fichier de propriétés contenant les propriétés du log cheminLog=C:\\Users\\webergu\\Desktop nomLog=EpurationBatch urlOracle=10.161.129.19 portOracle=1521 SIDOracle=xxx user=xxx pass=xxx 6 Contenu du fichier MonBatch.txt (C:\Users\webergu\Desktop\MonBatch.txt) : 2014-02-13 11:45:47,963 2014-02-13 11:45:47,973 query.properties. 2014-02-13 11:45:49,616 données établie. 2014-02-13 11:45:50,608 2014-02-13 11:45:50,618 INFO INFO root - LogBatch.java:95 - Configuration du log. root - GenericBatch.java:77 - Chargement du fichier INFO root - GenericBatch.java:95 - Connexion à la base de INFO INFO root - GenericBatch.java:166 - Requête exécutée. root - GenericBatch.java:109 - Code de retour : 0 Un fichier de log est produit par traitement : GenericBatchLog.txt Le fichier se trouve dans un répertoire « log » situé dans le répertoire de l’exécutable par défaut. Exemple : C:\Users\webergu\Desktop\GenericBatch.jar C:\Users\webergu\Desktop\log\GenericBatchLog.txt 7 8