1

详细信息:我正在尝试使用 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)

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

...并得到同样的错误。无法加载类。那么,这是一个已知问题吗?有解决办法吗?

更新

经过一些研究更新问题:

如何让 Jalapeno 插件从我的插件加载类?

4

2 回答 2

3

您可能想尝试好友类加载。有关 Eclipse 类加载的更多信息,Alex Blewitt 在此处编写了 Eclipse 中类加载系统的出色概述。它已有几年历史,但在大多数情况下,它仍然具有相关性。

伙伴类加载的要点是这样的:

  • 插件声明它需要帮助加载类。它通过声明其“伙伴插件”来做到这一点

  • 好友插件声明其好友政策

  • 当常规加载机制失败时,Eclipse 会尝试使用您指定的伙伴类加载策略。

所以在你的情况下,试着把:

Eclipse-BuddyPolicy: registered

在 Jalapeno 插件的 manifest.mf 文件中

并输入:

Eclipse-RegisterBuddy: id.of.jalepeno.plugin

在插件的 manifest.mf 中

于 2009-03-26T12:02:49.067 回答
0

我不确定,但也许你必须导出类所在的包。

在 MANIFEST "Runtime" 中选择并添加所有包

于 2009-03-26T11:05:13.463 回答