2

簡単な OSGi テストバンドルを JBoss 7.1.1 にデプロイし、次のようにして Jacorb ORB を動的にインスタンス化しようとしました。

Class clazz = Class.forName("org.jacorb.orb.ORB");

私が得たのは

java.lang.ClassNotFoundException: org.jacorb.orb.ORB from [Module "deployment.test:1.0.0" from Service Module Loader]

私がすでにしたこと:

  • モジュールがロードされるように、JBoss 構成standalone.xmlで osgi-subsystem に capability を追加しました。私のテストバンドルのインストールが失敗するという問題は、すでに解決されています。<capability name="org.jacorb" startlevel="1"/>org.jacorb
  • Dependencies-Descriptor onを宣言しorg.jacorbましたMANIFEST.MF(オプションの有無にかかわらず試しましたexport):Dependencies: org.jacorb export

  • 次の内容でjboss-deployment-structure.xmlを myに追加しましたMETA-INF

    <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.jacorb" /> </dependencies> </deployment> < /jboss-デプロイメント構造>

また、私は ClassLoader を使って実験を行い、ContextClassLoader がnull. Class.forName()しかし、最終的には、特定のクラスローダーを使用するように変更できないため、これを非テスト コードとして有効にすることはできません。

では、なぜこの ClassNotFoundException が発生するのでしょうか?

前もって感謝します

アレックス

4

2 に答える 2

1

何時間も掘った後、私はパズルをしました;-)

  1. standalone.xml/domain.xmlJBoss構成では、以下のセクションに追加しまし<capability name="org.jacorb" startlevel="1"/><subsystem xmlns="urn:jboss:domain:osgi:1.2" activation="lazy"><capabilities>
  2. クラスローダーが実行時にクラスパスを動的に拡張できるようにするために追加しましMETA-INF/MANIFEST.MFDynamicImport-Package: org.jacorb.orb
  3. 以前に行われたThread.currentThread().setContextClassLoader(getClass().getClassLoader()ことによってコンテキストクラスローダーを設定しますnull
于 2012-07-20T05:11:42.513 に答える
0

通常のOSGiバンドルがあり、org.jacorb.orb.ORBクラスが表示される場合は、次のようにする必要があります。1.すべてのorg.jacorbパッケージとサブパッケージをosgiフレームワークにエクスポートする必要があります。2.バンドルは、使用するすべてのパッケージをインポートする必要があります。たとえば、「Import-Package:org.jacorb.orb」を使用します。バージョンに互換性があることを確認します。すべてのパッケージとサブパッケージをインポートすることを確認してください。org.jacorbのインポートは、org.jacorb.orbを意味するものではありません。

両方の条件が満たされている場合、バンドルのバンドルクラスローダーはorg.jacorb.orb.ORBを参照できるはずです。

于 2012-07-19T10:10:56.657 に答える