Développement d'une application par lots transactionnelle simple
Vous pouvez écrire une application par lots simple à l'aide d'un contrôleur de travaux par lots et du flux de données EJB (Enterprise JavaBeans), de la ligne de commande ou de l'outil Apache ANT.
Pourquoi et quand exécuter cette tâche

- Assurez-vous que les données sont toutes disponibles sur chaque système où l'application par lots peut être lancée. Utilisez un système de fichiers réseau pour cet exemple. Cette action peut réduire les performances de l'application.
- Déployez l'application sur des serveurs d'applications qui peuvent uniquement fonctionner sur le système où se trouvent les données locales. Pour cela, déployez l'application dans un cluster existant dans un groupe de noeuds qui ne comporte qu'un seul membre.

Certaines commandes sont réparties sur plusieurs lignes pour des raisons d'affichage.
Procédure
- Créez des travaux par lots à l'aide d'un contrôleur de travaux par lots et d'un flux de données EJB.
- Créez les étapes du travail par lots.
- Créez une classe Java™ qui implémente l'interface com.ibm.websphere.BatchJobStepInterface.
- Implémentez
la logique applicative (ou logique "métier").
Si votre étape comporte un flux d'entrées et un flux de sorties, vous pouvez aussi utiliser l'étape de traitement par lots générique de GenericXDBatchStep.
- Créez les flux de données par lots (BDS).
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
L'accès aux flux de données par lots s'effectue depuis la logique applicative ; par exemple, depuis les étapes du travail par lots en appelant BatchDataStreamMgr avec les arguments d'entrée jobID et stepID. Ces arguments sont extraits de la liste de propriétés des beans d'étape (EJB d'entité), à l'aide des clés BatchConstants.JOB_ID et BatchConstants.STEP_ID.
- Mappez BatchConstants.JOB_ID vers com.ibm.websphere.batch.JobID et
BatchConstants.STEP_ID vers com.ibm.websphere.batch.StepID.
Vous devez tout d'abord disposer d'un accès à la classe BatchConstants.
L'infrastructure du flux de données par lots fournit plusieurs masques prêts à l'emploi à utiliser avec différents types de flux de données tels qu'un fichier ou une base de données. Pour utiliser l'infrastructure de flux de données par lots, procédez comme suit.
- Identifiez le type de flux de données avec lequel vous souhaitez opérer, par exemple un flux TextFile, ByteFile, JDBC ou z/OS.
- Indiquez si vous souhaitez lire à partir du flux ou écrire sur le flux.
- Consultez le tableau dans l'infrastructure du flux de données par lots et les masques. Dans la colonne des classes prises en charge, sélectionnez la classe qui correspond à votre type de flux de données et à votre opération. Par exemple, si vous souhaitez lire des données à partir d'un fichier texte, sélectionnez TextFileReader.
- Implémentez l'interface répertoriée dans la colonne de nom de masque qui correspond à la classe prise en charge que vous avez sélectionnée à l'étape précédente. La classe prise en charge gère toutes les activités de comptabilité relatives au flux et au modèle de programmation par lots. La classe d'implémentation se concentre sur la logique de traitement du flux.
- Déclarez la classe prise en charge et votre classe d'implémentation dans xJCL.
- Répétez cette procédure pour chaque flux de données requis dans votre étape.
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
- Facultatif : Obtenez le contexte
d'étape de travail.
JobStepContext ctx= JobStepContextMgr.getContext();
La classe de service JobStepContextMgr permet à l'étape de travail par lots d'obtenir une référence à son objet JobStepContext. Le contexte d'étape de travail fournit les fonctions suivantes :- Accès aux informations qui identifient de manière unique le contexte dans lequel l'étape de travail par lots s'exécute, par exemple, l'ID de travail.
- Une zone de données utilisateur transitoire dans laquelle des informations spécifiques à un utilisateur peuvent être transmises aux méthodes de structure de programmation par lots lors de l'étape de travail par lots.
- Une zone de données utilisateur permanente dans laquelle des informations spécifiques à une application peuvent être transmises à des étapes.
Vous pouvez utiliser la classe auxiliaire PersistentMap pour simplifier le stockage des types de base, tels qu'une valeur booléenne et double dans la zone de données utilisateur permanente du contexte de l'étape de travail.
- Définissez des flux de données par lots dans xJCL.
La classe PATTERN_IMPL_CLASS désigne l'implémentation utilisateur du masque d'infrastructure BDS et la propriété impl-class désigne la classe prise en charge.<batch-data-streams> <bds> <logical-name>inputStream</logical-name> <props> <prop name="PATTERN_IMPL_CLASS" value="MyBDSStreamImplementationClass"/> <prop name="file.encoding" value="8859_1"/> <prop name="FILENAME" value="${inputDataStream}" /> <prop name="PROCESS_HEADER" value="true"/> <prop name="AppendJobIdToFileName" value="true"/> </props> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.FileByteReader </impl-class> </bds>
- Facultatif : Activez le traitement skip-level.
Utilisez le traitement de non prise en compte d'enregistrements pour ignorer les erreurs d'enregistrement de lecture et d'écriture dans des travaux par lots transactionnels. Indiquez les règles de non prise en compte d'enregistrements dans le code xJCL. Pour plus d'informations, voir la rubrique sur le traitement de non prise en compte d'enregistrements.
- Facultatif : Activez le traitement de relance d'étapes.
Utilisez le traitement de relance d'étapes pour relancer des étapes de travaux lorsque la méthode processJobStep détecte des erreurs dans un travail par lots transactionnel. Indiquez les règles de relance d'étapes dans le code xJCL. Pour plus d'informations, voir la rubrique sur le traitement de relance d'étapes.
- Facultatif : Configurez le mode de transaction.
Utilisez le mode de transaction afin de définir si les artefacts liés au travail sont appelés en mode de transaction global ou en mode de transaction local. Pour plus d'informations, consultez la rubrique relative au mode de transaction configurable.
- Facultatif : Indiquez
un module d'écoute de journal.
Fournissez une implémentation pour l'interface com.ibm.websphere.batch.listener.JobListener afin d'ajouter une initialisation supplémentaire et d'effectuer un nettoyage pour les travaux et les étapes. Spécifiez le module d'écoute de travail dans l'élément xJCL en utilisant l'élément de module d'écoute au niveau travail.
La méthode beforeJob() du module d'écoute du travail est appelée avant l'appel de l'artefact utilisateur. La méthode afterJob() du module d'écoute du travail est appelée après le dernier appel de l'artefact utilisateur. La méthode beforeStep() du module d'écoute de travail est appelée avant tout artefact utilisateur lié à une étape. La méthode afterStep() du module d'écoute de travail est appelée en tant que dernier artefact utilisateur lié à l'étape. Chaque fois que le module d'écoute de travail est appelé, il consigne un message dans le journal de travail.
- Déclarez un contrôleur de travail par lots.
- Ajoutez un bean de session sans état à votre descripteur de déploiement et indiquez la classe d'implémentation fournit par le produit. Pour ce faire, spécifiez com.ibm.ws.batch.BatchJobControllerBean comme classe de bean. N'effectuez cette spécification qu'une seule fois par application par lots.
- Utilisez com.ibm.ws.batch.BatchJobControllerHome pour la classe de l'interface home distante et com.ibm.ws.batch.BatchJobController pour la classe de l'interface distante.
- Configurez le descripteur de déploiement EJB.
- Sur le bean du contrôleur, configurez une référence de ressource au gestionnaire de tâches par défaut, wm/BatchWorkManager, du type commonj.work.WorkManager.
Eviter les incidents: Vous devez déclarer le bean contrôleur de travail par lots dans le descripteur de déploiement EJB (Enterprise JavaBeans) de l'application de traitement par lots. Un seul bean contrôleur peut être défini par application par lots.gotcha
- Créez les étapes du travail par lots.
- Créez des travaux par lots à l'aide de la ligne de commande.
- Créez les étapes du travail par lots.
- Créez une classe Java qui implémente l'interface com.ibm.websphere.BatchJobStepInterface.
- Implémentez
la logique applicative (ou logique "métier").
Si votre étape comporte un flux d'entrées et de sorties, vous pouvez aussi utiliser l'étape de traitement par lots générique de GenericXDBatchStep.
- Créez les flux de données par lots (BDS).
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
L'accès aux flux de données par lots s'effectue depuis la logique applicative ; par exemple, depuis les étapes du travail par lots en appelant BatchDataStreamMgr avec les arguments d'entrée jobID et stepID. Ces arguments sont extraits de la liste de propriétés des beans d'étape (EJB d'entité), à l'aide des clés BatchConstants.JOB_ID et BatchConstants.STEP_ID.
- Mappez BatchConstants.JOB_ID vers com.ibm.websphere.batch.JobID et
BatchConstants.STEP_ID vers com.ibm.websphere.batch.StepID.
Vous devez tout d'abord disposer d'un accès à la classe BatchConstants.
L'infrastructure du flux de données par lots fournit plusieurs masques prêts à l'emploi à utiliser avec différents types de flux de données tels qu'un fichier ou une base de données. Pour utiliser l'infrastructure de flux de données par lots, procédez comme suit.
- Identifiez le type de flux de données avec lequel vous souhaitez opérer, par exemple un flux TextFile, ByteFile, JDBC ou z/OS.
- Indiquez si vous souhaitez lire à partir du flux ou écrire sur le flux.
- Consultez le tableau dans l'infrastructure du flux de données par lots et les masques. Dans la colonne des classes prises en charge, sélectionnez la classe qui correspond à votre type de flux de données et à votre opération. Par exemple, si vous souhaitez lire des données à partir d'un fichier texte, sélectionnez TextFileReader.
- Implémentez l'interface répertoriée dans la colonne de nom de masque qui correspond à la classe prise en charge que vous avez sélectionnée à l'étape précédente. La classe prise en charge gère toutes les activités de comptabilité relatives au flux et au modèle de programmation par lots. La classe d'implémentation se concentre sur la logique de traitement du flux.
- Déclarez la classe prise en charge et votre classe d'implémentation dans xJCL.
- Répétez cette procédure pour chaque flux de données requis dans votre étape.
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
- Obtenez le contexte
d'étape de travail.
JobStepContext ctx= JobStepContextMgr.getContext();
La classe de service JobStepContextMgr permet à l'étape de travail par lots d'obtenir une référence à son objet JobStepContext. Le contexte d'étape de travail fournit les fonctions suivantes :- Accès aux informations qui identifient de manière unique le contexte dans lequel l'étape de travail par lots s'exécute, par exemple, l'ID de travail.
- Une zone de données utilisateur transitoire dans laquelle des informations spécifiques à un utilisateur peuvent être transmises aux méthodes de structure de programmation par lots lors de l'étape de travail par lots.
- Une zone de données utilisateur permanente dans laquelle des informations spécifiques à une application peuvent être transmises à des étapes.
Vous pouvez utiliser la classe auxiliaire PersistentMap pour simplifier le stockage des types de base, tels qu'une valeur booléenne et double dans la zone de données utilisateur permanente du contexte de l'étape de travail.
- Ouvrez une invite de commande et vérifiez que Java se trouve sur le chemin.
- Entrez la commande suivante sur une seule ligne.
java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=<Application_Name> -jarfile=<jarfile containing the POJO batch steps> -earfile=<name of the output EAR file without the .ear extension> [-utilityjars=<semicolon separated list of utility jars>] [-debug] [-gridJob]
Par exemple, pour les travaux par lots, exécutezjava -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT
Par exemple, pour des travaux par lots, exécutez :java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -Dfile.encoding=ISO8859-1 -appname=<Application_Name> -jarfile=<jarfile containing the POJO batch steps> -earfile=<name of the output EAR file without the .ear extension> [-utilityjars=<semicolon separated list of utility jars>] [-debug] [-gridJob]
java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT
Eviter les incidents: Si vous n'incluez pas -Dfile.encoding=ISO8859-1, il en résultera des différences de pages de codes. De ce fait, les descripteurs JAR (Java archive) EJB (Enterprise JavaBeans) et EAR ne seront pas valides.gotcha
- Conditionnez une application par lots.
Utilisez une des méthodes suivantes.
- Conditionnez l'application à l'aide du script WSBatchPackager.
<WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh -appname=<application_name> -jarfile=<jar_file_containing_POJO_step_classes> -earfile=<output_ear_file_name> [-utilityjars=<semicolon_separated_utility_jars>] [-nonxadsjndiname=<non-xa_datasource_JNDI_name_for_CursorHoldableJDBCReader>;<non-XA_datasource_JNDI_name_2>;...] [-debug]
Par exemple, émettez./WSBatchPackager.sh -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
<WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=<application_name> -jarfile=<jar_file_containing_POJO_step_classes> -earfile=<output_ear_file_name> [-utilityjars=<semicolon_separated_utility_jars>] [-nonxadsjndiname=<non-xa_datasource_JNDI_name_for_CursorHoldableJDBCReader>;<non-XA_datasource_JNDI_name_2>;...] [-debug]
Par exemple, émettez./WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
Eviter les incidents: Si vous n'incluez pas -Dfile.encoding=ISO8859-1, il en résultera des différences de pages de codes. De ce fait, les descripteurs JAR (Java archive) EJB (Enterprise JavaBeans) et EAR ne seront pas valides.gotcha
- Conditionnez l'application en utilisant la commande java.
Ouvrez une invite de commande et vérifiez que java se trouve sur le chemin.
- Conditionnez l'application à l'aide du script WSBatchPackager.
- Créez les étapes du travail par lots.
- Créez des travaux par lots avec ANT.
- Créez les étapes du travail par lots.
- Créez une classe Java qui implémente l'interface com.ibm.websphere.BatchJobStepInterface.
- Implémentez
la logique applicative (ou logique "métier").
Si votre étape comporte un flux d'entrées et de sorties, vous pouvez aussi utiliser l'étape de traitement par lots générique de GenericXDBatchStep.
- Créez les flux de données par lots (BDS).
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
L'accès aux flux de données par lots s'effectue depuis la logique applicative ; par exemple, depuis les étapes du travail par lots en appelant BatchDataStreamMgr avec les arguments d'entrée jobID et stepID. Ces arguments sont extraits de la liste de propriétés des beans d'étape (EJB d'entité), à l'aide des clés BatchConstants.JOB_ID et BatchConstants.STEP_ID.
- Mappez BatchConstants.JOB_ID vers com.ibm.websphere.batch.JobID et
BatchConstants.STEP_ID vers com.ibm.websphere.batch.StepID.
Vous devez tout d'abord disposer d'un accès à la classe BatchConstants.
L'infrastructure du flux de données par lots fournit plusieurs masques prêts à l'emploi à utiliser avec différents types de flux de données tels qu'un fichier ou une base de données. Pour utiliser l'infrastructure de flux de données par lots, procédez comme suit.
- Identifiez le type de flux de données avec lequel vous souhaitez opérer, par exemple un flux TextFile, ByteFile, JDBC ou z/OS.
- Indiquez si vous souhaitez lire à partir du flux ou écrire sur le flux.
- Consultez le tableau dans l'infrastructure du flux de données par lots et les masques. Dans la colonne des classes prises en charge, sélectionnez la classe qui correspond à votre type de flux de données et à votre opération. Par exemple, si vous souhaitez lire des données à partir d'un fichier texte, sélectionnez TextFileReader.
- Implémentez l'interface répertoriée dans la colonne de nom de masque qui correspond à la classe prise en charge que vous avez sélectionnée à l'étape précédente. La classe prise en charge gère toutes les activités de comptabilité relatives au flux et au modèle de programmation par lots. La classe d'implémentation se concentre sur la logique de traitement du flux.
- Déclarez la classe prise en charge et votre classe d'implémentation dans xJCL.
- Répétez cette procédure pour chaque flux de données requis dans votre étape.
- Créez une classe Java qui implémente l'interface com.ibm.websphere.batch.BatchDataStream.
- Obtenez le contexte
d'étape de travail.
JobStepContext ctx= JobStepContextMgr.getContext();
La classe de service JobStepContextMgr permet à l'étape de travail par lots d'obtenir une référence à son objet JobStepContext. Le contexte d'étape de travail offre les fonctions suivantes :- Accès aux informations qui identifient de manière unique le contexte dans lequel l'étape de travail par lots s'exécute, par exemple, l'ID de travail
- Une zone de données utilisateur transitoire où les informations spécifiques à l'utilisateur peuvent être transmises aux méthodes de structure de programmation par lots lors de l'étape de travail par lots
- Une zone de données transitoire permanente dans laquelle les informations spécifiques à l'application peuvent être transmises à des étapes
Vous pouvez utiliser la classe auxiliaire PersistentMap pour simplifier l'enregistrement des types basiques, tels les éléments Boolean et Double, dans la zone de données utilisateur permanente du contexte d'étape de travail.
- Pour un travail par lots, vérifiez que com.ibm.ws.batch.runtime.jar se trouve sur le chemin de classes.
- Déclarez la tâche. Utilisez la commande suivante pour déclarer la tâche :
<taskdef name="pgcpackager" classname="com.ibm.ws.batch.packager.PGCPackager" classpath="${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar" />
- Après avoir compilé les fichiers Java
dans votre application, appelez la tâche pgcpackager.
<pgcpackager appname="<appname>" earFile="<location name of EAR file to generate>" jarfile="location of the POJO jar file"/>
- Créez les étapes du travail par lots.
Résultats
Que faire ensuite
Sous-rubriques
Composants d'une application par lots
Le développeur d'applications par lots et l'environnement d'exécution du traitement par lots fournissent les composants d'une application par lots.Modèle de programmation par lots
Les applications par lots sont des applications, basées sur EJB (Enterprise JavaBeans), Java Platform, Enterprise Edition (Java EE). Elles sont conformes à une série d'interfaces clairement définies qui permettent à l'environnement d'exécution par lots de gérer le démarrage des travaux par lots qui leur sont destinés.Traitement de non prise en compte d'enregistrements
Utilisez le traitement de non prise en compte d'enregistrements pour ignorer les erreurs d'enregistrement de lecture et d'écriture dans des travaux par lots transactionnels. Indiquez les règles de non prise en compte d'enregistrements dans le code xJCL.Traitement de la relance d'étapes
Utilisez le traitement de relance d'étapes pour relancer des étapes de travaux lorsque la méthode processJobStep détecte des erreurs dans un travail par lots transactionnel. Indiquez les règles de relance d'étapes dans le code xJCL.Mode de transaction configurable
Utilisez le mode de transaction pour indiquer si les artefacts liés aux travaux sont appelés en mode de transaction globale ou en mode de transaction locale. Indiquez le mode de transaction dans le fichier xJCL.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tgrid_bgridtutorial2
Nom du fichier : tgrid_bgridtutorial2.html