Um aplicativo em lote no WebSphere Extended Deployment Versão 6.1 é implementado como um POJO (Plain Old Java Object) simples e compactado como módulos EJB (Enterprise JavaBeans) em arquivos EAR (Enterprise Archive) para implementação. A construção de um aplicativo em lote baseado em POJO é o método preferido para se construir um aplicativo em lote.
As seções a seguir descrevem os componentes de um aplicativo em lote.
Um aplicativo em lote pode ser composto por uma ou mais etapas em lote. Cada etapa em lote é um POJO, que implementa a interface com.ibm.websphere.batch.BatchJobStepInterface. A implementação dessa interface fornece a lógica de negócios da etapa em lote que o tempo de execução do lote chama para executar o aplicativo em lote.
Durante a compactação de um aplicativo em lote, cada etapa em lote é declarada um bean de entidade CMP e a lógica de negócios no POJO é associada ao bean utilizando-se uma Entrada de Ambiente no descritor de implementação EJB. O bean de entidade CMP age como um wrapper da etapa da tarefa em lote. Sua implementação é fornecida pelo tempo de execução do WebSphere Extended Deployment. Portanto, esse bean é declarado no descritor de implementação EJB e não é realmente compactado. São definidas várias etapas em um único aplicativo em lote
Um aplicativo em lote também inclui um bean de sessão sem preservação de estado que é fornecido pelo tempo de execução do WebSphere Extended Deployment que age como um controlador de etapa da tarefa. Como o bean de entidade CMP da etapa, o bean de sessão sem preservação de estado do controlador é declarado no descritor de implementação do aplicativo. Declare o bean do controlador uma vez por aplicativo em lote.
Cada etapa em lote pode utilizar zero ou mais fluxos de dados em lote para a entrada e saída de dados. Um fluxo de dados em lote é um POJO que implementa a interface com.ibm.websphere.batch.BatchDataStream.
Os algoritmos de ponto de verificação ajudam o tempo de execução do lote a decidir com que freqüência confirmar a transação global sob a qual as etapas em lote serão chamadas. Os algoritmos de ponto de verificação são construídos como POJOs pela implementação da interface com.ibm.wsspi.batch.CheckpointAlgorithm. O tempo de execução do lote também fornece algoritmos de ponto de verificação baseados em tempo e em registro prontos para uso.
Um recurso opcional do modelo de programação em lote, algoritmos de resultados, é utilizado para manipular os códigos de retorno de tarefas em lote. O tempo de execução do lote fornece um algoritmo de resultados simples que retorna o valor de código de retorno numérico mais alto de todas as etapas da tarefa.
Componente | Tipo | Implementação | Provedor |
---|---|---|---|
Etapa da tarefa em lote | POJO | com.ibm.websphere.BatchJobStepInterface | Aplicativo em lote |
Fluxo de dados em lote | POJO | com.ibm.websphere.batchDataStream | Aplicativo em lote |
Algoritmo de ponto de verificação | POJO | com.ibm.wsspi.batchCheckpointAlgorithm | Aplicativo em lote (pode utilizar a implementação fornecida pelo tempo de execução no lugar) |
Algoritmo de resultados | POJO | com.ibm.wsspi.batchResultsAlgorithm | Aplicativo em lote (pode utilizar a implementação fornecida pelo tempo de execução no lugar) |
Componente | Tipo | Implementação | Provedor |
---|---|---|---|
Controlador de tarefas em lote | Bean de sessão | Tempo de execução do lote | |
Wrapper da etapa da tarefa em lote | Bean de entidade CMP | Tempo de execução do lote | |
Algoritmo de ponto de verificação | POJO | Tempo de execução do lote (os aplicativos podem fornecer os seus próprios) | |
Algoritmo de resultados | POJO | Tempo de execução do lote (os aplicativos podem fornecer os seus próprios) |
Descritor de Implementação EJB:
<ejb-jar id="ejb-jar_ID"> <display-name>POJOSampleEJBs</display-name> <enterprise-beans> <!--Bean do Controlador de Tarefa em Lote--> <session id="POJOJob"> <ejb-name>POJOJob</ejb-name> <home>com.ibm.ws.batch.BatchJobControllerHome</home> <remote>com.ibm.ws.batch.BatchJobController</remote> <ejb-class>com.ibm.ws.batch.BatchJobControllerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <ejb-local-ref id="EJBLocalRef_1168709876999"> <ejb-ref-name>ejb/POJOStep1</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep1</ejb-link> </ejb-local-ref> <ejb-local-ref id="EJBLocalRef_1127247535990"> <ejb-ref-name>ejb/POJOStep2</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface</local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep2</ejb-link> </ejb-local-ref> <resource-ref id="ResourceRef_1168711637701"> <!-- Gerenciador de Trabalho padrão para Tarefas em Lote --> <res-ref-name>wm/BatchWorkManager</res-ref-name> <res-type>commonj.work.WorkManager</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </session> <!-- Etapa da Tarefa em Lote # 1 --> <entity id="POJOStep1"> <ejb-name>POJOStep1</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Wrapper da Etapa da Tarefa em Lote --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey </prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep1</abstract-schema-name> <cmp-field id="CMPAttribute_1168709093522"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1168709093542"> <field-name>stepID</field-name> </cmp-field> <!-- Entrada do Ambiente associando a Etapa POJO ao Wrapper --> <env-entry> <description>nome da classe POJO da etapa do lote</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementação da Etapa da Tarefa POJO --> <env-entry-value>com.ibm.websphere.samples.POJOStep1</env-entry-value> </env-entry> </entity> <!-- Etapa da Tarefa em Lote # 2 --> <entity id="POJOStep2"> <ejb-name>POJOStep2</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Wrapper da Etapa da Tarefa em Lote --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep2</abstract-schema-name> <cmp-field id="CMPAttribute_1127248451496"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1127248451497"> <field-name>stepID</field-name> </cmp-field> <!-- Entrada do Ambiente associando a Etapa POJO ao Wrapper --> <env-entry> <description>nome da classe POJO da etapa do lote</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementação da Etapa da Tarefa POJO --> <env-entry-value>com.ibm.websphere.samples.POJOStep2</env-entry-value> </env-entry> </entity> </enterprise-beans> <assembly-descriptor id="AssemblyDescriptor_1168711087550"> <container-transaction> <method> <ejb-name>POJOStep1</ejb-name> <method-name>*</method-name> </method> <method> <ejb-name>POJOStep2</ejb-name> <method-name>*</method-name> </method> <!-- TX NECESSÁRIO--> <trans-attribute>necessário</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>