2017-02-21 253 views
0

我正在將應用程序從OC4J遷移到WebLogic 12c,並且Spring bean發出錯誤,我找不出如何解決。我的問題是什麼可能是這個錯誤的原因。 我對JNDI查找下面bean:配置WebLogic + Spring的JNDI查找時出錯

<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,它也禾RKS當我更換${datasource.jndiname}其在WebLogic中值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}' 

回答

0

經過一番研究,我發現了一個屬性修復錯誤的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>