Um dos pontos fortes do IBM ® CICS® é que ele suporta diversas linguagens de programação e permite que você os integre em um único aplicativo. Mas e se seus aplicativos baseados em CICS estiverem usando somente Java e você quiser aproveitar os pontos fortes de diversos ambientes CICS Java™ . Ao transmitir dados entre os programas CICS, você normalmente coloca os dados em uma estrutura de série de bytes orientada pelo campo que pode ser acessada por um programa aplicativo codificado em qualquer linguagem. Porém, se Java for a única linguagem que você está usando, é melhor permanecer no mundo de Java orientado a objetos e transmitir objetos de dados Java entre seus programas Java baseados em CICS. Esta série de artigos discute os ambientes CICS Java disponíveis no CICS TS V4.2 ou mais recente e, embora seja voltada aos programadores Java que desenvolvem programas para CICS, ela também será útil aos programadores de sistema CICS e programadores de aplicativos CICS que estão começando a usar Java.
Desde seu suporte inicial de Java em 1999, o CICS consegue controlar um pool de JVMs em que somente uma transação CICS baseada em Java é despachada para uma JVM por vez (por isso a necessidade de um pool de JVMs). No CICS TS V4.1 (junho de 2009), o CICS apresentou o recurso JVMServer, que é uma JVM em que diversas transações CICS baseadas em Java podem ser despachadas simultaneamente. Inicialmente, o recurso estava disponível somente para funções do sistema, mas desde o CICS TS V4.2 (junho 2011), o JVMServer pode executar programas Java usando o mecanismo de serviço da web de software livre da Apache Software Foundation, o Axis2. Ele também pode ser usado para aplicativos escritos pelo cliente usando Open Services Gateway initiative (OSGi).
O CICS TS V4.1 forneceu o CICS Dynamic Scripting Feature Pack em junho de 2010, que é uma implementação da tecnologia Project Zero e fornece um desenvolvimento ágil de aplicativos para aplicativos da web situacionais. O Feature Pack fornece artefatos da web, permite o uso de linguagens de script PHP e Groovy e tem um modelo para implementação rápida do acesso ao banco de dados para seus aplicativos situacionais, facilitando a definição e exposição de uma tabela de banco de dados com uma interface REST. O Feature Pack é implementado em um CICS JVMServer e tem uma ponte para Java, que fornece acesso aos seus programas e recursos de CICS.
Além de Java como uma linguagem de programação CICS do lado do servidor, os clientes Java que executam diversos ambientes que não são CICS podem invocar programas em execução em CICS. O CICS Transaction Gateway oferece uma maneira de transmitir informações do cliente Java para CICS usando o Java Enterprise Edition (JEE) Java Connector Architecture (JCA). Além disso, o WebSphere Optimized Local Adapter (WOLA) fornece uma comunicação entre memórias de um WebSphere® Application Server para CICS quando ambos estão em execução na mesma Logical Partition (LPAR) de z/OS® .
Ao transmitir dados entre programas baseados em CICS em execução em ambientes Java diferentes fornecidos por CICS ou de programas cliente Java para programas baseados em CICS, é possível usar uma área de comunicações (COMMAREA) de até 32K ou canais e contêineres para passar quantidades maiores de dados (canais e contêineres foram adicionados em 2005). A COMMAREA e os canais e contêineres são convenientes para COBOL e outras linguagens orientadas ao campo suportadas por CICS. Esses mecanismos de comunicação permitem que um programa Java interaja com linguagens processuais orientadas ao campo que executam em um ambiente CICS. Para aplicativos implementados em diversos ambientes JVM fornecidos por CICS, a transmissão de objetos não é compatível com Java, uma vez que é necessário executar etapas extras a fim de usar o mecanismo de comunicações de programa a programa de CICS.
Por exemplo, talvez você queira implementar sua lógica de negócios baseada em Java em um ambiente OSGi fornecido por CICS a fim de aproveitar os recursos e capacidades do OSGi. Talvez você queira expor algumas dessas funções de negócio baseadas em Java como serviços da web usando o ambiente Axis2 fornecido por CICS (que executa em um servidor JVM diferente). Você também pode querer fornecer rapidamente uma interface da web à sua lógica de negócio baseada em OSGi usando CICS Dynamic Scripting (outro servidor JVM) ou fornecer acesso à sua lógica de negócio baseada em OSGi para clientes Java que não são CICS e estão usando o CICS Transaction Gateway (que executa em uma JVM fora do CICS).
Este artigo propõe uma forma compatível com Java para transmitir objetos entre programas Java que estão executando em JVMs diferentes no ambiente CICS, ou entre ambientes Java fornecidos por CICS em regiões diferentes. O artigo fornece informações secundárias sobre a transmissão de objetos Java e explica os motivos de usar diversos ambientes Java fornecidos por CICS.
A forma tradicional de transmitir dados entre programas de aplicativos em um ambiente CICS é colocar os dados em uma estrutura de série de bytes orientada ao campo e colocar a estrutura em uma COMMAREA ou em um contêiner CICS em um canal CICS. A COMMAREA ou canal é passada quando o programa de destino é invocado usando um comando EXEC CICS LINK PROGRAM(). Para COBOL, IBM Assembler e outras linguagens suportadas por CICS, não é necessária uma delegação dos dados. No entanto, para um programa Java com base em CICS, os objetos de dados Java precisam ser delegados e ter essa delegação removida de e para uma estrutura de série de bytes orientada ao campo. Há utilitários disponíveis para gerar um código para a delegação e um layout de dados de COBOL usado para inserir dados nos utilitários. Se você estiver usando diversas linguagens de programação em seu aplicativo CICS, vale a pena fazer algo especial para Java a fim de permitir que os programas Java baseados em CICS operem em conjunto com programas CICS escritos em outras linguagens.
Para os programas Java em execução em um único ambiente Java fornecido por CICS, use Java normalmente, instanciando as classes e invocando os métodos. Se você quiser usar diversos ambientes Java fornecidos por CICS para aproveitar as vantagens de cada ambiente, convém obter assistência do CICS para transmitir seus dados Java. Para aplicativos Java com base em CICS que envolvem diversos ambientes Java fornecidos por CICS, é necessária uma maneira compatível com Java para passar os objetos de dados Java entre esses ambientes. Para um programa Java que acessa funções fornecidas por um programa Java em um ambiente Java diferente fornecido por CICS, seria conveniente para o programador Java se os dados que estão sendo transmitidos fossem tão simples quando o seguinte snippet de código:
String abc = "Some information to Pass";
Employee emp = new Employee("John Doe");
DDW_CicsObjectTransporter transporter =
new DDW_CicsObjectTransporter();
transporter.addObject("abc",abc)
.addObject("emp",emp)
.execute("TARGET");
// and after the program return
String errorString = (String)transporter.getObject("error");
If (errorString != null) {
processError();
} else {
Manager newManager = (Manager)transporter.getObject("mgr");
// process/display Manager object that was returned
}
|
Para o programa Java respondente que está retornando os dados, seria conveniente para o programador Java se o fornecimento de uma resposta fosse tão simples quanto:
DDW_CicsObjectTransporter transporter =
new DDW_CicsObjectTransporter();
Employee emp = (Employee)transporter.getObject("emp");
// work with employee object
transporter.removeObject("abc"); // can remove transport object
Manger mgr = new Manger("Joe Bloggs");
transporter.addObject("mgr",mgr); // add new or changed objects
return;
|
A Parte 2 desta série mostra como permitir o uso acima e fornece uma amostra de classe Java chamada DDW_CicsObjectTransporter que permite a interação acima. Além disso, é fornecido um objeto DDW_CicsTg_ObjectTransporter para ser usado com o transporte de objetos entre um cliente Java usando CICS TG e CICS TS.
Ambientes Java fornecidos pelo CICS
Cada um dos ambientes Java fornecidos por CICS tem seus pontos fortes e, por isso, você provavelmente vai querer usar mais de um para um aplicativo. Conforme indicado acima, o objetivo desta série de artigos é fornecer uma estrutura para simplificar a transferência de objetos Java entre diversos ambientes.
Desde 1999, o CICS oferece um ambiente de JVM compartilhado. Você especifica o número máximo de JVMs que podem existir em um pool e o CICS usa as JVMs para executar seus programas CICS Java. No ambiente de JVM compartilhado, o CICS despacha um programa Java por vez para uma JVM. Embora essa prática forneça um ótimo isolamento do programa, normalmente isso não é uma preocupação dos programas Java, e o número máximo de programas que podem ser executados por vez em uma região CICS é igual ao número de JVMs no conjunto de JVMs.
Quando o CICS recebe uma solicitação, ele inicia um programa para fornecer uma resposta. Portanto, você precisa definir os programas Java para o CICS por meio de uma definição PROGRAM, na qual você especifica a classe Java inicial a ser invocada, a chave de armazenamento na qual você deseja executar (chave CICS ou USER) e um arquivo JVMProfile que especifica as características da JVM necessária para esse programa, incluindo os tamanhos de heap de CLASSPATH, LIBPATH, JVM, driver DB2 etc.
Ao despachar um programa Java, o CICS escolhe uma JVM de seu conjunto de JVMs que corresponda aos requisitos especificados na definição PROGRAM do programa (arquivo JVMProfile e chave de execução).
Em seguida, o programa Java é iniciado nessa JVM. A execução do programa Java começa na classe especificada em um método com uma assinatura de
public static void main(CommAreaHolder ca) ou public static void main(String[] args).
Os programas Java interagem com CICS usando um equivalente de Java para os comandos EXEC do CICS, chamado de classe JCICS. Além de interagir com os recursos de CICS e invocar programas CICS escritos em outras linguagens, os programas Java podem interagir com DB2 ou WebSphere MQ e realizar outros trabalhos específicos a Java. Os programas Java sempre devem usar recursos de CICS, se estiverem presentes (como conexões CICS DB2), de modo que o CICS possa controlar unidades de trabalho, uma das muitas áreas nas quais o CICS se destaca.
A memória para JVMs vem do espaço de endereço da região do CICS. O CICS TS V4.1, ou mais antigo, usa uma JVM de 31 bits e, portanto, um armazenamento de 31 bits no espaço de endereço da região do CICS, o que significa que um número relativamente pequeno de JVMs pode ser executado sob o controle de uma única região do CICS. É comum ter diversas regiões de CICS atendendo a uma função de negócio comum. Portanto, para situações nas quais você precisa de mais simultaneidade do que uma única região do CICS pode oferecer, é possível iniciar diversos Java Owning Regions (JORs) e despachar o trabalho neles. O CICS TS V4.2 usa uma JVM de 64 bits que pode residir acima da barra no armazenamento de 64 bits. Dessa forma, diversas JVMs podem existir no conjunto de JVMs mantidas por uma única região do CICS, diminuindo ou removendo a necessidade de várias regiões de CICS atenderem a uma carga de trabalho maior de Java.
No CICS TS V4.2, os programas escritos pelo cliente podem ser executados em um ambiente de servidor de JVM (discutido na próxima seção). Na carta de anúncio do CICS TS V4.2, a IBM afirmou que o ambiente de JVM compartilhado será removido do CICS em um release futuro.
O CICS TS V4.1 (junho de 2009) apresentou o recurso JVMSERVER, que fornece um ambiente de servidor JVM. Esse ambiente de servidor JVM permite que várias tarefas CICS Java sejam despachadas à mesma JVM e ao mesmo tempo. Ao definir um recurso JVMSERVER, você especifica o número máximo (1 a 256) de tarefas Java simultâneas que podem ser despachadas para uma única JVM. É possível executar diversos servidores JVM sob o controle de uma única região do CICS, mas o número total de tarefas despachadas para todos os servidores JVM controlados por uma única região do CICS não pode exceder 1024. No CICS TS V4.1, o ambiente de servidor JVM é usado apenas pelo CICS Dynamic Scripting (discutido abaixo), e pelo SupportPac CN11, que fornece um contêiner de lote para o WebSphere XD Compute Grid. O CICS TS V4.2 (junho de 2011) muda para um ambiente Java 6.0.1 de 64 bits e adiciona um servidor JVM com base em OSGi e um servidor JVM com base em Axis2 nos quais os programas Java escritos pelo usuário podem ser implementados.
Ambiente do servidor JVM com base em OSGi
O ambiente do servidor JVM com base em OSGi no CICS TS V4.2 exige que os programas Java sejam agrupados usando pacotes OSGi. OSGi é um sistema de módulo dinâmico para Java e foi adotado por todos os principais servidores de aplicativo Java. A modularidade em OSGi fornece um mecanismo para dividir um sistema em módulos independentes conhecidos como pacotes, agrupados e implementados separadamente, cada um com seu próprio ciclo de vida independente. Essa modularidade permite que você divida um aplicativo complexo em partes independentes a fim de facilitar o desenvolvimento, teste e manutenção.
Sem OSGi, as classes Java e os arquivos JAR são disponibilizados para uma JVM especificando uma variável de ambiente CLASSPATH. Essa CLASSPATH é estática e não muda durante a vida da JVM. Com o OSGi, as classes Java podem ser adicionadas e removidas dinamicamente de uma JVM.
O OSGi também fornece um registro de serviço na memória em que outros módulos podem encontrar e se conectar aos serviços registrados. Os componentes criados a partir de módulos podem ser publicados no registro de serviço OSGi e, a partir desse local, outros módulos podem encontrar e se conectar a esses serviços. Os componentes podem expor todas as classes em um pacote ou podem expor interfaces específicas. Da mesma forma, um componente pode declarar suas dependências em outros pacotes ou módulos. Um módulo pode conter métodos de ciclo de vida invocados à medida que o módulo é instalado, desinstalado ou atualizado. Também é possível fornecer pontos de extensão para permitir que outras pessoas ampliem a funcionalidade de seu módulo.
Um ou mais pacotes Java (contendo classes) são agrupados em um pacote OSGi. O ambiente do CICS permite que você agrupe um ou mais pacotes OSGi em um CICS BUNDLE. À medida que o CICS BUNDLE é instalado, ativado, desativado e descartado, os pacotes OSGi no CICS BUNDLE passam pelas mudanças apropriadas do ciclo de vida OSGi, permitindo que você adicione e remova dinamicamente as classes e pacotes Java em um servidor CICS JVM em execução. O estado do ciclo de vida de um pacote OSGi e o CICS BUNDLE podem ser exibidos usando o CICS Explorer. O servidor JVM baseado em OSGi deve ser considerado a direção estratégica para a lógica de negócios baseada em Java no CICS.
Quando o CICS recebe uma solicitação, o CICS inicia um programa para fornecer uma resposta. Portanto, você precisa definir os programas Java para o CICS por meio de uma definição de recurso PROGRAM. Para um programa Java baseado em CICS que deve ser executado em um servidor JVM, é necessário estabelecer uma definição PROGRAM especificando CONCURRENCY(REQUIRED), uma chave de armazenamento do CICS, o nome do recurso JVMSERVER no qual esse programa deve ser executado e o nome da entrada do registro OSGi que faz referência ao programa Java.
Ao agrupar seus programas Java em um pacote OSGi, para essas classes nas quais o CICS deve iniciar a execução, inclua uma palavra-chave CICS-MainClass= no manifesto do pacote que especifica a classe em que a execução deve ser iniciada. A palavra-chave CICS-MainClass= faz com que o ambiente CICS OSGi registre a classe especificada no registro OSGi.
Assim como ocorre com o ambiente de JVM compartilhado, a execução do programa Java começa na classe especificada em um método com uma assinatura
public static void main(CommAreaHolder ca) ou public static void main(String[] args).
Assim como ocorre com o ambiente JVM compartilhado por CICS, os programas Java interagem com CICS usando um equivalente de Java para os comandos EXEC CICS chamados de classes JCICS. Além de interagir com os recursos CICS e invocar programas CICS escritos em outras linguagens, os programas Java podem interagir com DB2 e WebSphere MQ, e realizar outros trabalhos específicos ao Java. Os programas Java devem sempre usar os recursos de CICS, se existirem (como conexões CICS DB2), de modo que o CICS possa controlar as unidades de trabalho (uma das muitas áreas nas quais o CICS se destaca).
A memória para os servidores JVM vem do espaço de endereço da região do CICS. O CICS TS V4.2 usa uma JVM de 64 bits, que pode residir acima da barra no armazenamento de 64 bits, de modo que diversos servidores JVM possam existir em uma única região do CICS. O CICS pode despachar 1 até 256 tarefas simultâneas em um único JVMServer, sendo que 15 é o padrão. A soma de todas as tarefas simultâneas em todos os servidores JVM para uma determinada região não pode exceder 1024.
Ambiente do servidor JVM baseado em Axis2
O CICS possibilitou a exposição de programas baseados em CICS como serviços da web desde o CICS TS V3.1 (março de 2005) e antes disso usando um SupportPac (março de 2003) ou por meio do Recurso SOAP para CICS (setembro de 2003). O suporte ao serviço da web, inicialmente fornecido com o CICS TS V3.1, permite a exposição de programas CICS invocados usando o CICS COMMAREA ou canais e contêineres (ambos discutidos abaixo).
Como uma opção adicional para expor programas CICS baseados em Java (como serviços da web) o CICS TS V4.2 (junho de 2011) inclui o Axis2, que é um mecanismo de serviços da web de software livre da Apache, fornecido com o CICS para processar mensagens SOAP em um ambiente Java. O uso da tecnologia Axis2 para serviços da web baseados em Java no CICS proporciona uma utilização mais adequada do processador de especialidade zAAP. Em algumas situações, a análise de Java e XML pode ser descarregada em um processador de especialidades, como o System z Application Assist Processor (zAAP), em vez de executar o trabalho em um processador geral em um mainframe da IBM.
O suporte para Axis2 no CICS permite que você exponha os programas Java baseados em CICS e desenvolva programas de manipulação de cabeçalho no estilo Axis2 em Java. O Axis2 suporta a implementação ativa de serviços da web e manipuladores, serviços da web assíncronos, Message Exchange Pattern (MEP) (parte do WSDL 2.0), WSDL 1.1 e 2.0 e a exposição de Plain Old Java Objects (POJOs) como serviços da web usando as anotações que fazem parte do JAX-WS. O conjunto de ferramentas para o desenvolvimento de artefatos do Axis2 faz parte do Java 6 Java Standard Edition (JSE).
Em junho de 2010, o CICS forneceu o CICS Transaction Server Feature Pack para script dinâmico. Esse Feature Pack é executado em um servidor JVM e é uma implementação da tecnologia Project Zero . O objetivo do Project Zero é fornecer um ambiente de programação ágil que permite aos programadores implementar rapidamente aplicativos situacionais, como um aplicativo para uma iniciativa temporária de marketing ou uma ferramenta para melhorar a produtividade do departamento ou da equipe.
O CICS Transaction Server Feature Pack para script dinâmico permite que você forneça rapidamente páginas da web e escreva aplicativos em PHP, Groovy e Java. Como o Feature Pack é implementado em um ambiente Java, uma ponte para Java é fornecida. A partir de seu programa PHP ou Groovy, é possível instanciar classes de Java e invocar métodos nessas classes. Além de permitir que você acesse todos os recursos de Java, a ponte Java permite que seus scripts PHP e Groovy usem as classes e a interface JCICS com recursos de CICS (classes JCICS são o equivalente em Java para os comandos EXEC CICS). O Project Zero também fornece o Zero Resource Model (ZRM) a fim de fornecer uma maneira rápida de definir tabelas e acessar dados nessas tabelas usando uma interface REST ou uma API simples centralizada em coleções e membros dessas coleções. Também é possível acessar informações de banco de dados usando SQL, e os bancos de dados DB2 e Derby são suportados.
Os aplicativos de script dinâmico de CICS são acessados por meio de solicitações HTTP que pedem páginas da web (HTML, JavaScript ou folhas de estilo em cascata), pela invocação de um script PHP ou Groovy ou por serviços REST.
Embora seja possível escrever aplicativos inteiros em PHP ou Groovy, a lógica de negócios nesses aplicativos pode ser acessada somente por meio de solicitações HTTP direcionadas a um aplicativo de script dinâmico CICS. Portanto, a melhor prática é executar sua lógica de negócio baseada em Java em um servidor JVM baseado em OSGi de modo que a lógica de negócio possa ser acessada a partir de qualquer recurso ou cliente CICS usando uma das opções de interoperabilidade de CICS. É possível usar o script dinâmico de CICS para fornecer rapidamente uma camada de apresentação para sua camada de negócio baseada em OSGi.
O CICS Transaction Server Feature Pack for Dynamic Scripting V1.0 é executado no CICS TS V4.1 e o CICS Transaction Server Feature Pack for Dynamic Scripting V1.1 é executado no CICS TS V4.2.
O CICS Transaction Gateway (CICS TG) fornece comunicações transacionais seguras para o CICS a partir de uma variedade de linguagens de programação cliente como C/C++, Java, Microsoft® .NET, Microsoft Visual Basic, PowerBuilder e COBOL baseado em estação de trabalho.
Para um cliente Java em execução em um ambiente que não é CICS, o CICS TG implementa a Java Connector Architecture (JCA), que define uma forma padronizada de se comunicar a partir de programas Java com Enterprise Information Systems (EIS) como CICS, IMS, JDEdwards, PeopleSoft e SAP. A JCA define uma forma de implementar conexões gerenciadas ou não gerenciadas usando uma API padrão chamada Common Client Interface (CCI). Com uma conexão gerenciada, um servidor de aplicativos Java Enterprise Edition (JEE) pode fornecer o gerenciamento de conexão, transacionalidade de controle e propagação de um contexto de segurança. Essa API CCI padrão permite que um programador Java use uma API comum para acessar EISs diferentes.
O CICS TG pode ser configurado de diversas maneiras ― para obter mais informações, consulte Centro de informações do CICS TG .
Para um cenário em que você tem um programa cliente de CICS TG escrito em Java e sua lógica de negócios do lado do servidor CICS implementada em Java, é possível usar as técnicas contidas neste artigo para passar objetos de dados Java de seu programa cliente CICS TG para o programa Java baseado em CICS que implementa sua lógica de negócios.
Passando dados entre programas CICS
As técnicas fornecidas por CICS para passagem de dados entre programas CICS incluem passar uma COMMAREA ou um canal e contêineres.
Durante a maioria dos 40 anos de história do CICS, a maneira padrão de passar dados entre programas que compõem um aplicativo é um bloco de armazenamento chamado área de comunicação (COMMAREA), que pode ter até 32 KB. No passado, o CICS suportava principalmente linguagens processuais como COBOL e PL/I, nas quais era possível definir simplesmente um layout de dados orientado ao campo da COMMAREA. No tempo de execução, o programa de linguagem processual coloca os dados no layout de dados e os LINKs em outro programa CICS, passando a COMMAREA (um LINK é o equivalente em CICS de uma chamada de programa). A abordagem LINK foi desenvolvida para permitir a passagem de dados entre programas baseados em CICS implementados nas mesmas linguagens de programas, ou em linguagens diferentes, em execução nas mesmas regiões CICS, ou em regiões diferentes.
A Figura 1 mostra um exemplo de programas passando uma COMMAREA. Embora seja conveniente para linguagens processuais que funcionam com campos de tamanho fixo nos quais o tamanho total dos dados a serem passados é menor do que 32KB,
a COMMAREA não é uma maneira conveniente de passar dados para programas Java. A construção Java mais próxima dessa série de bytes orientada ao campo é um array de bytes. Mas um array de bytes Java não inclui a noção de
acessar os bytes 75 a 100, por exemplo, por meio de um nome como customerAddress. Ferramentas como os utilitários JZOS fornecidos com o IBM z/OS Java e assistentes no Rational Application
Developer permitem que você gere um objeto de dados Java a partir de um layout de dados COBOL. Essas ferramentas e assistentes são uma boa solução se você precisar se mover entre Java e outra linguagem de programação em CICS.
Elas fornecem os métodos getters e setters de Java para cada campo no desenvolvimento e têm um método getBytes()/setBytes() ou getByteBuffer()/setByteBuffer()
quando o programa Java precisa passar dados ou obter dados do CICS.
Ao passar dados entre programas Java, se você estiver em um único ambiente CICS Java, use a abordagem Java normal de instanciamento de um objeto
(como CheckingAccount) e invoque métodos nesse objeto (como computeInterest(). Se seu aplicativo Java envolver ambientes CICS Java diferentes ou seu aplicativo baseado em Java envolver diversas regiões CICS, seu aplicativo poderá invocar os diversos programas Java nesses diferentes ambientes Java fornecidos por CICS usando o comando CICS LINK.
O uso da COMMAREA é a única maneira de passar dados entre esses programas Java, mas isso exige uma transição dos objetos Java para uma estrutura de série de bytes orientada ao campo (um array de bytes).
Além disso, ao aplicar o LINK no programa Java de destino em execução em uma ambiente CICS Java diferente, você precisa mudar do array de bytes para um ou mais objetos Java no programa Java de destino com LINK aplicado.
Os programadores Java podem serializar objetos que desejam passar (o que faz o objeto ser transformado em um array de bytes), passar o objeto serializado por meio da COMMAREA e desserializar o objeto no programa Java de destino. No entanto, talvez você queira passar diversos objetos e talvez precise ultrapassar o limite de 32KB. Além disso, a COMMAREA normalmente tem o mesmo tamanho quando enviada a qualquer direção.
Desde o CICS TS V3.1 (março de 2005), para comunicações de programa a programa, é possível colocar grandes quantias de dados em um conjunto de contêineres nomeados associados a um canal específico. É possível colocar quantos contêineres quiser em um determinado canal e passar o canal (com todos seus contêineres) para o programa de destino, como mostra a Figura 2. O CICS não limita o tamanho dos contêineres ou o número de contêineres em um canal. No entanto, há limitações práticas dependendo de sua taxa de chegada de transação e combinação de programas, uma vez que o espaço para os contêineres é proveniente do armazenamento de sua região do CICS. Como regra geral, você deve usar os contêineres que seu aplicativo precisa, mas não seja negligente gastando espaço ou seu aplicativo poderá causar inadvertidamente uma condição de short-on-storage do CICS.
Você pode ver na Figura 2 que os contêineres têm um nome e podem ser de qualquer tamanho. Não é possível ver isso na figura 2, mas se um contêiner for enviado do programa A para o programa B e não for modificado pelo programa B, o CICS saberá que o contêiner não precisa ser devolvido ao programa A, pois o programa A já tem uma cópia do conteúdo do contêiner. Se o programa B receber um contêiner do programa A, o programa B poderá mudar os dados e o tamanho do contêiner. Para linguagens de programação processuais, cada contêiner pode ter seu próprio layout de dados composto por 0 ou mais campos. Ao passar os dados entre linguagens Java e processuais, você pode usar os utilitários JZOS ou os assistentes do Rational Application Developer para gerar um objeto Java a partir do layout do contêiner definido no COBOL. Esses objetos Java gerados permitem que você acesse os dados do Java usando métodos getters e setters e a partir de sua linguagem processual usando o layout de dados processual normal orientado pelo campo. Os utilitários JZOS e os assistentes do Rational Application Developer foram descritos acima em "COMMAREA".
Há dois tipos de contêineres: CHAR e BIT. Os contêineres CHAR servem para dados de caractere e o CICS pode realizar uma conversão de página de códigos em contêineres CHAR, caso isso seja solicitado. Os contêineres BIT servem para dados binários, parecidos com um array de bytes Java.
Também é possível ver na Figura 2 que os canais e os contêineres podem ser vistos como um array associativo parecido com um hashtable Java, onde o canal é como um array de contêineres. É possível acessar o conteúdo de um contêiner solicitando-o por nome.
Se você estiver usando um cliente Java em um ambiente não CICS para interagir com um programa baseado em CICS, usando o CICS TG V7.1 ou mais recente, usando o IPIC como o tipo de comunicações e estiver se comunicando com o CICS TS V3.2 ou mais recente, seu cliente Java também poderá usar canais e contêineres.
Passando objetos Java entre programas CICS Java
Com base nas informações até o momento, você provavelmente concluiu que se seu objetivo for passar dados de um programa Java em execução em um ambiente Java fornecido por CICS para um programa Java em execução em um ambiente Java diferente fornecido por CICS, é possível simplesmente passar os objetos Java serializados usando canais e contêineres CICS. Esse procedimento evita:
- A criação de um layout de copybook COBOL para os dados a serem passados entre os programas Java
- A execução de utilitários para a criação de um objeto de dados Java do copybook COBOL
- A necessidade de o programador Java entender COBOL
- A necessidade de manter os copybooks COBOL necessários em seu repositório de origem
- A necessidade de realizar uma rotatividade de produção no copybook COBOL
- A necessidade de atualizar o copybook COBOL se o conteúdo dos dados passados mudar (e a necessidade de passar pelas atualizações de repositório subsequentes e rotatividade da produção)
Os conceitos de serialização de objetos são bem entendidos pelo programador Java comum, e há vários exemplos do código Java para a serialização de objetos na Internet. A serialização de objetos Java e passagem dos mesmos em canais e contêineres fornece um mecanismo direto para passar os objetos Java entre os programas Java baseados em CICS em execução nos diversos ambientes Java baseados em CICS (ou entre ambientes Java controlados por regiões diferentes do CICS). O programa baseado em CICS que está aplicando o LINK (ou o programa Java cliente de CICS TG) pode serializar os objetos Java que serão passados em uma série de contêineres. O programa Java ao qual o LINK foi aplicado pode desserializar os objetos, modificá-los conforme o necessário, serializar os objetos modificados de volta em um contêiner, e passá-los de volta ao programa que está aplicando o LINK.
Se você estiver trabalhando com classes de Java em um único programa Java com base em CICS, trabalhe com elas normalmente ― instancie o objeto e invoque os métodos do objeto. O transporte de objetos Java entre ambientes CICS Java é necessário somente se você quiser mover os dados entre os diferentes ambientes CICS Java a fim de aproveitar seus pontos fortes individuais, se você quiser mover os dados para um ambiente CICS Java em uma região CICS diferente, ou se você quiser espalhar seu aplicativo em diversos ambientes CICS Java para gerenciamento da carga de trabalho ou disponibilidade do aplicativo.
A Parte 2 desta série de artigo mostrará como usar os canais e contêineres para passar os objetos de dados Java e descreve uma estrutura generalizada para passar dados entre aplicativos CICS. A Parte 2 também fornecerá classes Java que realizam a serialização, desserialização do objeto Java e as funções de LINK, permitindo que você se concentre nos aspectos Java de seu aplicativo e não nos detalhes de passar os objetos Java entre os diversos ambientes CICS Java.
Este artigo descreveu os diferentes ambientes Java fornecidos pelo CICS:
- O ambiente de JVM compartilhado tradicional, onde somente uma transação de Java baseada em CICS é executada por vez em uma JVM.
- O ambiente do servidor CICS JVM, onde várias solicitações de programa Java podem ser despachadas à mesma JVM ao mesmo tempo.
Estes são os ambientes Java fornecidos por CICS que usam o servidor JVM (mas não podem ser combinados em um único servidor JVM):
- O ambiente baseado em OSGi, que fornece o sistema de módulo dinâmico OSGi com funcionalidades como a adição e remoção dinâmica de classes Java à JVM, fornecimento do registro OSGi, exposição apenas das interfaces para seu módulo Java em vez de todas as classes no módulo e especificação de dependências de módulo para praticamente eliminar problemas
ClassNotFoundcomuns. - O mecanismo de serviço da web de software livre Axis2, que permite expor um POJO de forma rápida e fácil usando anotações JAX-WS e escrever manipuladores no estilo Axis2.
- CICS Dynamic Scripting, que fornece uma maneira rápida de desenvolver aplicativos da web usando as linguagens de script PHP e Groovy. Os intérpretes de PHP e Groovy são implementados em Java e, portanto, há uma ponte Java para permitir que você instancie objetos Java e invoque programas CICS
- O ambiente baseado em OSGi, que fornece o sistema de módulo dinâmico OSGi com funcionalidades como a adição e remoção dinâmica de classes Java à JVM, fornecimento do registro OSGi, exposição apenas das interfaces para seu módulo Java em vez de todas as classes no módulo e especificação de dependências de módulo para praticamente eliminar problemas
- CICS Transaction Gateway, que facilita as comunicações de um programa Java em execução em um ambiente não CICS com um programa CICS TS.
O artigo também descreveu as duas formas de passar dados entre programas baseados em CICS:
- COMMAREA ― Um único bloco de dados de até 32 KB
- Canais e contêineres ― diversos blocos nomeados de dados de qualquer tamanho (contêineres) agrupados em um canal nomeado
Finalmente, o artigo descreveu a passagem de objetos de dados Java entre os diversos ambientes Java fornecidos por CICS usando o canal CICS normal e o mecanismo de contêineres, e a colocação de objetos de dados Java serializados nos contêineres e desserialização deles conforme o necessário.
O autor gostaria de agradecer aos seguintes colegas da IBM pela ajuda em revisar este artigo e fornecer sugestões para o conteúdo e aprimoramentos:
- SEteve Fowlkes, Certified IT Specialist, Suporte técnica de CICS, IBM EUA
- Leigh Compton, Certified IT Specialist, Equipe de qualificações técnicas avançadas de CICS, IBM EUA
- Mark Cocker, Planejamento e estratégia técnica de CICS, IBM Reino Unido
- Phil Wakelin, Planejamento e estratégia técnica de CICS, Java e acesso ao CICS, IBM Reino Unido
- Recursos CICS
- Centros de informação de CICS
Centros de informações para todos os produtos e ferramentas CICS, incluindo CICS Transaction Gateway e CICS Transaction Server. - Página da família de produtos CICS
Descrições do produto, notícias sobre o produto, informações de treinamento, informações de suporte, etc. - Página de produto do CICS Transaction Gateway
Descrições do produto, notícias sobre o produto, informações de treinamento, informações de suporte, etc. - Serviços CICS
A IBM tem uma ampla variedade de serviços para ajudá-lo a planejar, projetar, proteger, gerenciar e implementar soluções do CICS em sua organização. Os serviços IBM CICS podem ajudar a reduzir custos, maximizar seu investimento em CICS e aumentar sua vantagem competitiva. - IBM Redbook: Introduction to CICS dynamic scripting
O CICS Transaction Server Feature Pack for Dynamic Scripting integra o WebSphere sMash ao tempo de execução do CICS TS V4.1, ajudando-o a reduzir o tempo e o custo do desenvolvimento de aplicativo CICS. O Feature Pack fornece um ambiente robusto e gerenciado para uma ampla variedade de aplicativos situacionais, permitindo que os desenvolvedores PHP e Groovy criem relatórios, painéis e widgets, integrem ativos CICS em mash-ups, e muito mais. - IBM Redbook: Developing connector applications for CICS
Aprenda a desenvolver aplicativos clientes que conectam o CICS usando CICS Transaction Gateway. - Outros Redbooks sobre CICS
IBM Redbooks cobrindo tópicos básicos e avançados relacionados ao CICS - artigo do developerWorks: Exploiting the J2EE Connector Architecture
Integrating CICS and WebSphere Application Server using XA global transactions ― Este artigo mostra como usar o J2EE Connector Architecture (JCA) e o CICS Transaction Gateway para fornecer integração transacional de aplicativos CICS e componentes J2EE implementados no WebSphere Application Server. - artigo do developerWorks: Exploiting CICS channels and containers from Java clients
Beyond the 32KB COMMAREA limit ― Este artigo mostra como usar canais e contêineres no CICS e inclui exemplos detalhados de codificação para o uso da classe ECIRequest, junto com amostras de cliente CICS e Java para uso como um cliente Java independente.
- Centros de informação de CICS
- Recursos adicionais para este artigo
- Mais informações sobre o Axis2
- Mais informações sobre Java
- Mais informações sobre OSGi
- Mais informações sobre Project Zero
- Mais informações sobre o IBM Rational Application Developer
- IBM Press book: Getting started with IBM WebSphere sMash
- Recursos do WebSphere
- Recursos para desenvolvedores WebSphere no developerWorks
Informações técnicas e recursos para desenvolvedores que usam produtos WebSphere. O WebSphere no developerWorks fornece downloads de produtos, informações de instruções, recursos de suporte e uma biblioteca técnica grátis com mais de 2.000 artigos técnicos, tutoriais, melhores práticas, IBM Redbooks e manuais on-line de produtos. - Recursos do developerWorks para desenvolvedor de integração do aplicativo WebSphere
Artigos de instruções, downloads, tutoriais, educação, informações de produto e outros recursos para ajudá-lo a desenvolver soluções de integração do aplicativo WebSphere e de integração de negócio. - Downloads de versão de teste do WebSphere mais populares
Downloads de versão gratuita de teste dos principais produtos do WebSphere. - Fóruns do WebSphere
Fóruns específicos do produto nos quais é possível obter respostas de perguntas técnicas e compartilhar o seu conhecimento com outros usuários de WebSphere. - Demos On Demand do WebSphere
Faça o download e acompanhe essas demos de execução automática, e saiba como os produtos e tecnologias WebSphere podem ajudar sua empresa a responder a um ambiente de negócios em rápida mudança e com complexidade crescente. - Boletim semanal sobre o WebSphere do developerWorks
O boletim do developerWorks oferece artigos e informações mais recentes somente naqueles tópicos que interessam a você. Além do WebSphere, é possível selecionar entre Java, Linux, Open source, Rational, SOA, serviços da web e outros tópicos. Inscreva-se agora e indique as mensagens que deseja receber. - Livros da IBM Press relacionados ao WebSphere
Compras on-line convenientes por meio da Barnes & Noble. - Eventos relacionados ao WebSphere
Conferências, exposições, Webcasts e outros eventos em todo o mundo que são do interesse dos desenvolvedores WebSphere.
- Recursos para desenvolvedores WebSphere no developerWorks
- Recursos do developerWorks
- Downloads de teste de produtos de software IBM
Downloads de teste sem custo de produtos selecionados da IBM® DB2®, Lotus®, Rational®, Tivoli®e WebSphere® de ponta. - Blogs do developerWorks
Participe de uma conversa com os usuários e autores do developerWorks, e com editores e desenvolvedores da IBM. - Recursos de computação em nuvem do developerWorks
Acesse a nuvem IBM ou Amazon EC2, teste um produto de computação em nuvem da IBM em um ambiente de simulação, assista a demos de produtos e serviços de computação em nuvem, leia artigos sobre a nuvem e acesse outros recursos sobre a nuvem. - Briefings técnicos do developerWorks
Sessões informativas técnicas grátis realizadas por especialistas IBM para acelerar a sua curva de aprendizagem e ajudá-lo a ter sucesso nos seus projetos de software mais desafiadores. As sessões informativas vão de sessões virtuais de uma hora a sessões ao vivo com meio dia e um dia inteiro de duração em cidades do mundo todo. - Podcasts do developerWorks
Ouça entrevistas e discussões interessantes com inovadores de software. - developerWorks no Twitter
Confira as nossas mensagens e URLs recentes no Twitter. - IBM Education Assistant
Uma coleção de módulos educacionais multimídia que ajudam a entender melhor os produtos de software IBM e usá-los de forma mais efetiva para atender aos seus requisitos de negócios.
- Downloads de teste de produtos de software IBM

Dennis Weiand é Client Technical Specialist em CICS, web e Java na equipe IBM Technical Sales de Dallas, TX. É possível entrar em contato com Dennis pelo email dweiand@us.ibm.com.