如何通过Java代码在JBoss中提取用户名,密码和数据库,或连接URL?

时间:2012-02-07 16:30:42

标签: java xml jboss jndi

有没有人知道如何通过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>

2 个答案:

答案 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/