【问题标题】:problem configure JBoss to work with JNDI问题配置 JBoss 以使用 JNDI
【发布时间】:2011-02-19 04:06:57
【问题描述】:

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

  1. 我创建了数据源文件 oracle-ds.xml 用相关的 xml 元素填充它:
<datasources>
   <local-tx-datasource>
     <jndi-name>bilby</jndi-name>
     ...
    </local-tx-datasource>
</datasources>

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

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

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

JndiObjectFactoryBean 工厂 = 新 JndiObjectFactoryBean();

 factory.setJndiName("bilby");
 try{
     factory.afterPropertiesSet();
     dataSource = factory.getObject();
 }
 catch(NamingException ne) {
     ne.printStackTrace();
 }

这会导致错误:

javax.naming.NameNotFoundException: bilby 未绑定

然后在输出中发生此错误后我看到了这一行:

18:37:56,560 信息 [连接工厂绑定服务] 绑定 ConnectionManager 'jb oss.jca:service=DataSourceBinding,name=bilby' 到 JNDI 名称 'java:bilby'

那么我的配置问题是什么?我认为可能是 JBoss 首先加载并运行我的应用程序的 .war 文件,然后才加载包含我的数据源定义的 oracle-ds.xml。 问题是它们都位于同一个文件夹中。 有没有办法定义加载它们的优先级,或者这根本不是问题。

有什么想法吗?

【问题讨论】:

    标签: java jboss jndi


    【解决方案1】:

    你应该使用这样的构造来调用Datasource:java:bilby。

    您可以在此处阅读更多相关信息:

    Naming and Directory (JNDI) - JBOSS jndi Datasource: jdbc not bound

    【讨论】:

    • 我尝试了两个答案的建议。我查看了 jmx-console 中的 list() 打印内容,发现 'bilby' 已在 java:Namespace 下注册。我试图通过以下方式调用此连接: factory.setJndiName("java:bilby"); factory.setJndiName("java/bilby"); factory.setJndiName("jdbc/bilby");但是他们都没有找到 jndi 资源!还有其他建议吗?
    • stackoverflow.com/questions/2843218/… 上查看此步骤的延续
    • 也许您可以检查您的连接是否在 JNDI 树中退出。您可以使用 twiddle 命令或 jmx-console。这里有如何使用 twiddle 的示例: twiddle.sh 调用 jboss:service=JNDIView list true 如果你有安全的 jmx-console,你应该使用 -u 或 -p 参数传递凭证。如果您的服务器在 localhost 的其他地方运行,您还应该设置 -s 参数。 PS。很抱歉在这里回答,但我无法在你的新线程上添加 cmets,我很确定这不是答案 :)
    • 这是令人沮丧的一部分——我看到数据源存在于树中。我在我的机器上本地运行 JBoss,我可以通过 JBoss Web 控制台看到它。它在 System-->JMX Mbeans --> jboss.jdbc-->jboss.jdbc:service=metadata,datasource=bilby 下,它的 stateString 是“Started”,所以它似乎只是启动并运行我无法接近它来自我的应用程序)-:
    • 我忘了提到我正在使用 JBoss 版本 4.2.3.GA
    【解决方案2】:

    要检查数据源在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2015-06-21
      • 2012-05-28
      • 2014-10-05
      • 1970-01-01
      • 2010-12-23
      相关资源
      最近更新 更多