[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Até agora...
- Subject: Até agora...
- From: Roberto Speicys Cardoso <speicys@ime.usp.br>
- Date: Fri, 29 Nov 2002 09:18:53 -0200 (EDT)
Vou tentar resumir o que eu consegui entender até agora do ep.
A documentação do jta descreve em linhas gerais como deve ser
feito o processo de recovery em caso de falhas, e quais são as mensagens
trocadas pelo sistema durante uma transação.
A aplicação só precisa dar um getConnection, fazer o que precisa
no banco, e dar um close na conexão durante uma transação.. Quando o jboss
recebe o getConnection, ele pega uma referência para o banco e depois
pega uma referência XA deste recurso (getXAResource()).
Esta referência XA é utilizada para alistar os recursos envolvidos
na transação através do método enlistResource() da classe TxManager ou
da TransactionImpl, não me lembro qual. Depois que a aplicação executa um
close, todos recursos são desalistados (delistResource()) e só então é
feito o prepare e finalmente o commit.
Para fazer a recuperação, a documentação sugere utilizar o método
XAResource.recover(). Este método retorna uma lista de todas as transações
em prepare ou completas.O processo de recovery seria mais ou menos assim:
para cada banco configurado
pega referência XA
lista de transações=XAResource.recover()
para cada id da lista de transações
se id=this.id e this.status=committed
commit(id)
se this.id ñ pertence à lista
prepare(id)
se this.status=committed
commit(id)
Isto deve estar errado, foi a primeira vez que tentei descrever. O
importante é que para conseguir fazer isso, devemos ter uma referência
para cada DataSource configurado no jboss. Isto não é tão difícil, já que
as referências aos DataSources ficam no jndi, em java:. Daí pegar uma
referência XA para o banco é fácil:
DataSource ds=ctx.resolve("...");
Connection cn=ds.getConnection();
XAResource xares=cn.getXAResource();
O problema é testar. Para tentar ver se isso vai funcionar, é
preciso configurar o jboss para utilizar uma base de dados com suporte a
XA. Graças a Deus, nosso amigo Hypersonic não tem este suporte. No
diretório doc/examples/jca do jboss existem alguns arquivos de
configuração para outras bases de dados. Neste diretório vemos que as
únicas bases de dados que falam XA com o jboss são: oracle, informix e
M$SQL Server. Portanto teríamos que conseguir dois servidores de banco de
dados, com algum destes bancos instalados, e configurar o jboss para
apontar para eles para testar. Estou tentando configurar o jboss para usar
SQL Server. Coloquei o arquivo mssql-xa-service no diretório de deploy
(alterando seu conteúdo de acordo), instalei o driver jdbc e mexi em
algumas configurações no arquivo jbosscmp-jdbc.xml do primeiro ep. Acho
que teria que por no diretório deploy o arquivo mssql-xa-ds.xml também,
sei lá.. Se eu conseguir fazer funcionar, aviso.
Eu não achei outro jeito. Se alguém descobriu mais alguma coisa,
eu gostaria de saber. E se eu viajei em algum pedaço, me avisem! Espero
que isso possa ajudar alguém...
Abraços,
Beto
<speicys@etc...>