详细信息:我正在尝试使用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 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插件从我的插件中加载类?
答案 0 :(得分:3)
您可能想尝试好友类加载。有关Eclipse类加载的更多信息,Alex Blewitt编写了Eclipse here中类加载系统的精彩概述。它已有几年历史了,但在大多数情况下仍然具有相关性。
伙伴类加载的主旨是:
一个插件声明它需要帮助加载类。它通过声明其“伙伴插件”
buddy插件声明其好友政策
当常规加载机制失败时,Eclipse会尝试使用您指定的伙伴类加载策略。
所以在你的情况下,试着把:
Eclipse-BuddyPolicy: registered
在您的Jalapeno插件的manifest.mf文件
中并提出:
Eclipse-RegisterBuddy: id.of.jalepeno.plugin
在插件的manifest.mf中
答案 1 :(得分:0)
我不确定,但也许你必须导出这些类所在的包。
在MANIFEST“运行时”中选择并添加所有包