【问题标题】:Spring 3+ Weblogic and JNDI issueSpring 3+ Weblogic 和 JNDI 问题
【发布时间】:2013-05-30 19:19:38
【问题描述】:

这是我的第二个问题,希望这次有人能回答。 我正在使用 weblogic 10 和 EJB 2,但现在我要在 Spring 3 中创建一个新模块。

一切正常,但我无法在 spring 上下文 xml 中使用 JNDI 提供的现有数据源对象 ....

这是文件

Weblogic 配置.xml

<jdbc-system-resource>
    <name>EOrderDataSource</name>
    <target>adeccoClubServer</target>
    <descriptor-file-name>jdbc/EOrderDataSource-jdbc.xml</descriptor-file-name>
  </jdbc-system-resource>
  <jdbc-system-resource>

EOrderDataSource-jdbc.xml

<?xml version='1.0' encoding='UTF-8'?>
<jdbc-data-source xmlns="http://www.bea.com/ns/weblogic/90" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xsi:schemaLocation="http://www.bea.com/ns/weblogic/920 http://www.bea.com/ns/weblogic/920.xsd">
  <name>EOrderDataSource</name>
  <jdbc-driver-params>
    <url>jdbc:oracle:thin:@dicmdb01:1512:o2ks1</url>
    <driver-name>oracle.jdbc.OracleDriver</driver-name>
    <properties>
      <property>
        <name>user</name>
        <value>asd</value>
      </property>
    </properties>
    <password-encrypted>asd</password-encrypted>
  </jdbc-driver-params>
  <jdbc-connection-pool-params>
    <initial-capacity>2</initial-capacity>
    <max-capacity>2</max-capacity>
    <capacity-increment>2</capacity-increment>
    <test-frequency-seconds>7200</test-frequency-seconds>
    <test-connections-on-reserve>true</test-connections-on-reserve>
    <test-table-name>DUAL</test-table-name>
  </jdbc-connection-pool-params>
  <jdbc-data-source-params>
    <jndi-name>EOrderDataSource</jndi-name>
    <global-transactions-protocol>EmulateTwoPhaseCommit</global-transactions-protocol>
  </jdbc-data-source-params>
</jdbc-data-source>

还有我的调度器 servlet

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/jee
                        http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
                        http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <mvc:annotation-driven/>
    <context:annotation-config />   

    <context:component-scan
        base-package="com.adecco.spring" />

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <jee:jndi-lookup id="dataSource" jndi-name="weboDataSource" expected-type="javax.sql.DataSource"/>

</beans>

Dispatcher Servet 手动连接,效果很好

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <mvc:annotation-driven/>
    <context:annotation-config />   

    <context:component-scan
        base-package="com.adecco.spring" />

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@dicmdb01:1512:o2kd1" />
        <property name="username" value="abcd" />
        <property name="password" value="xyz" />
    </bean>
</beans>

即使在 Java 端,获取数据源对象也非常简单,并且工作正常:

Context ctx = new InitialContext ();

DataSource ds = (DataSource) ctx.lookup ("EOrderDataSource");

【问题讨论】:

    标签: spring weblogic jndi


    【解决方案1】:

    您的 spring 配置中有 jndi-name="weboDataSource",WebLogic 配置中有 &lt;jndi-name&gt;EOrderDataSource&lt;/jndi-name&gt;。这些名称不匹配。

    【讨论】:

    • 对不起 - 这是一个错字,spring config 正在使用 - EOrderDataSource
    • 请帮忙!!!目前我的 weblogic 有 2 个具有 JNDI 名称的 JDBC 数据源 - EOrderDataSource 和 weboDataSource ...我正在使用 EorderDataSource。
    • 尝试在 jndi-lookup 元素中使用 resource-ref="true" 属性。
    • 代码: 还是同样,在启动 weblogic 时出现以下错误无法自动装配方法: public void com.adecco.spring.data.SpOfficeDAO.setDataSource(javax.sql.DataSource);嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [javax.sql.DataSource] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{}
    • 你也可以试试lookup-on-startup="true"
    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2019-12-17
    • 2020-03-06
    • 1970-01-01
    • 2013-04-09
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多