web-dev-qa-db-ja.com

NameNotFoundException:Eclipse Keplerから公開する場合にのみ、「jdbc」を検索しようとしているが、Indigoからは検索していない

Eclipse Indigo3.7.2からoepe12.1.1.1.1を使用してWebアプリをOracleWeblogic 12c(12.1.1)AdminServerに公開できます。

ただし、oepe12.1.2.2を使用してEclipseKepler 4.3.1にインポートされたまったく同じWebアプリは、次の(かなりよく踏まれた)例外で公開に失敗し、その理由を解明しようとしています...

NameNotFoundException:「jdbc.oraclexe」を検索しようとしたときに、サブコンテキスト「jdbc」が見つかりませんでした。解決済み '';残りの名前 'jdbc/oraclexe'];リンクの残りの名前: 'jdbc/oraclexe'

Weblogic 12cデータソースは確実に利用可能であり、アプリケーションがIndigoから公開されたときに問題なくデプロイおよび実行されるため、正しく構成されていると想定する必要があります。

また、applicationContext.xml、web.xml、およびweblogic.xmlのマッピングは正しいと想定しています。これも、Indigoから公開したときに問題がないためです。マッピングは次のとおりです...

src\main\webapp\WEB-INF\spring\applicationContext.xml

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

src\main\webapp\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>

build\weboutput\WEB-INF\weblogic.xml

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

JndiName/resource-ref/res間のマッピングに問題があるのではなく、デプロイ中にweblogic.xmlが使用可能になっていない(つまり、src\main\webapp\WEB-INFフォルダーにコピーされていない)のではないかと思います。 -ref-name自体? weblogic.xmlをsrc\main\webapp\WEB-INFフォルダーに直接配置しようとしましたが、同じ例外が発生します。

私の他の唯一の考えは、Indigo oepe12.1.1.1.1はWeblogic12.1.1に公開できますが、Kepler oepe 12.1.2はそうではなく、Weblogic 12.1.2サーバーに公開する必要があるということです。

7
user3236055

1週間ほどの試行錯誤/消去法の後、私はこの問題を解決し、必要なマッピングをよりよく理解することができました。エリオットが疑ったように、これはJNDIルックアップの問題でした。 Indigoからweblogic12.1.1に公開されたときに、(誤って)期待どおりに機能するという事実によってさらに複雑になりました(なぜそうなるのかはまだわかりません)。

これを解決するための最初の試みは、weblogic.xmlのマッピングに焦点を合わせていました。 weblogicサーバーに公開しているときに、データソースを解決するときにこれが参照されていると誤って想定していました。結局のところ、これは当てはまらず、私の構成ではweblogic.xmlのresource-descriptionは必要ありませんでした。

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 mapped-nameが修正されました...

<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名にマップするのはmapped-name値oraclexeです。

Weblogic.xmlのresource-descriptionノードは、参照されていないため完全に省略されていますこの特定の構成では

6
user3236055

私の場合、構成はWeblogic12.1.3とEclipseMars4.5.0でした。耳はwlsにデプロイされて正常に機能しましたが、elipseから公開するときに同じエラーが発生しました。問題は、データソースの運命がアプリケーションをデプロイするために作成されたサーバーであり、EclipseがそれをAdminServerに公開したことでした。両方の宛先をデータソースに追加しましたが、問題なく機能しました。

0
c3po

これは私のために働いた構成です:

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>
0