Eclipse RCP: ClassNotFoundException или Как заставить другой пакет загрузить мой класс - PullRequest
1 голос
/ 26 марта 2009

Подробности: я пытаюсь использовать инфраструктуру Jalapeno для соединения моего приложения RCP с базой данных Cache. После того, как соединение установлено, я пытаюсь получить все данные из таблицы точно так же, как в руководстве по Jalapeno:

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)

at term.next ();

Я вообще не могу его получить ... экземпляр класса DBClass только что создан, но класс не может быть загружен. Затем я попытался поместить этот код в простое Java-приложение (не eclipse rcp), и все прошло нормально. , поэтому я думаю, что часть Eclipse блокирует загрузку классов.

также я пытался загрузить класс перед вызовом term.next ();

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

... и получил ту же ошибку. Класс не может быть загружен. Итак, это известная проблема? Есть ли решение?

Обновление

После некоторых исследований обновляется вопрос:

Как заставить плагин Jalapeno загружать класс из моего плагина?

Ответы [ 2 ]

3 голосов
/ 26 марта 2009

Возможно, вы захотите попробовать загрузку классов друзей. Для получения дополнительной информации о загрузке классов Eclipse Алекс Блевитт написал отличный обзор системы загрузки классов в Eclipse здесь . Ему несколько лет, но по большей части он все еще актуален.

Суть загрузки классов друзей такова:

  • плагин заявляет, что ему нужна помощь в загрузке классов. Он делает это, объявив свой «плагин приятеля»

  • плагин друзей объявляет свою политику друзей

  • при сбое обычного механизма загрузки Eclipse пытается использовать указанные вами политики загрузки классов друзей.

Так что в вашем случае попробуйте поставить:

Eclipse-BuddyPolicy: registered

в файле manifest.mf вашего плагина Jalapeno

и положить:

Eclipse-RegisterBuddy: id.of.jalepeno.plugin

в manifest.mf вашего плагина

0 голосов
/ 26 марта 2009

Я не уверен, но, возможно, вам придется экспортировать пакет, в котором лежат классы.

Выберите в МАНИФЕСТЕ "Runtime" и добавьте все пакеты

...