2

tomcat\context.xml でデータソースを構成しています。サーブレットブリッジ環境を取得するために、Eclipse が提供する bridge.war をデプロイしました。

サーブレット登録コードを含む別の osgi バンドルを開発しました。私の目的は、このサーブレット バンドルからデータソースを JNDI 検索することです。

しかし、私は得る

javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)

OSGI バンドルのコードをたどろうとすると

        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");

osgi コンテナーに catalina.jar を追加し、osgi バンドルの依存関係としても追加しました。

bridge.war の launch.ini は次のようになります。

osgi.*=@null
org.osgi.*=@null
eclipse.*=@null

osgi.parentClassloader=ext
osgi.contextClassLoaderParent=ext
org.osgi.framework.system.packages.extra=org.apache.naming.java

誰かがそれを手伝ってくれますか?

4

1 に答える 1

2

組み込み OSGi コンテナーの親はextです: Java 拡張クラス・ローダー

Tomcat のクラスを表示できるようにするには、親のクラスローダーを launch.ini でfwk : OSGi フレームワーク クラス ローダーに変更する必要があります。

そうすることで、組み込み OSGi コンテナーの親クラスローダーが Web アプリケーションのクラスローダーになります。組み込み OSGi コンテナー内のバンドルが webapp または Tomcat からのクラスを直接使用したい場合は、org.osgi.system.packages.extra 設定を使用してクラスのパッケージをリストする必要がある場合があります。

組み込み Equinox の親クラスローダーの詳細: http://wiki.eclipse.org/FAQ_How_do_I_add_a_library_to_the_classpath_of_a_plug-in%3F

Tomcat のクラス ローダー階層の詳細: http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

于 2014-07-25T08:43:05.740 に答える