문제

긴 내용이 될 것이므로 기다려 주셔서 감사합니다 :).

나는 Lotus Sametime 내에서 실행될 플러그인을 개발하려고 노력해 왔습니다.이 플러그인의 아이디어는 특정 날짜에 대한 달력 항목을 추출한 다음 이를 동시에 표시하는 것입니다.간단하지 않나요? 저도 그렇게 생각했어요.분명히 나는 ​​틀렸고 JVM 버전 호환성 문제를 크게 오해했습니다.먼저 기본 Java 1.6에서 독립적인 테스트를 수행했고 제대로 작동했습니다. 항목을 가져오고 Sametime 개발 환경으로 이동할 준비가 된 코드를 얻었습니다.

코드를 삽입하기 위해 플러그인 개발 환경으로 이동했습니다. 외부 jar 목록에 Notes.jar을 추가하고 lotus.domino 라인을 가져오면서 첫 번째 문제가 발생했습니다.IDE가 나에게 이렇게 말했습니다.

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

인터넷 검색 후 프로젝트에서 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 모듈이 경로에서 공백을 허용하지 않아 프로그램 파일에 의문의 여지가 없었습니다.이것이 올바른 방법인지 확실하지 않았지만 어떤 이유로 항아리가 실행되지 않았습니다.적절한 명령줄 매개변수를 사용하여 bat 파일을 넣으려고 시도했는데 명령줄에서 실행될 때 xml이 생성되었지만 IDE에만 알려진 이유로 eclipse ide에서 실행할 때는 생성되지 않았습니다.이 시점에서는 옵션이 부족하여 캘린더 항목 가져오기와 관련하여 정확히 동일한 작업을 수행하는 다른 플러그인을 손에 넣었습니다.플러그인을 디컴파일하고 소스 코드를 확인한 결과 코드가 작업을 수행하기 위해 클래스 로더를 사용하고 있는 것을 확인했습니다.이 코드를 보고 새로운 희망이 생겼습니다.인터넷 검색 후 나는 나를 위해 일한 몇 가지 코드를 구성했습니다.산성 테스트를 할 시간이 왔습니다. 코드를 플러그인 환경에 넣었고 이것이 제가 얻은 것입니다.

    !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)

버전오류로 또 정말 답답하네요.Sametime 플러그인 개발 환경은 J9 JVM에서 실행되며 어떤 이유로 Notes.jar ibmorbapi.jar에는 충분하지 않은 것 같습니다.적어도 그것은 오류에 대한 나의 가정입니다.

이에 대해 여러분의 도움을 주시면 감사하겠습니다."org/omg/CORBA/UserException"이 문제의 핵심인 것 같은데 도저히 극복할 수 없습니다.외부 jar 실행을 복잡한 방식으로 작동시킬 수 있지만 메모에서 캘린더 항목을 가져오는 가장 좋은 방법이라고 생각하기 때문에 그렇게 하고 싶지 않습니다.나는 그것이 합리적으로 간단해야 한다고 확신하며 이에 대한 도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

CORBA 클래스가 최신 JDK용으로 컴파일된 것 같습니다.이전 버전의 JAR을 찾거나 소스를 가져와 JDK(J9?)에서 컴파일해야 합니다.간단한 Google 검색에서 확인한 바에 따르면 J9는 1.4 또는 1.3과 호환됩니다.

또한 직접 컴파일한 모든 코드의 대상 Java 버전이 동일한지 확인하세요.이 경우에는 1.4(1.3?)입니다.

다른 팁

Notes 애플리케이션과의 통신과 관련된 두 개의 jar이 있습니다.

Notes.jar - LSXBE 클래스용 JNI 래퍼입니다.올바르게 작동하려면 시스템에 Lotus Notes가 설치되어 있고 시스템 PATH의 기본 디렉터리가 필요합니다.

NCSO.jar - Domino 서버에 DIIOP 연결을 하기 위한 것입니다.Lotus Notes를 설치할 필요는 없습니다.DIIOP가 활성화된 연결할 수 있는 Domino 서버가 필요합니다.

Notes가 설치되어 있는지 확실하지 않습니까?

jar는 특정 JVM 버전에만 적용됩니다.

  • 자바 6 - 참고 8.5.1
  • 자바 5 - 노트 8.x
  • 자바 1.4.2 - 노트 7.x
  • 자바 1.3 - 노트 6.x

"오프셋의 잘못된 주요 버전"은 JVM에 대해 잘못된 jar을 실행하고 있음을 의미합니다(예:1.4.2의 경우 851병).

구성 문제를 배제하려면 먼저 Notes/Domino에 연결하는 간단한 Java 애플리케이션을 만드는 것이 좋습니다.이것이 작동하면 경로/항아리가 모두 올바르게 설정되었음을 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top