【问题标题】:Spring, configure the DataSource through JNDI having remote JBoss ServerSpring,通过具有远程 JBoss 服务器的 JNDI 配置数据源
【发布时间】:2012-07-13 08:59:31
【问题描述】:

我想通过 JNDI 在Spring 中创建DataSource。所有的配置都给了。

谁能告诉我配置有什么问题。

我想在这里提到的一件事是 JNDI DS 托管在 JBoss 服务器上,该服务器不托管 Spring 应用程序。

配置

datasource-ds.xml

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/wc-mysql</jndi-name>
    <connection-url>jdbc:mysql://xx.xx.xx.xx:3306/club</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>club</user-name>
    <password>club</password>
    <exception-sorter-class-name>
      org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
    </exception-sorter-class-name>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <use-java-context>false</use-java-context>
    <metadata><type-mapping>mySQL</type-mapping></metadata>
  </local-tx-datasource>
</datasources>

configContext.xml

<bean id="wcDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/wc-mysql" />
  <property name="jndiEnvironment">
    <props>
      <prop key="java.naming.provider.url">jnp://yy.yy.yy.yy:1099</prop>
      <!-- 
      <prop key="java.naming.factory.initial">
        org.springframework.mock.jndi.SimpleNamingContextBuilder
      </prop>
      <prop key="java.naming.factory.url.pkgs">yourPackagePrefixesGoHere</prop> -->
      <!-- other key=values here -->
    </props>
  </property>
  <!-- other properties here-->
</bean>

例外

Caused by: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
        at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)

【问题讨论】:

    标签: java spring jakarta-ee datasource jndi


    【解决方案1】:

    你的遥控器JNDI这行没有问题

     <use-java-context>false</use-java-context>
    

    会处理的。

    您的 JNDI 名称值有问题:

    javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
    

    在您的 applicationConfig.xml 中更改此项

    <property name="jndiName" value="jdbc/wc-mysql" />
    

    <property name="jndiName" value="java:/jdbc/wc-mysql"></property>
    

    应该可以的

    【讨论】:

    • 据我所知,java: 前缀用于在同一 JEE 环境中查找。当我试图连接到远程服务器时。所以我需要提到 JNP Url。
    【解决方案2】:

    我做了一些改动,现在工作正常。

    必须使用 JNP 属性初始化 JNDI 模板。并且 JBoss 服务器的 URL 必须在该属性中。

    configContext.xml

    <bean id="wcJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
                <prop key="java.naming.provider.url">jnp://jndi.myURL.me:1099</prop>
                <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
                <prop key="jnp.disableDiscovery">true</prop>
            </props>
        </property>
    </bean>
    
    <bean id="wcDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jdbc/wc-mysql"/>
        <property name="resourceRef" value="false"/>
        <property name="jndiTemplate" ref="wcJndiTemplate" />
    </bean>
    

    但是在进行了这些更改之后,我遇到了异常

    java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
    

    所以我找到了一个链接,提到在 POM 中包含 jbossall-client.jar 的依赖项来解决问题。所以 pom 的变化是

    <dependency>
        <groupId>jboss</groupId>
        <artifactId>jbossall-client</artifactId>
        <version>4.2.2.GA</version>
    </dependency>
    

    一切似乎都运行良好。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 2017-12-10
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2018-02-23
      • 2021-01-12
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多