[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Até agora...



	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...>