详细信息:我正在尝试使用 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();
}
...并得到同样的错误。无法加载类。
那么,这是一个已知问题吗?有解决办法吗?
Update
经过一些研究更新了问题:
如何使 Jalapeno 插件从我的插件加载类?
您可能想尝试伙伴类加载。有关 Eclipse 类加载的更多信息,Alex Blewitt 撰写了一篇关于 Eclipse 中类加载系统的精彩概述here http://www.eclipsezone.com/articles/eclipse-vms/。它已有几年历史,但在很大程度上它仍然具有相关性。
伙伴类加载的要点是这样的:
所以在你的情况下,尝试输入:
Eclipse-BuddyPolicy: registered
在 Jalapeno 插件的 manifest.mf 文件中
and put:
Eclipse-RegisterBuddy: id.of.jalepeno.plugin
在你的插件的manifest.mf中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)