2009-09-27 88 views
1

这将是一个很长的阅读,谢谢你的耐心:)。Lotus Notes内部的Sametime插件Classess - 整个故事

我一直在试图开发一个在Lotus Sametime中执行的插件。这个插件的想法是提取给定日期的日历条目,然后在同一时间显示它。简单不是,我也这么认为。显然我错了,并严重误解了JVM版本兼容性问题。我首先在默认的Java 1.6中进行了独立测试,并且它工作正常,我得到了条目并准备好了代码以转移到Sametime开发环境。

我转移到插件开发环境来插入我的代码。当我将Notes.jar添加到外部jar列表和导入lotus.domino行时,我的第一个问题就出现了。该IDE告诉我这

The type org.omg.CORBA.UserException cannot be resolved. It is indirectly referenced from required .class files 

一些google搜索后,我引用该项目的ibmorbapi.jar得到它运行。对我来说不幸的是,即使这样做没有成功。该插件本身加载失败,这就是我得到

java.lang.NoClassDefFoundError: lotus.notes.Session 
at java.lang.J9VMInternals.verifyImpl(Native Method) 
at java.lang.J9VMInternals.verify(J9VMInternals.java:59) 
at java.lang.J9VMInternals.initialize(J9VMInternals.java:120) 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1244) 
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:157) 
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:759) 
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) 
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51) 
at com.ibm.collaboration.realtime.imhub.ImHub.loadMiniAppExtensions(ImHub.java:416) 
at com.ibm.collaboration.realtime.imhub.ImHub.getMiniApps(ImHub.java:356) 
at com.ibm.collaboration.realtime.imhub.workbench.ImHubWorkbenchWindowAdvisorShelf.transformMiniApps(ImHubWorkbenchWindowAdvisorShelf.java:354) 
at com.ibm.collaboration.realtime.imhub.workbench.ImHubWorkbenchWindowAdvisorShelf.createWindowContents(ImHubWorkbenchWindowAdvisorShelf.java:179) 
at org.eclipse.ui.internal.WorkbenchWindow.createContents(WorkbenchWindow.java:938) 
at org.eclipse.jface.window.Window.create(Window.java:426) 
at org.eclipse.ui.internal.Workbench.busyOpenWorkbenchWindow(Workbench.java:805) 
at org.eclipse.ui.internal.Workbench.doOpenFirstTimeWindow(Workbench.java:1453) 
at org.eclipse.ui.internal.Workbench.openFirstTimeWindow(Workbench.java:1404) 
at org.eclipse.ui.internal.WorkbenchConfigurer.openFirstTimeWindow(WorkbenchConfigurer.java:190) 
at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:708) 
at org.eclipse.ui.internal.Workbench.init(Workbench.java:1101) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1863) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at com.ibm.collaboration.realtime.ui.WorkbenchAdapter.createAndRunWorkbench(WorkbenchAdapter.java:103) 
at com.ibm.collaboration.realtime.ui.WorkbenchAdapter.run(WorkbenchAdapter.java:85) 
at com.ibm.collaboration.realtime.application.RTCApplication.run(RTCApplication.java:765) 
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) 
at java.lang.reflect.AccessibleObject.invokeL(AccessibleObject.java:211) 
at java.lang.reflect.Method.invoke(Method.java:272) 
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) 
at org.eclipse.core.launcher.Main.basicRun(Main.java:280) 
at org.eclipse.core.launcher.Main.run(Main.java:977) 
at org.eclipse.core.launcher.Main.main(Main.java:952) 

因为那是不是要去工作。我想为什么不创建NotesCalendarExtraction部分到一个单独的jar执行文件中,并获取一个带有日历条目的xml文件,然后将其提供给插件以显示条目。我知道这不是最好的解决方案,但我很绝望,想让这个工作。在任何情况下,当我对jar文件和生成的xml文件的路径进行硬编码时,这个想法有点奏效。顺便说一句,我正在使用java中的getRuntime.exec模块执行jar文件。时间来到它的一般运行,不幸的是对于我来说,exec模块并没有接受它的路径中的空间,所以程序文件是没有问题的。我不确定这是否是正确的方法,但是由于某种原因,这样的jar也没有执行。我尝试使用适当的命令行参数放入bat文件,并且它在命令行中执行时生成xml,但由于IDE只知道原因而不能从eclipse ide运行。在这一点上,我已经没有选择,并且我得到了另一个插件,它们在获取日历条目方面做了完全相同的事情。我反编译插件并检出了源代码,并看到代码使用类加载器来完成这项工作。当我看到这个代码时,一个新的希望进入了我。经过一些Google搜索之后,我将一些代码放在了一起,为我完成了这项工作。时间来了酸性测试,我把代码放入插件env,这就是我得到的。

!ENTRY org.eclipse.ui 4 0 2009-09-27 22:05:55.996 
!MESSAGE (org/omg/CORBA/UserException) bad major version at offset=6 
!STACK 0 
java.lang.UnsupportedClassVersionError: (org/omg/CORBA/UserException) bad major version at offset=6 
at java.lang.ClassLoader.defineClassImpl(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:246) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:109) 
at java.net.URLClassLoader.findClassImpl(URLClassLoader.java:1028) 
at java.net.URLClassLoader$4.run(URLClassLoader.java:549) 
at java.security.AccessController.doPrivileged(AccessController.java:213) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:547) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:625) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:582) 
at java.lang.ClassLoader.defineClassImpl(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:246) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:109) 
at java.net.URLClassLoader.findClassImpl(URLClassLoader.java:1028) 
at java.net.URLClassLoader$4.run(URLClassLoader.java:549) 
at java.security.AccessController.doPrivileged(AccessController.java:213) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:547) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:625) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:582) 
at java.lang.J9VMInternals.verifyImpl(Native Method) 
at java.lang.J9VMInternals.verify(J9VMInternals.java:59) 
at java.lang.J9VMInternals.initialize(J9VMInternals.java:120) 
at java.lang.reflect.AccessibleObject.initializeClass(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:248) 
at com.ibm.collaboration.realtime.lotusnotes.LotusNotes.getNotesSession(LotusNotes.java:179) 
at com.ibm.notes.sametime.calendar.hack.SpeakUpMiniApp.createControl(SpeakUpMiniApp.java:58) 
at com.ibm.collaboration.realtime.miniapp.MiniAppViewPart.createPartControl(MiniAppViewPart.java:41) 
at com.ibm.rcp.ui.internal.shelf.ShelfViewReference.createPartHelper(ShelfViewReference.java:330) 
at com.ibm.rcp.ui.internal.shelf.ShelfViewReference.createPart(ShelfViewReference.java:201) 
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566) 
at com.ibm.rcp.ui.shelf.ShelfPage.activatePart(ShelfPage.java:1168) 
at com.ibm.rcp.ui.shelf.ShelfPage.access$10(ShelfPage.java:1159) 
at com.ibm.rcp.ui.shelf.ShelfPage$7.handleEvent(ShelfPage.java:1312) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:947) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:706) 
at com.ibm.rcp.swt.swidgets.SViewForm.toggleMaximize(SViewForm.java:1501) 
at com.ibm.rcp.swt.swidgets.SViewStack.expand(SViewStack.java:596) 
at com.ibm.rcp.swt.swidgets.SViewStack.toggleMaximize(SViewStack.java:526) 
at com.ibm.rcp.swt.swidgets.SViewStack$5.handleEvent(SViewStack.java:312) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:947) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:706) 
at com.ibm.rcp.swt.swidgets.SViewForm.onMouseUpMaximize(SViewForm.java:1437) 
at com.ibm.rcp.swt.swidgets.SViewForm.onMouseUp(SViewForm.java:1127) 
at com.ibm.rcp.swt.swidgets.SViewForm$4.handleEvent(SViewForm.java:421) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3673) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3284) 
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1930) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1894) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at com.ibm.collaboration.realtime.ui.WorkbenchAdapter.createAndRunWorkbench(WorkbenchAdapter.java:103) 
at com.ibm.collaboration.realtime.ui.WorkbenchAdapter.run(WorkbenchAdapter.java:85) 
at com.ibm.collaboration.realtime.application.RTCApplication.run(RTCApplication.java:765) 
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) 
at java.lang.reflect.AccessibleObject.invokeL(AccessibleObject.java:211) 
at java.lang.reflect.Method.invoke(Method.java:272) 
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) 
at org.eclipse.core.launcher.Main.basicRun(Main.java:280) 
at org.eclipse.core.launcher.Main.run(Main.java:977) 
at org.eclipse.core.launcher.Main.main(Main.java:952) 

这真的令人沮丧的版本错误。同时插件开发环境在J9 JVM上运行,并且出于某种原因,对于notes.jar ibmorbapi.jar我猜不够。至少这是我的假设是关于错误的。

我希望你们对此有任何帮助。 “org/omg/CORBA/UserException”似乎是问题的关键,我根本无法克服它。我可以用一些复杂的方式让外部jar执行工作,但我不想这样做,因为我觉得它是从笔记获取日历条目的最佳方式。我相信它必须相当简单,任何帮助,这将不胜感激。

回答

1

看起来像为更新的JDK编译CORBA类。您需要查找较旧版本的JAR,或者,可以获取源代码并在您的JDK(J9?)下编译它们。从我从简短的Google搜索中看到的结果来看,J9可以兼容1.4甚至1.3。

此外,请确保您自己编译的所有代码具有相同的目标Java版本,即1.4(1.3?)在这种情况下。

2

有两个罐子与Notes应用程序交谈有关。

Notes.jar - 这是一个LSXBE类的JNI包装器。为了使其正常工作,您需要安装在机器上的Lotus Notes和系统PATH上的主目录。

NCSO.jar - 这是为了使DIIOP连接到Domino服务器。这不需要安装Lotus Notes。它确实需要一个可连接到其上启用了DIIOP的Domino服务器。

目前还不清楚您是否安装了Notes?

罐子也特定于某些JVM版本。

  • 爪哇6 - 注8.5.1
  • 爪哇5 - 注8.x中
  • 的Java 1.4.2 - 注7.x的
  • 爪哇1.3 - 注6.x的

“偏移量不好的主要版本”意味着你正在运行JVM的错误jar(例如1.4.2上的851 jar)。

为了排除任何配置问题,我建议创建一个简单的Java应用程序,它可以连接到Notes/Domino。一旦这样做,那么你知道你的路径/罐子都设置正确。

+0

该错误肯定与版本有关。我在ST J9 JVM上使用了Notes.jar,这导致了这个错误。为此,我使用了Notes 7 jar文件,并创建了一个插件,并在J9 JVM中使用,效果非常好。 – vikramjb 2010-03-01 05:29:06