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