问题配置JBoss使用JNDI(2)

时间:2010-05-16 09:40:35

标签: java jboss jndi

继续上周的问题: problem configure JBoss to work with JNDI

我正在尝试在JBoss中绑定数据源并在我的应用程序中使用它。在我的挣扎中,我已经设法通过以下方式避免javax.naming.NameNotFoundException:
1.在java new InitialContext().lookup(connection);中使用
而不是new JndiObjectFactoryBean().setJndiName(connection);
2.将连接名称从''jndi-name'更改为'java:jndi-name'

现在的问题是我从查询中得到的数据是 null 。 我创建了datsource文件:

 <datasources>  
   <local-tx-datasource>
    <jndi-name>bilby</jndi-name>
    <connection-url>jdbc:oracle:myURL</connection-url>
    <driver-class>oracle.jdbc.OracleDriver </driver-class>
    <user-name>myUsername</user-name>
    <password>myPassword</password>        
    <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>

并将其放在\ server \ default \ deploy \ oracle-ds.xml下 我在运行时得到了这一行:

  

18:37:56,560 INFO   [ConnectionFactoryBindingService]   绑定ConnectionManager'jb   oss.jca:服务= DataSourceBinding,名称= bilby”   到JNDI名称'java:bilby'

所以我的问题是 - 为什么我得到null作为我的数据源???

2 个答案:

答案 0 :(得分:1)

首先,我只想确保你说的时候

  

更改连接名称:   'jndi-name'到'java:jndi-name'

你真的是java:bilby,对吧?

我不确定为什么会发生这种情况,但我可以提出一个解决方法。

oracle-ds.xml元素后面的<jndi-name>添加以下行:

<use-java-context>false</use-java-context>

部署它时,它应该从JNDI绑定中删除java:前缀。然后你应该可以使用:

new InitialContext().lookup("bilby")

让你的DataSource回来。

答案 1 :(得分:0)

首先,我建议查看JBOSS_DIST/docs/examples/jca中可用的所有配置选项(包括池大小调整参数)的示例。

其次,我使用hsqldb-ds.xml中配置的默认数据源进行了快速测试,其定义如下:

<datasources>
   <local-tx-datasource>

      <!-- The jndi name of the DataSource, it is prefixed with java:/ -->
      <!-- Datasources are not available outside the virtual machine -->
      <jndi-name>DefaultDS</jndi-name>

      ...

</datasource>

以下查找正常:

DataSource ds = null;
Connection conn = null;
try {
    ds = (DataSource) new InitialContext().lookup("java:/DefaultDS");
    conn = ds.getConnection();
    // ...
    conn.close();
} catch (Exception e) {
    // handle me
}

如果这不适合您,可以准确说明您传递给lookup方法的内容。