WebLogic 的 JNDI 查找配置错误 + Spring

Error on configuration of JNDI lookup for WebLogic + Spring

我正在将应用程序从 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}'

经过一些研究,我找到了 属性 用于修复错误的 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>