1

詳細: Jalapeno フレームワークを使用して RCP アプリを Cache のデータベースに接続しようとしています。接続が確立された後、ハラペーニョのマニュアルとまったく同じように、テーブルからすべてのデータを取得しようとしています:

if (objManager==null) return;
DBClass cortege = null;
try {
Iterator terms = objManager.openByQuery(DBClass.class, null, null);
System.out.println("terms ok");
while (terms.hasNext()){
    System.out.println("has next");
    cortege = (DBClass)terms.next();
}

このコードのコンパイル、実行、およびトローイングの例外

java.lang.RuntimeException: myPluginId.views.DBClass
at com.intersys.objects.POJOIterator.next(POJOIterator.java:75)
   ...skip...
   Caused by: java.lang.ClassNotFoundException: myPlugin.views.DBClass
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.jalapeno.runtime.ObjectCopierToPojo.detach(ObjectCopierToPojo.java:76)
    at com.jalapeno.runtime.ObjectCopierToPojo.findPojo(ObjectCopierToPojo.java:472)
    at com.intersys.classes.CacheRootObject.detach(CacheRootObject.java:255)
    at com.intersys.classes.Persistent.detach(Persistent.java:567)
    at com.intersys.objects.POJOIterator.next(POJOIterator.java:59)

terms.next(); で

まったく取得できません... クラス DBClass のインスタンスが作成されたばかりですが、クラスをロードできません。 次に、このコードを単純な Java アプリケーション (eclipse rcp ではない) に配置しようとしましたが、すべて問題ありませんでした。Eclipse の一部がクラスのロードをブロックしていると思います。

また、terms.next(); を呼び出す前にクラスをロードしようとしました。

Bundle b = Platform.getBundle("myPluginId");
try {
b.loadClass("DBClass");
} catch (ClassNotFoundException e) {
System.out.println("no class");
e.printStackTrace();
}

...そして同じエラーが発生しました。クラスをロードできません。それで、それは既知の問題ですか?解決策はありますか?

アップデート

質問を更新するいくつかの調査の後:

My プラグインからクラスをロードする Jalapeno プラグインの作成方法は?

4

2 に答える 2

3

バディクラスローディングを試してみることをお勧めします。Eclipseクラスローディングの詳細については、AlexBlewittがEclipseのクラスローディングシステムの優れた概要をここに書いています。その数年前ですが、ほとんどの場合、それはまだ関連しています。

バディクラスローディングの要点はこれです:

  • プラグインは、クラスのロードに支援が必要であることを宣言します。これは、「バディプラグイン」を宣言することによって行われます。

  • バディプラグインはバディポリシーを宣言します

  • 通常の読み込みメカニズムが失敗すると、Eclipseは指定されたバディクラス読み込みポリシーを使用しようとします。

したがって、あなたの場合は、次のように入力してみてください。

Eclipse-BuddyPolicy: registered

Jalapenoプラグインのmanifest.mfファイル

そして、置きます:

Eclipse-RegisterBuddy: id.of.jalepeno.plugin

プラグインのmanifest.mfで

于 2009-03-26T12:02:49.067 に答える
0

よくわかりませんが、クラスが含まれているパッケージをエクスポートする必要があるかもしれません。

マニフェスト「ランタイム」で選択し、すべてのパッケージを追加します

于 2009-03-26T11:05:13.463 に答える