URL: https://linuxfr.org/news/jqm-un-serveur-de-batchs-asynchrones-en-java Title: JQM, un serveur de batchs asynchrones en Java Authors: Pierre Benoît Sibaud, Sebastien, palm123 et claudex Date: 2013年12月23日T15:16:18+01:00 License: CC By-SA Tags: jqm Score: 19 JQM (Job Queue Management) est un gestionnaire de batch sous [licence Apache](http://www.apache.org/licenses/LICENSE-2.0) qui permet de traiter sur des noeuds de traitement répartis toutes les tâches potentiellement longues qui ne sont pas désirables dans un serveur d'application à travers un système de files d'attente. Ce logiciel s'adresse à toute application qui souhaite gérer l'exécution de ses tâches hors du serveur d'application. Une tâche peut être déclenchée depuis un appel Web Service ou une API par une application web, un ordonnanceur ou un flux d'interface. L'outil propose de nombreuses fonctionnalités comme l’arrêt d’une tâche, la récupération de fichiers générés, la priorisation d’une tâche et bien d’autres. JQM a été développé en Java SE 1.6, utilise [Hibernate](http://hibernate.org/)/JPA 2.0 comme [ORM](http://fr.wikipedia.org/wiki/Mapping_objet-relationnel), et une base de donnée comme référentiel de configuration et file d'attente des traitements. JQM est compatible avec les bases [HSQL](http://hsqldb.org/), MySQL et Oracle, les serveurs d’application WebSphere et [Glassfish](https://glassfish.java.net/fr/) (prochainement Tomcat) pour l'API cliente et gère les ressources [JNDI](http://fr.wikipedia.org/wiki/Java_Naming_and_Directory_Interface) pour les bases de données et les brokers de messages. L'outil est compatible avec les projets [Maven](http://maven.apache.org/) et tout particulièrement la gestion des dépendances et des projets parents. ---- [Code source sur GitHub](https://github.com/enioka/jqm) ---- ## Architecture JQM est composé de trois grandes parties : * les moteurs de traitements (des JVM standalone) qui exécutent les tâches. Il est possible de déployer plusieurs moteurs (ou noeuds) de traitements pour des raisons de performance ou de haute disponibilité * une base de données qui joue le rôle de file de traitement et de référentiel de configuration * les clients (une application Web dans un serveur d'application, une ligne de commande, un ordonnanceur, une autre tâche (_job_) JQM etc.) qui soumettent des tâches à JQM Les noeuds de traitement sont reliés à des files de traitement en base de données et ont chacun un intervalle de polling et un nombre défini de tâches pouvant tourner simultanément. Par exemple: * VIPqueue = 10 tâches en simultané + intervalle de polling de 1 seconde * SLOWqueue = 3 tâches en simultané + intervalle de polling de 15 min ![schema_JQM](http://blog.enioka.com/public/img_blog/JQM/.schema_jqm_m.jpg) ## Cycle de vie d'une tâche Le cycle de vie d'une tâche passe par quatre états différents. Après avoir été ajoutée à la file d'attente, la tâche prend le status _SUBMITTED_. Une fois que la tâche est "attrapée" par un noeud, son statut passe à l'état _ATTRIBUTED_ suivi de _RUNNING_ une fois que l'exécution de celle-ci a commencé. La tâche à la fin de son exécution a deux états possibles, _CRASHED_ si la tâche n'a pas fonctionné correctement ou _ENDED_ si tout le processus s'est déroulé correctement. ![Cycle_de_vie_d'une_tache](http://blog.enioka.com/public/img_blog/JQM/.cycle_of_life_JQM_m.jpg) ## Fonctionnalités ### Pour les développeurs * Pour les développeurs de traitement : une tâche est définie comme telle une fois qu'elle étend (_extends_) la classe JobBase de l'API jqm-api. Au sein d'une tâche, il est possible de récupérer des ressources via JNDI (base de données, broker de message, répertoire de traitement...), d'envoyer une progression, un message de log ou de mettre en file une autre tâche. * Pour les clients des traitements : Il existe plusieurs moyens d'utiliser JQM. * Par le biais de l'API jqm-clientapi qui permet d'avoir toutes les fonctionnalités existantes, à savoir la possibilité de mettre une tâche en file, de regarder son état, de l'annuler, de le changer de file et bien d'autres ; * Par le biais d'un web service ; * Par une interface en ligne de commande ; * Par une IHM web (très frustre à l'heure actuelle). ### Pour les administrateurs Un administrateur a la possibilité de consulter les logs, de gérer les connexions JNDI, de paramétrer les associations entre les tâches et les files. ## Exemple de tâche ```java public class Caller extends JobBase { @Override public void start() { Map params = new HashMap(); p.put("myParam1", "Pouet"); p.put("myParam2", "tut tut"); // enQueue is a JobBase method. // It is used to enqueue a Job, here "Called". enQueue("CalledJob", "Bob", null, null, null, null, null, null, null, null, null, params); } } ``` ## Exemple d'intégration de JQM dans un SI Dans cet exemple, JQM est utilisé pour gérer une intégration au fil de l'eau de message dans un ERP qui ne possède qu'une interface d'entrée de type table / prodédure stockée. JQM joue un rôle de « joint de dilatation » entre un système événementiel qui gère des pics à 200 000 messages par heure et une interface de type procédure stockée qui traite des données en masse mais ne se prête pas à de nombreuses exécutions simultanées. Chaque message est traité par un thread d'un conteneur MDB (Message Driven Bean) et déclenche une tâche JQM. La file de tâches JQM est paramétrée pour n'exécuter qu'une seule tâche à la fois et annuler les lancements surnuméraires. La tâche lance la procédure stockée de l'ERP qui traite toutes les données en attente dans la table d'interface. En pic, plusieurs centaines de messages n'occasionneront qu'un ou deux lancement de la procédure stockée qui traitera en masse les données. Le système permet ainsi de rester très réactif en période creuse (au contraire des systèmes de type batch cyclique) tout en permettant la montée en charge lors des pics. ![integration_JQM](http://blog.enioka.com/public/img_blog/JQM/.integration_jqm_m.jpg) ## Origine du projet Le projet a été développé par la [société Enioka](http://www.enioka.com) dans le cadre d'un projet pour l'un de ses clients pour l'intégration d'un ERP. Suite à la réalisation de ce projet, il a été convenu que JQM deviendrait open source afin de combler le manque actuel de ce type d'outils libres dans un contexte java SE/EE 6. Le code source et la documentation sont [disponibles sur Github](https://github.com/enioka/jqm).

AltStyle によって変換されたページ (->オリジナル) /