配置 JBoss 使用 JNDI 时出现问题

发布于 2024-09-01 06:52:40 字数 1132 浏览 4 评论 0原文

我正在尝试在 JBoss 上运行的应用程序中使用 JNDI 将连接绑定到数据库。我执行了以下操作:

  1. 创建了数据源文件 oracle-ds.xml,并用相关 xml 元素填充了它:
<数据源>;
   <本地-tx-数据源>
     bilby
     ...
    

并将其放入文件夹 \server\default\deploy

  1. 添加了相关的 oracle jar 文件

  2. 比在我执行的应用程序中:

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:

  1. 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

  1. Added the relevant oracle jar file

  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她如夕阳 2024-09-08 06:52:40

您应该使用这样的构造来调用数据源: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

妄想挽回 2024-09-08 06:52:40

要检查数据源如何绑定在 JNDI 树中,您应该使用 jmx-console
http://localhost8080/jmx-console/HtmlAdaptor?action= spectMBean&name=jboss%3Aservice%3DJNDIView
并调用 list() 方法。

数据源注册在“jdbc”下。在你的例子中“jdbc/bilby”

编辑:这是一个在没有 spring 的情况下对我有用的例子。
现在发现这个 示例 它注入了更完整的 JNDI姓名。

<bean id="idDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/bilby" />
</bean>

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.

<bean id="idDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/bilby" />
</bean>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文