Problema com JTA - Java Transaction API[não resolvido]

3 respostas
Romeo

Olá a todos, estou tentando implementar JTA na minha aplicação seguindo estes exemplos neste site http://archive.devx.com/java/free/articles/dd_jta/jta-2.asp

Porém estou com problema neste trecho...

public DataSource getDataSource()
    throws SQLException
{
    SQLServerDataSource xaDS = new
        com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();
    xaDS.setDataSourceName("SQLServer");
    xaDS.setServerName("server");
    xaDS.setPortNumber(1433);
    xaDS.setSelectMethod("cursor");
    return xaDS;
}


XADataSource xaDS;
XAConnection xaCon;
XAResource   xaRes;

xaDS = getDataSource();
xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes = xaCon.getXAResource();

A partir deste exemplo fiz o seguinte código...

public MysqlDataSource getDataSource() throws SQLException {
		
    MysqlDataSource xaDS = new MysqlDataSource();   
    xaDS.setDatabaseName("romeo");
    xaDS.setServerName("localhost");
    xaDS.setPortNumber(3307);
    
    return xaDS;
}
	public void Transacao() throws SQLException{
		
		XADataSource xaDS;
		XAConnection xaCon;
		XAResource   xaRes;
				
		xaDS = (XADataSource) getDataSource();
		xaCon = xaDS.getXAConnection("root", "root");
		xaRes = xaCon.getXAResource();

Olhando as classes do meu Driver mysql achei apenas a MysqlDataSource. No entanto ocorre um erro pois não consigo fazer um cast de MysqlDataSource para XADataSource...

Alguém sabe qual seria o problema? O MySQl não suporta XAResource? Ou o meu driver (mysql-connector-java-3.1.12-bin.jar) esta desatualizado e preciso pegar um atualizado?

Uso MySQl 5, e as tabelas são InnoDB. Muito obrigado pela atenção... :)

3 Respostas

Romeo

Baixei o ultimo driver do mySQl ( mysql-connector-java-5.0.5-bin.jar ) e o erro aparentemente foi solucionado, o MySQL 3 não suportava XAResource…

Agora o cast funciona, porém surgiu um outro problema, este é o erro que dá no console…

Exception in thread "main" java.lang.NoSuchMethodError: com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.getPinGlobalTxToPhysicalConnection()Z at com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.wrapConnection(MysqlXADataSource.java:68) at com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.getXAConnection(MysqlXADataSource.java:60)

Tentei inserir a seguinte linha após analisar o erro…

xaDS.setPinGlobalTxToPhysicalConnection(false);//com true também

mas o erro continuou, parece que não há o método no jar, alguém sabe o que seria??? Obrigado, Romeo :slight_smile:

Romeo

Ninguém aqui sabe a solução deste problema mesmo?

pesquisei o que este método faz(setPinGlobalTxToPhysicalConnection) e ja entendi o que ele faz. Na classe MysqlXADataSource ele a usa, porém seu método não aparece ao usar o Package Explorer do Eclipse.

No entanto ao percorrer os métodos disponíveis ao tipo MysqlXADataSource eu encontro o método citado.

Procurei nos fóruns do DEV e do mysql e a única dúvida igual a minha não foi respondida…

Será tão impossível assim usar XA com MySQL??? Se for o caso vou mudar de BD…

Obrigado pela atenção, Romeo…

ronaldocwb

Romeo, conseguiu resolver esse problema??

Criado 9 de abril de 2007
Ultima resposta 30 de out. de 2008
Respostas 3
Participantes 2