簡體   English   中英

NameNotFoundException:僅在從Eclipse Kepler發布而不是Indigo時才嘗試查找'jdbc'

[英]NameNotFoundException: While trying to lookup 'jdbc' only when publishing from Eclipse Kepler but not Indigo

我可以使用oepe 12.1.1.1.1將我的web-app從Eclipse Indigo 3.7.2發布到Oracle Weblogic 12c(12.1.1)AdminServer

但是,使用oepe 12.1.2.2導入到Eclipse Kepler 4.3.1中的完全相同的web-app無法使用以下(相當完善的例程)異常發布,並且我試圖找出原因?...

NameNotFoundException:嘗試查找'jdbc.oraclexe'時沒有找到子上下文'jdbc'。 解決 ''; 剩下的名字'jdbc / oraclexe']; 鏈接剩余名稱:'jdbc / oraclexe'

Weblogic 12c數據源肯定是可用的,我必須假設它正確配置,因為應用程序部署並運行時從Indigo發布沒有任何問題。

我還假設applicationContext.xml中的映射,web.xml和weblogic.xml都是正確的,因為從Indigo發布時沒有問題。 映射如下......

SRC \\主\\ web應用\\ WEB-INF \\彈簧\\ applicationContext.xml中

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
 <property name="jndiName" value="java:comp/env/jdbc/oraclexe" />
</bean>

SRC \\主\\ web應用\\ WEB-INF \\ web.xml中

<resource-ref>
 <description>Oracle Weblogic Connection Pool (oraclexe)</description>
 <res-ref-name>jdbc/oraclexe</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
 <mapped-name>jdbc/oraclexe</mapped-name>
</resource-ref>

建立\\ weboutput \\ WEB-INF \\ weblogic.xml中

<resource-description>
 <res-ref-name>jdbc/oraclexe</res-ref-name>
 <jndi-name>oraclexe</jndi-name>
</resource-description>

我想知道weblogic.xml是否在部署期間不可用(即它沒有被復制到src \\ main \\ webapp \\ WEB-INF文件夾)而不是jndiName / resource-ref / res之間的映射問題-ref-name自己? 我已經嘗試將weblogic.xml直接放在src \\ main \\ webapp \\ WEB-INF文件夾中,但我得到了相同的異常。

我唯一的另一個想法是Indigo oepe 12.1.1.1.1很高興發布到Weblogic 12.1.1但Kepler oepe 12.1.2不是,我應該發布到Weblogic 12.1.2服務器?

經過一周左右的試驗和錯誤/消除過程后,我設法解決了這個問題並更好地理解了必要的映射。 正如Elliott懷疑這是JNDI查找的問題。 當它從Indigo發布到weblogic 12.1.1(我仍然不確定為什么會這樣)時,它(無意中)按預期工作更加復雜。

我最初嘗試解決這個問題的重點是weblogic.xml中的映射。 當我發布到weblogic服務器時,我錯誤地認為在解析數據源時引用了它。 事實證明情況並非如此,我的配置不需要weblogic.xml資源描述。

applicationContext.xml保持不變......

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
 <property name="jndiName" value="java:comp/env/jdbc/oraclexe" />
</bean>

但是,java:comp / env / jdbc / oraclexe的jndiName值映射到web.xml res-ref-name值jdbc / oraclexe (而不是我錯誤地假設的weblogic.xml res-ref-name)。 ..

web.xml映射名已被修改...

<resource-ref>
 <description>Oracle Weblogic console JDBC Data Source</description>
 <res-ref-name>jdbc/oraclexe</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
 <mapped-name>oraclexe</mapped-name>
</resource-ref>

...然后映射到Weblogic控制台JDBC數據源JNDI名稱的映射名稱值oraclexe

weblogic.xml中的資源描述節點現在已完全省略,因為在此特定配置中未引用節點。

在我的例子中,配置是Weblogic 12.1.3和Eclipse Mars 4.5.0; 耳朵工作得很好,但是從elipse發布時我也有同樣的錯誤。 問題是數據源的命運是為部署應用程序而創建的服務器,而ec​​lipse是在AdminServer上發布的。 我將兩個命運添加到數據源,它運行正常。

這是一個適合我的配置:

applicationContext.xml中

<jee:jndi-lookup id="dataSource" resource-ref="true"
    jndi-name="jdbc/alias" expected-type="javax.sql.DataSource" />

web.xml中

<resource-ref>
   <res-ref-name>jdbc/alias</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

weblogic.xml中

<wls:resource-description>
    <wls:res-ref-name>jdbc/alias</wls:res-ref-name>
    <wls:jndi-name>jdbc/resource/weblogic</wls:jndi-name>
</wls:resource-description>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM