有没有人知道如何通过Java代码在JBoss / JNDI中提取用户名,密码和数据库或连接URL?
我需要这个直接连接数据库,不使用连接池,而是利用JNDI配置。
这是我的JNDI配置:
<datasources>
<local-tx-datasource>
<jndi-name>WonderDesenv</jndi-name>
<connection-url>jdbc:oracle:thin:@192.168.0.74:1521:DESENV</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>wonder</user-name>
<password>wonder</password>
<min-pool-size>1</min-pool-size>
<max-pool-size>50</max-pool-size>
<idle-timeout-minutes>10</idle-timeout-minutes>
<prepared-statement-cache-size>30</prepared-statement-cache-size>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<new-connection-sql>
</new-connection-sql>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
<track-statements>true</track-statements>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
答案 0 :(得分:2)
你还没有像EJB等那样指定你使用的东西....无论如何,
您需要在web.xml中添加它
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/WonderDesenv</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
和简单的上下文查找
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/WonderDesenv");
Connection conn = ds.getConnection();
....
答案 1 :(得分:1)
您必须通过JNDI获取DataSource对象,然后将其向下转换为JBoss为您提供的特定类。确切的类取决于您正在创建的数据源的类型。 (XA vs local)由iteself提供的DataSource没有对连接信息的引用。如果您发布-ds.xml文件,它可能会有所帮助。
更新:我想我经过一番搜索后找到了你的解决方案。如果您可以引用JNDI数据源,那就更清晰了。这比自己创建连接要好得多,因为这会利用jboss连接池的安全性。
https://syntatic.wordpress.com/2008/08/20/connection-pooling-for-rails-on-jruby-using-jndi-and-jdbc/