【问题标题】:Error on configuration of JNDI lookup for WebLogic + SpringWebLogic + Spring 的 JNDI 查找配置错误
【发布时间】:2017-02-21 16:17:05
【问题描述】:

我正在将应用程序从 OC4J 迁移到 WebLogic 12c,但 Spring bean 出现错误,我不知道如何解决。我的问题是导致此错误的原因是什么。 我有以下用于 JNDI 查找的 bean:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${datasource.jndiname}" />
    <property name="lookupOnStartup">
        <value>false</value>
    </property>
    <property name="proxyInterface">
        <value>javax.sql.DataSource</value>
    </property>
</bean>

${datasource.jndiname} 应该来自config.properties 文件,其中包含以下行:

server.database.datasource=${datasource.jndiname}

server.database.datasource 的值来自config.filter 文件,其中包含以下行:

server.database.datasource=jdbc/DATASOURCE

这适用于 OC4J,当我在 WebLogic 中将 ${datasource.jndiname} 替换为其值 jdbc/DATASOURCE 时它也适用,但如果我保留引用(并且我需要保留它),它会给我以下错误:

JndiObjectTargetSource failed to obtain new target object; nested exception is javax.naming.NameNotFoundException: While trying to lookup '${datasource.jndiname}' didn't find subcontext '${datasource'. Resolved ''; remaining name '${datasource/jndiname}'

【问题讨论】:

    标签: java spring weblogic jndi


    【解决方案1】:

    经过一番研究,我找到了修复错误的 bean 的属性。将属性 resourceRef 设置为 false 会使引用 ${datasource.jndiname} 按预期工作。 在下面显示的最终代码中,我还添加了一个JndiTemplate

    <bean id="dsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.provider.url">t3://localhost:7001</prop>
                <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
            </props>
        </property>
    </bean>
    
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="${datasource.jndiname}" />
        <property name="resourceRef" value="false"/>
        <property name="lookupOnStartup" value="false"/>
        <property name="proxyInterface" value="javax.sql.DataSource"/>
        <property name="jndiTemplate">
            <ref local="dsJndiTemplate" />
        </property>
    </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多