Estou tentando usar o JBoss como um provider JNDI. Para isso configurei um ds.xml para registrar um DataSource no JNDI e nesta configuração utilizei a tag <use-java-context>false</use-java-context>, porque eu preciso acessar esse DataSource de fora do JBoss, ou seja, vou utilizar de uma aplicação J2SE. Eu consigo recuperar vários objetos do JNDI, mas o DataSource não é possível. Quando eu faço o lookup com o nome do DataSource ele recupera um objeto que é do tipo javax.naming.Reference. Então se eu tentar fazer um cast para DataSource é jogada uma exceção de ClassCastException. Alguém pode me ajudar, ou sabe com instanciar o DataSource a partir deste objeto Reference ?
Toko,
Fiz um exemplo e funcionou perfeitamente. Rodei o JBoss no IP 192.168.1.26, o servidor de banco de dados Oracle no IP 192.168.1.3 e a aplicação no IP 192.168.1.32
public class AppTeste {
public static void main(String[] args) {
try {
AppTeste app = new AppTeste();
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "192.168.1.26");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(env);
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:/OracleDataSource");
java.sql.Connection conn = ds.getConnection();
PreparedStatement p = conn.prepareStatement("select * from crdcont");
ResultSet rs = p.executeQuery();
while(rs.next()) {
String nome = rs.getString("CNOMECONT");
System.out.println(nome);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
No arquivo oracle-ds.xml
<datasources>
<local-tx-datasource>
<jndi-name>OracleDataSource</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:oracle:thin:@//192.168.1.3:1521/SERVICE</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>usuario</user-name>
<password>minhaSenha</password>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
Espero que te ajude.
@braços,
Cleiton