Não é possível acessar a fonte de dados remotamente através do JBoss

Contexto

Eu tenho um JBoss onde eu implementei com sucesso uma fonte de dados mydatasource-ds.xml . O nome JNDI é java:mydatasourceDS . O JBoss afirma que a fonte de dados é implementada com sucesso. O console JMX também é agressivo.

Problema

Eu quero usar essa fonte de dados de um aplicativo java cliente lançado em uma JVM separada. Mas recebo uma exceção dizendo que o java:mydatasourceDS não pode ser encontrado.

 java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.sql.DataSource 

Detalhes

Aqui está o arquivo persistence.xml :

    java:mydatasourceDS          

Aqui está o arquivo jndi.properties :

 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://localhost:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces 

Aqui está o caminho de class do aplicativo:

 jndi.properties log4j.properties META-INF\persistence.xml hibernate-jpa-2.0-api-1.0.0.Final.jar jnp-client-5.0.3.GA.jar jboss-common-core-2.2.14.GA.jar jboss-logging-spi-2.1.0.GA.jar hibernate-entitymanager-3.6.4.Final.jar hibernate-core-3.6.4.Final.jar antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate-commons-annotations-3.2.0.Final.jar jta-1.1.jar javassist-3.12.0.GA.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar log4j-1.2.16.jar xstream-1.4.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar 

EDIT Eu encontrei a fonte do problema. O javax.sql.DataSource que estava disponível para o meu aplicativo cliente não era aquele recebido da JNDI. O que eu recebo do JNDI é o JBoss javax.sql.DataSource . Mesmo nome MAS classs ligeiramente diferentes, portanto, o ClassCastException …

Como desta escrita, o JBoss javax.sql.DataSource pode ser encontrado neste pacote: jboss-j2ee-4.2.3.GA.jar

Este guia diz que você tem que definir

 false 

em mydatasource-ds.xml . Não tenho certeza se você fez.

Se você receber um

 javax.naming.Reference 

Isso significa que você está perdendo as dependencies de tempo de execução necessárias para resolver. Você pode inspecionar o membro classFactory do object Reference via

 getFactoryClassName() 

para descobrir a primeira dependência que você está perdendo.

No meu caso, usando o JBoss6.1, foi:

 org.jboss.resource.adapter.jdbc.remote.DataSourceFactory 

Colocar o jar esta class está no caminho de class ( common/lib/jbosscx-client.jar ) me passou o primeiro passo e, em seguida, foi uma questão de rastrear todos os erros ClassNotFoundException.

A lista completa do JBoss6.1 revelou-se:

 - client/jnp-client.jar - client/jboss-logging.jar - common/lib/jbosscx-client.jar - client/concurrent.jar - client/jboss-client.jar - client/jboss-common-core.jar - client/jboss-integration.jar - client/jboss-remoting.jar - client/jboss-security-spi.jar - client/jboss-serialization.jar - client/jboss-transaction-api_1.1_spec.jar 
Intereting Posts