【问题标题】:problem configure JBoss to work with JNDI(2)问题配置 JBoss 以使用 JNDI(2)
【发布时间】:2010-12-10 15:32:07
【问题描述】:

继续上周的问题: 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。 我创建了数据源文件:

 <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 信息 [连接工厂绑定服务] 绑定 ConnectionManager 'jb oss.jca:service=DataSourceBinding,name=bilby' 到 JNDI 名称 'java:bilby'

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

【问题讨论】:

    标签: java jboss jndi


    【解决方案1】:

    首先,我只是想确定一下,当你说的时候

    从以下位置更改连接名称: 'jndi-name' 到 'java:jndi-name'

    你的意思是java:bilby,对吧?

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

    将以下行添加到您的oracle-ds.xml,在&lt;jndi-name&gt; 元素之后:

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

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

    new InitialContext().lookup("bilby")
    

    并找回您的DataSource

    【讨论】:

    • 它没有用。即使在将“use-java-context”添加到 oracle-ds.xml 文件之后,lookup("bible") 导致 jdbc 未绑定异常
      并且 lookup("java:bilby") 返回 null 对象
    • 我看到Jboss也打印了以下信息,可能和这个问题有关? 13:37:13,870 INFO [STDOUT] WARN - Oracle9Dialect 方言已被弃用;改用 Oracle9iDialect 或 Oracle10gDialect
    • 可能存在不允许应用程序自动接收 java 资源的安全问题,我仍然需要配置其他东西来允许它?
    • 我忘了提到我正在使用 JBoss 版本 4.2.3.GA
    • @Spiderman 这个警告只是说这个 Hibernate Dialect 已被弃用,仅此而已,与您的问题无关。哦,顺便说一句,我在 JBoss 4.2.3.GA 上运行了我的答案代码。
    【解决方案2】:

    首先,我建议查看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 方法的确切内容。

    【讨论】:

    • 我不能使用默认数据源,因为它不适合连接Oracle数据库。第二 - 当我执行查找时(“bilby”)我得到 javax.naming.NameNotFoundException: jdbc not bound 当我执行查找时(“java:bilby”)它返回空对象
    • @Spiderman 这只是一个示例,如果你想连接到 Oracle,你显然不会使用 HSQLDB 的数据源......这个想法是强调 XML 注释和向您展示一段工作代码。
    • 帕斯卡你是对的。我在尝试查找“java:/DefaultDS”时也得到空值,即使此资源在 java 命名空间下可用。为什么会这样??
    • 也许我需要用一些环境而不是空构造函数来初始化 InitialContext?
    • @Spiderman:如果你在 JBoss 中运行你的应用程序,它应该是没有必要的。您是否尝试从 JBoss 外部获取此数据源?
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2015-06-21
    • 2012-05-28
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多