Domino OSGI开发和测试-设计器连接如何? [英] Domino OSGI dev and Testing - What about a designer connection?

查看:145
本文介绍了Domino OSGI开发和测试-设计器连接如何?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我上周提出的问题的延续.

有了我收到的答案,我得以建立一个可以在至少理论上开始将我的类复制到设计者的插件项目中的环境.

当前,我已经将ExtLibs源导入为项目(除了一些希望不会有问题的测试项目),没有任何错误,openNTF Domino API和实用程序文件的插件项目.我配置了调试选项,并试图使其在服务器上运行.我想我已经成功了.

(服务器和客户端都在同一台本地计算机上.我也用于所有其他开发的客户端已经具有从更新站点安装的ExtLibs,opentNTF Domino API和openLog功能.)

我可以通过运行以下控制台命令来验证是否通过eclipse在服务器上安装了这些功能:

告诉http osgi ss com.ibm.xsp.extlib

[196C:0002-1F7C] 23.06.2014 15:51:42   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:51:42   id State       Bundle
[196C:0002-1F7C] 23.06.2014 15:51:42   97 RESOLVED    com.ibm.xsp.extlibx.oauth_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42                Master=113
[196C:0002-1F7C] 23.06.2014 15:51:42   102 ACTIVE      com.ibm.xsp.extlib.core_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   103 ACTIVE      com.ibm.xsp.extlib.domino_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   104 ACTIVE      com.ibm.xsp.extlib.controls_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   108 RESOLVED    com.ibm.xsp.extlibx.controls_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   109 ACTIVE      com.ibm.xsp.extlibx_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   112 ACTIVE      com.ibm.xsp.extlib.mobile_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   113 ACTIVE      com.ibm.xsp.extlib_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42                Fragments=97
[196C:0002-1F7C] 23.06.2014 15:51:42   115 ACTIVE      com.ibm.xsp.extlib.oneui_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   116 <<LAZY>>    com.ibm.xsp.extlibx.core_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   118 ACTIVE      com.ibm.xsp.extlibx.relational_9.0.1.v00_06_qualifier

告诉http osgi s org.openntf.domino.xsp.XspLibrary

[196C:0002-1F7C] 23.06.2014 15:52:32   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:52:32   id State       Bundle

和我的新项目-告诉http osgi ss de.holistic.utils

[196C:0002-1F7C] 23.06.2014 15:53:24   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:53:24   id State       Bundle
[196C:0002-1F7C] 23.06.2014 15:53:24   100 INSTALLED   de.holistic.utils_1.0.0.qualifier

然后,我尝试在项目中使用新的插件. (该项目实际上是我最初的开发.nsf的副本,其中有一些测试XPages.为了证明我确实使用了服务器上开发的代码,我从构建路径中删除了旧的src文件夹. -config.xml文件没有更改,并且曾经用作我的实用程序入口点的bean确实没有指向可以在本地设计器安装中找到的任何类(运行时/生成错误),当然这不能即使服务器知道这些类是什么也可以正常工作.正在构建应用程序的设计器客户端不知道我要做什么.

问题

  1. 如何最好地使用插件在设计器中进行测试 客户?每次测试更改并像安装ExtLib一样将其作为小部件安装时,是否必须将插件导出到更新站点中吗?与服务器测试相比,这似乎效率很低.
  2. 由于我当前的错误是来自faces-config.xml,所以我的第一个念头是将变量名/bean名称从文件中取出,然后以某种方式将其注册到运行时.我的第一个想法是在激活程序类中以某种方式将其注册为面孔,但我不确定.我最好怎么去做?

一如既往,我非常感谢您提供的所有帮助.来自LotusScript,我对这个新的JSF/OSGi东西没有太多的经验,但印象非常深刻!

设计器安装堆栈跟踪

Unable to read variable and containers file
java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.loadInt(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.loadVariables(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.load(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager.loadVariablesAndContainers(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager.startup(Unknown Source)
    at org.eclipse.wst.jsdt.core.JavaScriptCore.start(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(Unknown Source)
    at org.eclipse.osgi.framework.util.SecureAction.start(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(Unknown Source)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(Unknown Source)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.loadDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.load(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.create(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.node(Unknown Source)
    at org.eclipse.core.internal.preferences.AbstractScope.getNode(Unknown Source)
    at org.eclipse.core.runtime.preferences.DefaultScope.getNode(Unknown Source)
    at com.ibm.designer.domino.rcp.personality.DesignerWorkbenchWindowAdvisor.setJavaCompilerSettings(Unknown Source)
    at com.ibm.designer.domino.rcp.personality.DesignerWorkbenchWindowAdvisor.postWindowCreate(Unknown Source)
    at org.eclipse.ui.internal.WorkbenchWindow.fireWindowCreated(Unknown Source)
    at org.eclipse.ui.internal.WorkbenchWindow.open(Unknown Source)
    at org.eclipse.ui.internal.Workbench$22.runWithException(Unknown Source)
    at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(Unknown Source)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Unknown Source)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(Unknown Source)
    at org.eclipse.swt.widgets.Display.syncExec(Unknown Source)
    at org.eclipse.ui.internal.StartupThreading.runWithWorkbenchExceptions(Unknown Source)
    at org.eclipse.ui.internal.Workbench.busyOpenWorkbenchWindow(Unknown Source)
    at org.eclipse.ui.internal.Workbench.access$29(Unknown Source)
    at org.eclipse.ui.internal.Workbench$51.run(Unknown Source)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
    at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor$NewWindowRunnable.run(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor.openPersonality(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor.openPersonality(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor$4.runInUIThread(Unknown Source)
    at org.eclipse.ui.progress.UIJob$1.run(Unknown Source)
    at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Unknown Source)
    at org.eclipse.ui.internal.Workbench.runUI(Unknown Source)
    at org.eclipse.ui.internal.Workbench.access$4(Unknown Source)
    at org.eclipse.ui.internal.Workbench$5.run(Unknown Source)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Unknown Source)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Unknown Source)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPApplication.run(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(Unknown Source)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Unknown Source)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Unknown Source)
    at org.eclipse.equinox.launcher.Main.basicRun(Unknown Source)
    at org.eclipse.equinox.launcher.Main.run(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.startLaunch(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.main(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.run(Unknown Source)

解决方案

我倾向于完成导出更新站点并将其安装到Domino Designer中的过程.您可以将插件文件手动添加到Domino Designer的相关文件夹中(我相信/framework/shared/eclipse/plugins),但是我敢肯定,您仍然需要重新启动Notes和Designer来进行所有更改. /p>

faces-config文件通常在库的getFacesConfig方法中定义-这就是我在XPages OpenLog Logger中使用的方法.看来它会自动被调用.只要删除原始的faces-config参考,java类就不必与以前使用的名称不同.因为Bean只是类的实例,所以您可以创建一个扩展DataObject的对象,并将其放在createImplicitObjects方法的相关范围内-ImplicitObjectFactory类中有一个示例将"server"添加到requestScope.在OpenNTF Domino API中,完成相同的操作来注册各种对象.但是您可能需要处理该对象. faces-config方法应该更简单,并且直到运行时才应调用该代码.如果出现错误,则可以使用写入文本文件或服务器控制台或OpenLog的日志记录(如果您依赖XPages OpenLog Logger或OpenNTF Domino AP.但是也可以使用调试插件在服务器上运行该文件后对其进行调试.

我同意插件功能非常强大,并且确实打开了XPages的可扩展性.

This is a continuation of a question that I asked last week.

With the answers I received, I was able to set up an environment where I could, at least theoretically start working to copy my classes into a plug-in project from designer.

Currently, I have imported the ExtLibs source as projects (other than a few test projects which hopefully do not matter) without any errors, the openNTF Domino API, and a plug-in project for my utility files. I configured my debug options, and have tried to get this to run on the server. I think I have been successful.

(Server and Client both are on the same local machine. The client, that I use for all other development as well, already have ExtLibs, opentNTF Domino API, and openLog features installed from update sites.)

I can verify that those features are installed on the server via eclipse by running the following console commands:

tell http osgi ss com.ibm.xsp.extlib

[196C:0002-1F7C] 23.06.2014 15:51:42   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:51:42   id State       Bundle
[196C:0002-1F7C] 23.06.2014 15:51:42   97 RESOLVED    com.ibm.xsp.extlibx.oauth_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42                Master=113
[196C:0002-1F7C] 23.06.2014 15:51:42   102 ACTIVE      com.ibm.xsp.extlib.core_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   103 ACTIVE      com.ibm.xsp.extlib.domino_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   104 ACTIVE      com.ibm.xsp.extlib.controls_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   108 RESOLVED    com.ibm.xsp.extlibx.controls_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   109 ACTIVE      com.ibm.xsp.extlibx_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   112 ACTIVE      com.ibm.xsp.extlib.mobile_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   113 ACTIVE      com.ibm.xsp.extlib_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42                Fragments=97
[196C:0002-1F7C] 23.06.2014 15:51:42   115 ACTIVE      com.ibm.xsp.extlib.oneui_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   116 <<LAZY>>    com.ibm.xsp.extlibx.core_9.0.1.v00_06_qualifier
[196C:0002-1F7C] 23.06.2014 15:51:42   118 ACTIVE      com.ibm.xsp.extlibx.relational_9.0.1.v00_06_qualifier

tell http osgi ss org.openntf.domino.xsp.XspLibrary

[196C:0002-1F7C] 23.06.2014 15:52:32   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:52:32   id State       Bundle

and my new project - tell http osgi ss de.holistic.utils

[196C:0002-1F7C] 23.06.2014 15:53:24   Framework is launched.
[196C:0002-1F7C] 23.06.2014 15:53:24   id State       Bundle
[196C:0002-1F7C] 23.06.2014 15:53:24   100 INSTALLED   de.holistic.utils_1.0.0.qualifier

I then try to use my new plug-in in a project. (The project is actually a copy of my original development .nsf where I have a few test XPages. I have removed the old src folder from the build path in order to prove that I am indeed using the code developed on the server. The faces-config.xml file has not been changed, and the beans that used to serve as entry points to my utilities really are not pointing to any classes that can be found on the local designer installation. (Runtime/Build errors) Of course this cannot work even if the server will know what the classes are. The designer client which is building the application has no idea what I am trying to do.

Questions

  1. How might I best go about using a plug-in for testing in a designer client? Must I export the plug-in into an update site every time I test a change and install it as a widget like I do for ExtLib installation? That seems rather inefficient as opposed to the server tests.
  2. Since my current errors are coming from the faces-config.xml, my first thought is to take my variable names / bean names out of the file, and register them somehow to the runtime. My first thought is to somehow register them with faces in the activator class, but I am unsure. How might I best go about doing that?

As always, I am very grateful for all help given. Coming from LotusScript, I do not have much experience with this new JSF/OSGi stuff, but am pretty impressed!

designer installation stack trace

Unable to read variable and containers file
java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.loadInt(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.loadVariables(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager$VariablesAndContainersLoadHelper.load(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager.loadVariablesAndContainers(Unknown Source)
    at org.eclipse.wst.jsdt.internal.core.JavaModelManager.startup(Unknown Source)
    at org.eclipse.wst.jsdt.core.JavaScriptCore.start(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(Unknown Source)
    at org.eclipse.osgi.framework.util.SecureAction.start(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(Unknown Source)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(Unknown Source)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(Unknown Source)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.loadDefaults(Unknown Source)
    at org.eclipse.core.internal.preferences.DefaultPreferences.load(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.create(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(Unknown Source)
    at org.eclipse.core.internal.preferences.EclipsePreferences.node(Unknown Source)
    at org.eclipse.core.internal.preferences.AbstractScope.getNode(Unknown Source)
    at org.eclipse.core.runtime.preferences.DefaultScope.getNode(Unknown Source)
    at com.ibm.designer.domino.rcp.personality.DesignerWorkbenchWindowAdvisor.setJavaCompilerSettings(Unknown Source)
    at com.ibm.designer.domino.rcp.personality.DesignerWorkbenchWindowAdvisor.postWindowCreate(Unknown Source)
    at org.eclipse.ui.internal.WorkbenchWindow.fireWindowCreated(Unknown Source)
    at org.eclipse.ui.internal.WorkbenchWindow.open(Unknown Source)
    at org.eclipse.ui.internal.Workbench$22.runWithException(Unknown Source)
    at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(Unknown Source)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Unknown Source)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(Unknown Source)
    at org.eclipse.swt.widgets.Display.syncExec(Unknown Source)
    at org.eclipse.ui.internal.StartupThreading.runWithWorkbenchExceptions(Unknown Source)
    at org.eclipse.ui.internal.Workbench.busyOpenWorkbenchWindow(Unknown Source)
    at org.eclipse.ui.internal.Workbench.access$29(Unknown Source)
    at org.eclipse.ui.internal.Workbench$51.run(Unknown Source)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
    at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor$NewWindowRunnable.run(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor.openPersonality(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor.openPersonality(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPWorkbenchAdvisor$4.runInUIThread(Unknown Source)
    at org.eclipse.ui.progress.UIJob$1.run(Unknown Source)
    at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Unknown Source)
    at org.eclipse.ui.internal.Workbench.runUI(Unknown Source)
    at org.eclipse.ui.internal.Workbench.access$4(Unknown Source)
    at org.eclipse.ui.internal.Workbench$5.run(Unknown Source)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Unknown Source)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Unknown Source)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(Unknown Source)
    at com.ibm.rcp.personality.framework.internal.RCPApplication.run(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(Unknown Source)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Unknown Source)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Unknown Source)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Unknown Source)
    at org.eclipse.equinox.launcher.Main.basicRun(Unknown Source)
    at org.eclipse.equinox.launcher.Main.run(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.startLaunch(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.main(Unknown Source)
    at com.ibm.rcp.core.internal.launcher.Main.run(Unknown Source)

解决方案

I tend to go through the process of exporting the update site and installing from there into Domino Designer. You can manually add the plugin file to the relevant folder of Domino Designer (/framework/shared/eclipse/plugins I believe), but I'm pretty sure you'll still need to restart Notes and Designer to pick up any changes.

faces-config files tend to defined in the getFacesConfig method of the library - that's what I used in XPages OpenLog Logger. It looks like it gets called automatically. The java class doesn't have to be a different name from what you've used before, as long as the original faces-config reference is removed. Because the beans are just instances of the class, you could create an object that extends DataObject and put it in the relevant scope in a createImplicitObjects method - there's an example in the ImplicitObjectFactory class to add "server" to requestScope. In OpenNTF Domino API the same thing is done to register a variety of objects. But you may need to handle disposing of the object. The faces-config approach should be easier and that code shouldn't get called until runtime. If there's an error, you can use logging writing to a text file or server console or OpenLog (if you make it dependent on XPages OpenLog Logger or OpenNTF Domino AP. But you can also debug once it's running on the server using the debug plugin.

I agree that plugins are very powerful and it really opens up the extensibility of XPages.

这篇关于Domino OSGI开发和测试-设计器连接如何?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆