![](/img/trans.png)
[英]javax.naming.NameNotFoundException:while trying to lookup
[英]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發布時我也有同樣的錯誤。 問題是數據源的命運是為部署應用程序而創建的服務器,而eclipse是在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.