继续上周的问题: 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作为我的数据源???
答案 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
方法的内容。