2009-03-26 4 views
1

詳細:Jalapenoフレームワークを使用してRCPアプリケーションとCacheのデータベースを接続しようとしています。接続が確立した後、私は正確にハラペーニョのマニュアルのようなテーブルからすべてのデータを取得しようとしている:Eclipse RCP:ClassNotFoundExceptionまたは他のバンドルをロードする方法クラス

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(); 
} 

このコード、コンパイル、実行およびtrowing例外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) 

(); 私はまったくそれを得ることができません... 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(); 
} 

と同じエラーが発生しました。クラスをロードできません。 それは既知の問題ですか?解決策はありますか? =========================== JalapenoプラグインをMyプラグインからクラスをロードするにはどうすればいいですか?

+0

eclipseグーグルグループが見つかりました、そのJ alapenoプラグインと私のクラスは、同じクラスローダーで読み込まれなければなりません...私はこれを行う方法がわかりません。 – Imaskar

+0

それは私が必要なものですか? http://wiki.eclipse.org/index.php/BundleProxyClassLoader_recipe 「はい」の場合は、どのように使用しますか? – Imaskar

+0

下記の私の答えを見てください。はい、あなたはバディクラスの読み込みが必要だと思います。 – nstehr

答えて

3

を追加します。 Eclipseクラスローディングの詳細については、Alex BlewittがEclipseのクラスローディングシステムの優れた概要を書いていますhere。それは数年前ですが、大部分はまだ関連しています。

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

  • プラグインは、それが助けローディングクラスを必要とすることを宣言します。これは、Eclipseには、指定したバディクラスローディングポリシーを使用しようとすると、通常のローディング機構が失敗したときにバディプラグインがそのバディポリシー

  • を宣言

  • をその「バディプラグイン」を宣言することでこれを行います。あなたのハラペーニョのプラグインのMANIFEST.MFファイルに

    Eclipse-BuddyPolicy: registered 
    

    をして置く:

だからあなたの場合には、入れてみてください

Eclipse-RegisterBuddy: id.of.jalepeno.plugin 

のMANIFEST.MFにあなたのプラグイン

+0

ありがとう!それは助けになった!ちょうど1つ:パフォーマンスを向上させる方法、定期的なメカニズムをスキップする方法(Jalapenoプラグインのすべてのクラスを反復すると仮定します)、まずbuddy-loadingを使用します(予想される場所のみ... ...) )? – Imaskar

+0

うれしかったです!しかし、2番目の質問では、パフォーマンスを向上させる方法について私の頭の中で何の方法も考えられません。 – nstehr

+0

よろしくお願いいたします。それをそのままにする – Imaskar

0

わかりませんが、クラスが存在するパッケージをエクスポートする必要があります。

選択MANIFEST「ランタイム」で、あなたはバディクラスローディングをしようとする場合がありますすべてのパッケージ

+0

が試行されました。まだ動作しません。 – Imaskar

関連する問題