1

JNDIDataSourceを介して作りたい。Springすべての構成が与えられます。

誰かが構成の何が問題なのか教えてもらえますか?

ここで言及したいことの 1 つは、JNDI DS がSpringアプリケーションをホストしない JBoss サーバーでホストされていることです。

構成

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)
4

2 に答える 2

1

私はいくつかの変更を加えましたが、現在は正常に機能しています。

JNDI テンプレートは、JNP プロパティで初期化する必要があります。また、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

jbossall-client.jarそのため、問題を解決するためにPOMに依存関係を含めることを言及しているリンクを見つけました。したがって、ポンの変更は

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

すべてがうまく機能しているようです。

ありがとう。

于 2012-07-17T07:42:07.333 に答える
0

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>

それはうまくいくはずです

于 2012-07-13T19:06:44.340 に答える