我正在尝试在我的JBoss上运行的应用程序中使用JNDI绑定到数据库的连接。我做了以下事情:
<datasources> <local-tx-datasource> <jndi-name>bilby</jndi-name> ... </local-tx-datasource> </datasources>
并将其放在文件夹\ server \ default \ deploy
中添加了相关的oracle jar文件
比在我的申请中执行:
JndiObjectFactoryBean factory = new 的JndiObjectFactoryBean();
factory.setJndiName("bilby"); try{ factory.afterPropertiesSet(); dataSource = factory.getObject(); } catch(NamingException ne) { ne.printStackTrace(); }
这会导致错误:
javax.naming.NameNotFoundException: bilby没约束
然后在输出发生此错误后我看到了这一行:
18:37:56,560 INFO [ConnectionFactoryBindingService] 绑定ConnectionManager'jb oss.jca:服务= DataSourceBinding,名称= bilby” 到JNDI名称'java:bilby'
那么我的配置问题是什么?我认为可能是JBoss首先加载并运行我的应用程序的.war文件,然后才加载包含我的数据源定义的oracle-ds.xml。 问题是它们都位于同一个文件夹中。 有没有办法定义加载它们的优先级,或者这根本不是问题。
有什么想法吗?
答案 0 :(得分:2)
您应该使用此类构造来调用Datasource:java:bilby。
您可以在此处详细了解:
Naming and Directory (JNDI) - JBOSS jndi Datasource: jdbc not bound
答案 1 :(得分:0)
要检查数据源在JNDI树中的绑定方式,您应该使用jmx-console
http://localhost8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss%3Aservice%3DJNDIView
并调用list()
方法。
数据源在“jdbc”下注册。在你的情况下“jdbc / bilby”
编辑:这是一个没有春天对我有用的例子。 现在发现这个example注入了一个更完整的JNDI名称。<bean id="idDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/bilby" />
</bean>