Tipo de Transação e Comportamento da Conexão

Todo o uso da conexão ocorre no escopo de uma transação global ou de um limite LTC (Local Transaction Containment). Cada tipo de transação coloca requisitos diferentes nas conexões e afeta as configurações de conexão de forma diferente.

Compartilhamento e Reutilização da Conexão:

Você pode compartilhar conexões somente em um escopo de transação global (assumindo que outras regras de compartilhamento sejam atendidas). Também é possível compartilhar conexões em um LTC compartilhável. Você pode reutilizar serialmente as conexões em um escopo de LTC. Um padrão de conexão obter/utilizar/fechar, seguido por outra instância de obter/utilizar/fechar (para a mesma origem de dados ou connection factory), permite reutilizar a mesma conexão. Consulte o tópico, Conexões que Podem ser Compartilhas e Conexões que não Podem ser Compartilhas para obter mais detalhes.

Comportamento de AutoCommit de JDBC

Todas as conexões JDBC, quando obtidas primeiro por meio de uma chamada getConnection(), contêm a definição AutoCommit = TRUE por padrão. No entanto, escopos e configurações diferentes das transações podem resultar na alteração ou apenas na substituição do valor AutoCommit.
  • Se você operar em um LTC e tiver o controle de resolução definido como Aplicativo, AutoCommit permanecerá TRUE, a não ser que seja alterado pelo aplicativo.
  • Se você operar em um LTC e tiver o controle de resolução definido como ContainerAtBoundary, o aplicativo não deverá afetar a configuração AutoCommit. O tempo de execução do WebSphere Application Server configura o valor AutoCommit como FALSE antes de o trabalho começar e depois confirma ou retrocede o trabalho, conforme apropriado, no final do escopo do LTC.
  • Se você utilizar uma conexão com uma transação global, o banco de dados ignorará a definição AutoCommit, para que o serviço de transações, que controla o processo de consolidação e rollback possa gerenciar a transação. Essa ação ocorre na primeira utilização da conexão para realizar tarefas, independente do usuário alterar a definição AutoCommit. Após a conclusão da transação, o valor de AutoCommit retorna ao valor que tinha antes do primeiro uso da conexão. Portanto, mesmo que o valor AutoCommit esteja definido como TRUE antes de a conexão ser usada em uma transação global, não é necessário definir o valor como FALSE, porque esse valor é ignorado pelo banco de dados. Neste exemplo, após a conclusão da transação, o valor de AutoCommit da conexão retorna para TRUE.
  • Se você utilizar várias conexões distintas em uma transação global, é garantido que será efetuado commit ou rollback de todo o trabalho junto. Esse não é o caso para uma contenção de transação local (escopo de LTC). Dentro de uma LTC, o commit ou rollback do trabalho feito em uma conexão é feito independentemente do trabalho feito em qualquer outra conexão na LTC.

Conexões One-phase Commit e Two-phase Commit

O tipo e o número de gerenciadores de recursos, como um servidor de banco de dados, que devem ser acessados por um aplicativo determina, muitas vezes, os requisitos de transação do aplicativo. Consequentemente, cada tipo de gerenciador de recursos coloca requisitos diferentes no comportamento da conexão.
  • Um gerenciador de recursos two-phase commit pode suportar coordenação de duas fases de uma transação. Esse suporte é necessário para transações que envolvem outros gerenciadores de recursos; essas transações são globais. Consulte o tópico Suporte a Transações no WebSphere Application Server para obter mais explicações.
  • Um gerenciador de recursos one-phase commit suporta apenas transações de uma fase ou transações LTC, nas quais esse recurso é o único datastore participante. Consulte o tópico Suporte a Transações no WebSphere Application Server para obter mais explicações.

Os recursos de consolidação de uma fase são aqueles cujos trabalhos feitos em uma conexão de uma fase não podem se misturar com outras conexões e asseguram que o trabalho feito em todas as conexões seja concluído ou falhe atomicamente. O produto não permite mais de uma conexão de commit de uma fase em uma transação global. Além disso, ele não permite uma conexão de consolidação de uma fase em uma transação global com uma ou mais conexões de consolidação de duas fases. É possível coordenar apenas várias conexões de consolidação de duas fases dentro de uma transação global.

O WebSphere Application Server fornece suporte ao último participante , que permite que um único recurso one-phase commit participe de uma transação global com um ou mais recursos two-phase commit.

Note que sempre que fizer várias chamadas getConnection() usando uma referência de recurso que especifique res-sharing-scope=Unshareable, você obterá várias conexões físicas. Essa situação também ocorre quando res-sharing-scope=Shareable, mas as regras de compartilhamento são interrompidas. Seja qual for o caso, se você executar em uma transação global, certifique-se de que os recursos envolvidos estejam ativados para consolidação de duas fases (algumas vezes também referido como Ativado para JTA). A falha nesse caso resulta em uma exceção XA que registra a seguinte mensagem:
WTRN0063E:
Ocorreu uma tentativa ilegal de listar um recurso com capacidade de uma fase com um
recurso existente com capacidade de duas fases 
.

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cdat_codatc
Nome do arquivo: cdat_codatc.html