配置 JBoss 使用 JNDI 时出现问题
我正在尝试在 JBoss 上运行的应用程序中使用 JNDI 将连接绑定到数据库。我执行了以下操作:
- 创建了数据源文件 oracle-ds.xml,并用相关 xml 元素填充了它:
<数据源>; <本地-tx-数据源>
bilby ...
并将其放入文件夹 \server\default\deploy
添加了相关的 oracle jar 文件
比在我执行的应用程序中:
JndiObjectFactoryBean 工厂 = 新 JndiObjectFactoryBean();
factory.setJndiName("bilby"); 尝试{ 工厂.afterPropertiesSet(); 数据源=factory.getObject(); } catch(NamingException ne) { ne.printStackTrace(); }
这会导致错误:
javax.naming.NameNotFoundException: 兔耳袋狸未绑定
然后在输出中发生此错误我看到了这一行:
18:37:56,560 信息 [连接工厂绑定服务] 绑定连接管理器'jb oss.jca:service=DataSourceBinding,name=bilby' JNDI 名称“java:bilby”
那么我的配置问题是什么?我认为 JBoss 可能首先加载并运行我的应用程序的 .war 文件,然后才加载包含我的数据源定义的 oracle-ds.xml。 问题是它们都位于同一文件夹中。 有没有办法定义加载它们的优先级,或者也许这根本不是问题。
有什么想法吗?
I am trying to bind connection to the DB using JNDI in my application that runs on JBoss. I did the following:
- I created the datasource file oracle-ds.xml filled it with the relevant xml elements:
<datasources> <local-tx-datasource> <jndi-name>bilby</jndi-name> ... </local-tx-datasource> </datasources>
and put it in the folder \server\default\deploy
Added the relevant oracle jar file
than in my application I performed:
JndiObjectFactoryBean factory = new
JndiObjectFactoryBean();factory.setJndiName("bilby"); try{ factory.afterPropertiesSet(); dataSource = factory.getObject(); } catch(NamingException ne) { ne.printStackTrace(); }
and this cause the error:
javax.naming.NameNotFoundException:
bilby not bound
then in the output after this error occured I saw the line:
18:37:56,560 INFO
[ConnectionFactoryBindingService]
Bound ConnectionManager 'jb
oss.jca:service=DataSourceBinding,name=bilby'
to JNDI name 'java:bilby'
So what is my configuration problem? I think that it may be that JBoss first loads and runs the .war file of my application and only then it loads the oracle-ds.xml that contain my data-source definition.
The problem is that they are both located in the same folder.
Is there a way to define priority of loading them, or maybe this is not the problem at all.
Any idea?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用这样的构造来调用数据源:java:bilby。
您可以在这里阅读更多相关信息:
命名和目录 (JNDI) - JBOSS jndi 数据源:jdbc未绑定
You should use such construction to call Datasource: java:bilby.
You can read more about that here:
Naming and Directory (JNDI) - JBOSS jndi Datasource: jdbc not bound
要检查数据源如何绑定在 JNDI 树中,您应该使用
jmx-console
http://localhost8080/jmx-console/HtmlAdaptor?action= spectMBean&name=jboss%3Aservice%3DJNDIView
并调用
list()
方法。数据源注册在“jdbc”下。在你的例子中“jdbc/bilby”
编辑:这是一个在没有 spring 的情况下对我有用的例子。
现在发现这个 示例 它注入了更完整的 JNDI姓名。
To check how the datasource is bound in the JNDI tree you should use the
jmx-console
http://localhost8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss%3Aservice%3DJNDIView
and invoke the
list()
method.Datasources are registered under "jdbc". In your case "jdbc/bilby"
EDIT: That was an example that works for me without spring.
Now found this example which injects a more complete JNDI name.