Desenvolvendo um aplicativo em lote transacional simples
É possível gravar um aplicativo em lote simples usando um controlador de tarefa em lote e o fluxo de dados do Enterprise JavaBeans (EJB), a linha de comandos ou a ferramenta Apache ANT.
Sobre Esta Tarefa

- Certifique-se de que os dados fiquem igualmente disponíveis em cada máquina na qual o aplicativo em lote pode ser iniciado. Utilize um Network File System para este exemplo. Esta ação pode reduzir o desempenho do aplicativo.
- Implemente o aplicativo em servidores de aplicativos que só possam ser executados na máquina em que existam dados locais. Conclua essa ação implementando o aplicativo em um cluster existente em um grupo de nós que possua apenas um nó do membro.

Alguns comandos estão divididos em várias linhas para fins de impressão.
Procedimento
- Crie tarefas em lote usando um controlador de tarefa em lote e um fluxo de dados EJB.
- Crie etapas de tarefas em lote.
- Crie uma classe Java™ que implemente a interface com.ibm.websphere.BatchJobStepInterface.
- Implemente a lógica de negócios.
Se sua etapa tiver uma entrada e um fluxo de saída, será possível usar, como alternativa, a etapa em lote genérica GenericXDBatchStep.
- Crie fluxos de dados em lote.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
Fluxos de dados em lote são acessados na lógica de negócios, por exemplo, a partir das etapas da tarefa em lote chamando BatchDataStreamMgr com o ID da tarefa e o ID da etapa. O ID da tarefa e o ID da etapa são recuperados da lista de propriedades de beans da etapa utilizando-se as chaves BatchConstants.JOB_ID e BatchConstants.STEP_ID.
- Mapeie o BatchConstants.JOB_ID para com.ibm.websphere.batch.JobID e mapeie BatchConstants.STEP_ID para com.ibm.websphere.batch.StepID.
Você já deverá ter acesso à classe BatchConstants.
A estrutura de fluxo de dados em lote fornece vários padrões prontos para uso para trabalhar com tipos diferentes de fluxos de dados como arquivo e banco de dados. Para usar a estrutura de fluxo de dados em lote, conclua as etapas a seguir.
- Identifique o tipo de fluxo de dados com o qual deseja operar, como TextFile, ByteFile, JDBC ou fluxo do z/OS.
- Identifique se você iria ler a partir do fluxo ou gravar no fluxo.
- Consulte a tabela na estrutura de fluxo de dados em lote e os padrões. Selecione a classe na coluna de classes de apoio que corresponda ao seu tipo de fluxo de dados e à operação. Por exemplo, se você desejar ler dados de um arquivo de texto, então, selecione TextFileReader.
- Implemente a interface listada na coluna de nome padrão que corresponde à classe de suporte selecionada na etapa anterior. A classe de suporte trata todas as atividades de contabilidade relacionadas ao fluxo e ao modelo de programação em lote. A classe de implementação foca na lógica do processamento do fluxo.
- Declare a classe de suporte e a classe de implementação no xJCL.
- Repita esse procedimento para cada fluxo de dados necessário na etapa.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
- Opcional: Obtenha o contexto da etapa da tarefa.
JobStepContext ctx= JobStepContextMgr.getContext();
A classe de serviço JobStepContextMgr ativa a etapa da tarefa em lote para obter uma referência para seu objeto JobStepContext. O contexto da etapa da tarefa fornece os recursos a seguir:- Acesso a informações que identificam exclusivamente o contexto no qual a etapa de tarefa em lote atual é executada, por exemplo, o ID da tarefa
- Uma área temporária de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre os métodos da estrutura de programação do lote durante a duração da etapa da tarefa em lote
- Uma área persistente de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre etapas
É possível usar a classe auxiliar PersistentMap para simplificar o armazenamento de tipos básicos tais como Booleano e duplo na área persistente de dados do usuário do contexto da etapa da tarefa.
- Defina os fluxos de dados em lote no xJCL.
A classe PATTERN_IMPL_CLASS denota a implementação do usuário do padrão de estrutura de BDS e a propriedade impl-class denota a classe de suporte.<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>
- Opcional: Ative o processamento no nível de salto.
Use o processamento de salto de registro para ignorar o registro de leitura e gravação de erros em tarefas em lote transacionais. Especifique políticas de salto de registro no xJCL. Leia o tópico sobre processamento do salto de registro para obter informações adicionais.
- Opcional: Ative o processamento da etapa de nova tentativa.
Use o processamento de nova tentativa de etapa para tentar etapas de tarefa novamente quando o método processJobStep encontra erros em uma tarefa de lote transacional. Especifique políticas de etapa de nova tentativa no xJCL. Leia o tópico sobre processamento de etapas de nova tentativa para obter informações adicionais.
- Opcional: Configure o modo de transação.
Use o modo de transação para definir se artefatos relacionados à tarefa são chamados no modo de transação global ou no modo de transação local. Leia o tópico sobre o modo de transação configurável para obter informações adicionais.
- Opcional: Forneça um listener de tarefa.
Forneça uma implementação para a interface com.ibm.websphere.batch.listener.JobListener para incluir uma inicialização adicional e limpe as tarefas e etapas. Especifique o listener da tarefa no xJCL usando o elemento do listener no nível da tarefa.
O método beforeJob() do listener de tarefa é chamado antes de qualquer artefato do usuário ser chamado. O método afterJob() do listener da tarefa é chamado após o último artefato do usuário ser chamado. O método beforeStep() do listener da tarefa é chamado antes de qualquer artefato do usuário relacionado à etapa. O método afterStep() do listener da tarefa é chamado como o último artefato do usuário relacionado à etapa. Cada vez que o listener da tarefa é chamado, ele registra uma mensagem no log da tarefa.
- Declare um controlador de tarefa em lote.
- Inclua um bean de sessão stateless no descritor de implementação e aponte para a classe de implementação que o produto fornece. Faça isso especificando o com.ibm.ws.batch.BatchJobControllerBean como a classe de bean. Siga essa especificação somente uma vez por aplicativo em lote.
- Utilize com.ibm.ws.batch.BatchJobControllerHome para a classe de interface inicial remota e com.ibm.ws.batch.BatchJobController para a classe de interface remota.
- Configure o descritor de implementação EJB.
- Configure uma referência de recurso no bean do Controlador para o WorkManager wm/BatchWorkManager padrão do tipo commonj.work.WorkManager.
Evitar Problemas: Você deve declarar o descritor de implementação do bean do controlador em lote no descritor de implementação Enterprise JavaBeans (EJB) de um aplicativo em lote. Apenas um bean do controlador pode ser definido por aplicativo em lote.gotcha
- Crie etapas de tarefas em lote.
- Crie tarefas em lote usando a linha de comandos.
- Crie etapas de tarefas em lote.
- Crie uma classe Java que implemente a interface com.ibm.websphere.BatchJobStepInterface.
- Implemente a lógica de negócios.
Se a etapa tiver exatamente um fluxo de entrada e um fluxo de saída, com alternativa, você poderá usar a etapa em lote genérico GenericXDBatchStep.
- Crie fluxos de dados em lote.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
Fluxos de dados em lote são acessados na lógica de negócios, por exemplo, a partir das etapas da tarefa em lote chamando BatchDataStreamMgr com o ID da tarefa e o ID da etapa. O ID da tarefa e o ID da etapa são recuperados da lista de propriedades de beans da etapa utilizando-se as chaves BatchConstants.JOB_ID e BatchConstants.STEP_ID.
- Mapeie o BatchConstants.JOB_ID para com.ibm.websphere.batch.JobID e mapeie BatchConstants.STEP_ID para com.ibm.websphere.batch.StepID.
Você já deverá ter acesso à classe BatchConstants.
A estrutura de fluxo de dados em lote fornece vários padrões prontos para uso para trabalhar com tipos diferentes de fluxos de dados como arquivo e banco de dados. Para usar a estrutura de fluxo de dados em lote, conclua as etapas a seguir.
- Identifique o tipo de fluxo de dados com o qual deseja operar, como TextFile, ByteFile, JDBC ou fluxo do z/OS.
- Identifique se você iria ler a partir do fluxo ou gravar no fluxo.
- Consulte a tabela na estrutura de fluxo de dados em lote e os padrões. Selecione a classe na coluna de classes de apoio que corresponda ao seu tipo de fluxo de dados e à operação. Por exemplo, se você desejar ler dados de um arquivo de texto, então, escolha TextFileReader.
- Implemente a interface listada na coluna de nome padrão que corresponde à classe de suporte selecionada na etapa anterior. A classe de suporte trata todas as atividades de contabilidade relacionadas ao fluxo e ao modelo de programação em lote. A classe de implementação foca na lógica do processamento do fluxo.
- Declare a classe de suporte e a classe de implementação no xJCL.
- Repita esse procedimento para cada fluxo de dados necessário na etapa.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
- Obtenha o contexto da etapa da tarefa.
JobStepContext ctx= JobStepContextMgr.getContext();
A classe de serviço JobStepContextMgr ativa a etapa da tarefa em lote para obter uma referência para seu objeto JobStepContext. O contexto da etapa da tarefa fornece os recursos a seguir:- Acesso a informações que identificam exclusivamente o contexto no qual a etapa de tarefa em lote atual é executada, por exemplo, o ID da tarefa
- Uma área temporária de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre os métodos da estrutura de programação do lote durante a duração da etapa da tarefa em lote
- Uma área persistente de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre etapas
É possível usar a classe auxiliar PersistentMap para simplificar o armazenamento de tipos básicos tais como Booleano e duplo na área persistente de dados do usuário do contexto da etapa da tarefa.
- Abra um prompt de comandos e assegure-se de que o Java esteja no caminho.
- Emita o comando a seguir, todo em uma única linha.
java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=<Application_Name> -jarfile=<arquivo jar que contém as etapas em lote do POJO> -earfile=<nome do arquivo EAR de saída sem a extensão .ear> [-utilityjars=<lista separada por ponto e vírgula do utilitário jars>] [-debug] [-gridJob]
Por exemplo, para tarefas em lote, emitajava -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT
Por exemplo, para tarefas em lote, emitajava -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=<arquivo jar que contém as etapas em lote do POJO> -earfile=<nome do arquivo EAR de saída sem a extensão .ear> [-utilityjars=<lista separada por ponto e vírgula do utilitário 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
Evitar Problemas: Se você não incluir -Dfile.encoding=ISO8859-1, as diferenças da página de códigos resultarão em EAR e descritores Java Archive (JAR) de Enterprise JavaBeans (EJB) inválidos.gotcha
- Empacote um aplicativo em lote.
Use um dos métodos a seguir.
- Empacote o aplicativo usando o 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]
Por exemplo, emita./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]
Por exemplo, emita./WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
Evitar Problemas: Se você não incluir -Dfile.encoding=ISO8859-1, as diferenças da página de códigos resultarão em EAR e descritores Java Archive (JAR) de Enterprise JavaBeans (EJB) inválidos.gotcha
- Empacote o aplicativo usando o comando java.
Abra um prompt de comandos e assegure de que o java esteja no caminho.
- Empacote o aplicativo usando o script WSBatchPackager.
- Crie etapas de tarefas em lote.
- Crie tarefas em lote usando ANT.
- Crie etapas de tarefas em lote.
- Crie uma classe Java que implemente a interface com.ibm.websphere.BatchJobStepInterface.
- Implemente a lógica de negócios.
Se a etapa tiver exatamente um fluxo de entrada e um fluxo de saída, com alternativa, você poderá usar a etapa em lote genérico GenericXDBatchStep.
- Crie fluxos de dados em lote.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
Fluxos de dados em lote são acessados na lógica de negócios, por exemplo, a partir das etapas da tarefa em lote chamando BatchDataStreamMgr com o ID da tarefa e o ID da etapa. O ID da tarefa e o ID da etapa são recuperados da lista de propriedades de beans da etapa utilizando-se as chaves BatchConstants.JOB_ID e BatchConstants.STEP_ID.
- Mapeie o BatchConstants.JOB_ID para com.ibm.websphere.batch.JobID e mapeie BatchConstants.STEP_ID para com.ibm.websphere.batch.StepID.
Você já deverá ter acesso à classe BatchConstants.
A estrutura de fluxo de dados em lote fornece vários padrões prontos para uso para trabalhar com tipos diferentes de fluxos de dados como arquivo e banco de dados. Para usar a estrutura de fluxo de dados em lote, conclua as etapas a seguir.
- Identifique o tipo de fluxo de dados com o qual deseja operar, como TextFile, ByteFile, JDBC ou fluxo do z/OS.
- Identifique se você iria ler a partir do fluxo ou gravar no fluxo.
- Consulte a tabela na estrutura de fluxo de dados em lote e os padrões. Selecione a classe na coluna de classes de apoio que corresponda ao seu tipo de fluxo de dados e à operação. Por exemplo, se você desejar ler dados de um arquivo de texto, então, selecione TextFileReader.
- Implemente a interface listada na coluna de nome padrão que corresponde à classe de suporte selecionada na etapa anterior. A classe de suporte trata todas as atividades de contabilidade relacionadas ao fluxo e ao modelo de programação em lote. A classe de implementação foca na lógica do processamento do fluxo.
- Declare a classe de suporte e a classe de implementação no xJCL.
- Repita esse procedimento para cada fluxo de dados necessário na etapa.
- Crie uma classe Java que implemente a interface com.ibm.websphere.batch.BatchDataStream.
- Obtenha o contexto da etapa da tarefa.
JobStepContext ctx= JobStepContextMgr.getContext();
A classe de serviço JobStepContextMgr ativa a etapa da tarefa em lote para obter uma referência para seu objeto JobStepContext. O contexto da etapa da tarefa fornece os recursos a seguir:- Acesso a informações que identificam exclusivamente o contexto no qual a etapa de tarefa em lote atual é executada, por exemplo, o ID da tarefa
- Uma área temporária de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre os métodos da estrutura de programação do lote durante a duração da etapa da tarefa em lote
- Uma área persistente de dados do usuário na qual informações específicas do aplicativo podem ser transmitidas entre etapas
É possível usar a classe auxiliar PersistentMap para simplificar o armazenamento de tipos básicos tais como Booleano e duplo na área persistente de dados do usuário do contexto da etapa da tarefa.
- Para uma tarefa em lote, assegure-se de que o arquivo com.ibm.ws.batch.runtime.jar esteja no caminho da classe.
- Declare a tarefa. Use o seguinte comando para declarar a tarefa:
<taskdef name="pgcpackager" classname="com.ibm.ws.batch.packager.PGCPackager" classpath="${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar" />
- Depois de compilar os arquivos Java no seu aplicativo, chame a tarefa pgcpackager.
<pgcpackager appname="<appname>" earFile="<location name of EAR file to generate>" jarfile="location of the POJO jar file"/>
- Crie etapas de tarefas em lote.
Resultados
O que Fazer Depois
Subtópicos
Components of a batch application
The batch application developer and the batch run time environment provide the components of a batch application.Batch programming model
Batch applications are Enterprise JavaBeans (EJB) based Java Platform, Enterprise Edition (Java EE) applications. These applications conform to a few well-defined interfaces that allow the batch runtime environment to manage the start of batch jobs destined for the application.Skip-record processing
Use skip-record processing to skip read and write record errors in transactional batch jobs. Specify skip-record policies in the xJCL.Retry-step processing
Use retry-step processing to try job steps again when the processJobStep method encounters errors in a transactional batch job. Specify retry-step policies in the xJCL.Configurable transaction mode
Use the transaction mode to define whether job-related artifacts are called in global transaction mode or local transaction mode. Specify the transaction mode in the xJCL.


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