# J2EE Connector Architecture

A arquitectura de conectores Java EE (JCA - Java EE Connector Architecture) é uma solução tecnológica baseada na linguagem de programação Java para conectar um servidor de aplicação a um sistema de informação corporativo (EIS - enterprise information system). É considerada um componente de integração de aplicações corporativas (EAI - enterprise application integration).
O JCA é uma arquitetura genérica para ligar aplicações J2EE a sistemas legados desenvolvidos em arquitecturas heterogéneas (possivelmente fora da plataforma Java, incluindo bases de dados). O JCA foi desenvolvido ao abrigo do Processo Comunitário Java (JCP - Java Community Process) nas especificações de JSR 16 (JCA 1.0) a na JSR 112 (JCA 1.5). Em 2008, a versão corrente do JCA é a 1.5.
Ao usar a JCA, os vendedores de EIS que foram desenvolvidos noutras arquitecturas não terão de criar uma forma de ligação específica para um servidor aplicacional Java 2 EE. Exemplos de aplicações poderão ser ERP(s) como o SAP ou mesmo sistemas mais genéricos como linguagens de programação da alto nível como Cobol ou 4GL(s).
Ao componente que serve ligar o EIS ao servidor aplicacional Java 2 EE chama-se Adaptador de Recursos (RA - Resource Adapter).
O JDBC - Java Database Connection é usado especificamente para ligar aplicações Java a bases de dados e pode ser considerado como uma implementação de um adaptador de recursos para ligação a bases de dados SQL.
Como facilmente se pode compreender, ao usar um RA a integração de qualquer aplicação com um servidor aplicacional Java 2 EE torna-se mais rápida e muito mais barata.

## Componentes

As componentes envolvidas no JCA são:
* EIS - O sistema legado remoto com o qual os componentes aplicacionais devem integrar.
* Componentes aplicacionais - Partes da aplicação desenvolvidos em Java ou J2EE (por exemplo EJB) que devem integrar com o EIS.
* Servidor aplicacional - Este software (por exemplo JBoss ou Geronimo) disponibiliza o ambiente de runtime (contentor J2EE) em que os componentes aplicacionais e ou adaptador de recursos são executados. Também fornece serviços de baixo-nível como : gestão de conexões ; transações e segurança. Estes serviços são geridos pelas seguintes componentes do servidor:
** Gestor de conexões - Implementa a gestão dos mecanismos de pool de conexões incluindo o ciclo de vida, com a fabricas de instanciação, lista de ocupados ou livres.
** Gestor de transações - Implementa, no servidor aplicacional, as tarefas de gestão das transações de acordo com o standard JTA do J2EE.
** Gestor se segurança - Trata das tarefas relativas a autorização e autenticação no servidor, trabalhando com o standard JAAS do J2EE.
* Adaptador de recursos - Este componente liga os componentes aplicacionais com o EIS, implementando serviços, ao nível do sistema específicos do EIS. Desta forma cria um escudo nos componentes aplicacionais dos serviços específicos do EIS. É inserido (deployed) no servidor aplicacional usando contratos standardizados.

## O Standard

A versão do JCA em Agosto de 2006 é a 1.5, definida pelo standard JSR 112 do Java Community Process.
O standard define:
* Os contratos de sistema entre o servidor aplicacional e o adaptador de recursos.
* O interface comum de cliente - CCI.
* O protocolo de deployment e empacotamento dos adaptadores de recursos (diferente para os vários tipos : outbound, inbound ou ambos).
* O contrato de gestão do ciclo de vida do adaptador de recursos.
* O contrato de gestão do trabalho.
* O contrato para o influxo de transações.
* O contrato para o influxo de mensagens.

## Adaptador de recursos

O adaptador de recursos tem o principal papel na integração e conectividade bidireccional entre o EIS e o servidor aplicacional. É o ponto de contacto entre as componentes aplicacionais, o servidor aplicacional e o EIS. O RA, tal como os outros componentes devem comunicar uns com os outros usando um contrato bem definido especificado pela Java 2 EE Connector Architecture.
Para habilitar a integração com o servidor aplicacional, um adaptador de recursos tem de cumprir algumas regras, conhecidas como contratos ao nível do sistema, que devem ser definidas pela arquitectura de conectores. Estes contratos existem entre o servidor aplicacional e o EIS, e são implementadas através do adaptador de recursos.
Ao objecto que permite as ligações entre o ciente e o EIS chama-se 'Conexão'. É nele que estão disponíveis métodos que permitem comunicar com o EIS.
Estes contratos especificam a forma como um sistema externo pode integrar como J2EE suportando as funções básicas que serão geridas pelo servidor aplicacional em componentes que genéricamente se chamam gestores de recursos. As principais características destas funções são:
* Gestão de conexões - O contrato de gestão de conexões permite às aplicações conectar-se ao EIS. Para além da criação e destruição de conexões disponibiliza um serviço de gestão de pool(s) de conexões.
* Gestão de transações - A gestão de transações permite às aplicações gerirem e realizarem acesso transacional através de um ou vários gestores de recursos EIS.
* Segurança - O contrato de segurança disponibiliza suporte para acesso seguro ao EIS.

## Contratos padronizados

Os contratos e interfaces padronizados entre as diferentes partes são contratos entre o contentor e os componentes, chamados contratos de sistema, e o interface opcional interface comum com o cliente (CCI - common client interface). O adaptador de recursos usa os contratos específicos (que só o adaptador e o EIS conhecem) para comunicar com o EIS.
* Contrato entre o contentor e as componentes: Contratos de Componentes J2EE padronizam a interação entre os componentes da aplicação e o servidor de aplicações. Por exemplo, no caso de EJBs, o contrato é a especificação do "Enterprise JavaBeans" e suas diferentes garantias e interfaces entre containers EJB EJBs hospedados sendo executados dentro do container. Atributos transacionais, atributos de segurança, outros atributos comuns aos componentes J2EE, interfaces e serviços são bem integrados com os contratos de sistemas J2EE CA (mencionados abaixo). Isto é porque as funções J2EE como Bridge entre o adaptador de recursos e o restante do servidor de aplicações J2EE, seus serviços, containers, e alguns componentes executando nestes containers.
* Contratos de sistema: Os contratos do JCA entre o servidor aplicacional e o adaptador de recursos servem para padronizar coisas como a gestão de segurança e transações.
* CCI: Estes interfaces são uma API que padroniza a interação entre os componentes aplicacionais e o adaptador de recursos. Apesar de ser uma excelente funcionalidade é opcional e por isso nem todos os adaptadores de recursos disponibilizam a sua implementação. Alguns adaptadores de recursos, em alternativa oferecem métodos de interação específica com as componentes aplicacionais.

## Interface Comum com o Cliente

O CCI corresponde ao interface tipico na conexão com aplicações EIS.
É opcional pois podem existir casos muito concretos em que o conceito da comunicação seja muito pouco usual e deve ser deixada uma porta aberta para os casos especiais.
Sempre que possível deve ser usado para que sejam reduzidos os custos de formação e adaptação das equipas que irão apenas precisar de conhecer um interface de ligação (em detrimento de n se usar uma específica para cada connector).

## Gestão do ciclo de vida

O contrato para gestão do ciclo de vida permite ao servidor aplicacional saber o que está disponível no resource adapter para efectuar tarefas quando ocorrem eventos, como por exemplo:
* O servidor aplicacional é iniciado
* O servidor aplicacional é desligado
* É efectuado o deploy do adaptador de recursos
* É efectuado o undeploy do adaptador de recursos
* Ocorre algo no servidor aplicacional que faz com que o adaptador de recursos não possa funcionar normalmente
Devem ser implementadas funcionalidades como:
* start - Executado quando o servidor aplicacional acha que tem de iniciar o adaptador de recursos, inicio do AS ou deploy.
* stop -