最近我一直在尝试设置和自定义scheduler在我们的 XPages 项目中。我尝试将以下代码片段放入我们的项目中:
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator extends Plugin implements BundleActivator {
@Override
public void start(final BundleContext context) throws Exception {
// Here you start your scheduler
}
}
在模板的 Code
部分中,我可以轻松编写此代码,并且不会收到有关 Unresolved 依赖项的警告。因此,我认为 org.eclipse.core.runtime 和 org.osgi.framework 包必须随 Domino 一起提供。
但似乎没有。
每当执行此代码时,我都会在浏览器和堆栈中收到 500 错误
,如下所示:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org.eclipse.core.runtime.Plugin
at com.ibm.xsp.webapp.FacesServlet.handleError(FacesServlet.java:595)
at com.ibm.xsp.webapp.FacesServlet.renderErrorPage(FacesServlet.java:424)
at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:182)
at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:588)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:865)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:808)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:577)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)
at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
Caused by: java.lang.NoClassDefFoundError: org.eclipse.core.runtime.Plugin
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:346)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.findClass(ModuleClassLoader.java:455)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:850)
at java.lang.ClassLoader.loadClass(ClassLoader.java:829)
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.loadClass(ModuleClassLoader.java:403)
at java.lang.ClassLoader.loadClass(ClassLoader.java:809)
at ru.lanit.egrz.scheduler.RefreshEGRZTokenExecutor.executeAndScheduleRefreshToken(RefreshEGRZTokenExecutor.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:322)
at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161)
at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197)
at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)
at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)
at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)
at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424)
at com.ibm.jscript.JSExpression$2.run(JSExpression.java:414)
at java.security.AccessController.doPrivileged(AccessController.java:686)
at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)
at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251)
at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)
at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:222)
at com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111)
at com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60)
at javax.faces.component.UICommand.broadcast(UICommand.java:324)
at com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366)
at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
at com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1535)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)
at com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256)
at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:227)
at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:159)
... 13 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.Plugin
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.loadClass(ModuleClassLoader.java:359)
at java.lang.ClassLoader.loadClass(ClassLoader.java:809)
... 54 more
IBM 一次又一次地让我感到害怕(对此深表歉意)。
我尝试将其添加为外部 jar 部分 -> 仍然相同。
我什至尝试将这两个添加到 lib/ext
-> 还是一样。
在构建路径中,这两个作为插件依赖项包含在内。
从字面上看,我认为导入 jar 并解决 Domino 中的依赖关系存在问题(甚至超出了这个特定问题的范围)。
这是我关于 IBM Domino 的第三个问题(如果不是第四个问题)。我真诚地向社区道歉,让我感到尴尬,但请纠正我的错误。在 Domino 中,您解决了一个问题,然后另外两个问题就出现了。你解决了这两个问题,然后其他 4 个问题就破坏了应用程序。等等
如何正确导入而不出现任何问题?
提前致谢
UPD
为了改进我的问题,我将添加一些代码
所以,bean 看起来像这样:
SchedulerActivatorBean:
import java.io.Serializable;
public class SchedulerActivatorBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3559937702716018697L;
public static void activate() throws Exception
{
new SchedulerActivator().start(null);
}
}
SchedulerActivator(OSGI插件):
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class SchedulerActivator extends Plugin implements BundleActivator {
@Override
public void start(final BundleContext context) throws Exception {
// Here you start your scheduler
QuartzScheduler.getInstance(); // starts the scheduler
}
}
然后我修改了faces-config.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<managed-bean>
<managed-bean-name>schedulerActivatorBean</managed-bean-name>
<managed-bean-class>ru.lanit.egrz.scheduler.SchedulerActivatorBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
</faces-config>
最后我从 SSJS 调用 bean:
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete"
action="#{javascript:schedulerActivatorBean.activate()}">
</xp:eventHandler>
该 bean 已实例化并可在应用程序中使用。但是当我调用该方法时,我仍然得到:
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.Plugin
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.loadClass(ModuleClassLoader.java:359)
at java.lang.ClassLoader.loadClass(ClassLoader.java:809)
... 54 more
不用说,这让我一无所知
最佳答案
插件不存在于 NSF 中。您可能想先了解一下。以此作为入门:https://www.slideshare.net/fiorep/domino-osgi-development
您可能想重新审视您的整个方法。为什么不使用已计划并刷新存储在 NSF 中的 token 的 Notes 代理。简单的问题解决了。
然后让您的 XPage 查找 NSF 中的值。省去了你所有的头痛。
对于新用户,您可以使用 XPage 中的 agent.run
。诀窍在于 NSF 中的存储。
使用读取器字段来保护文档,以便用户无法看到彼此的 token 。
关于java - 由 : java. lang.ClassNotFoundException : org. eclipse.core.runtime.Plugin 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184377/