1

我正在尝试使用 NSF 中的 Servlet 创建 REST 服务。Servlet 运行,但我注意到它一次处理一个请求,因此如果一个请求正在等待数据库查询完成,则所有其他请求都必须等待。我知道对 Tomcat 或 Glassfish 上的 Servlet 的请求有自己的线程,但这似乎并没有在 Domino 服务器上发生。为了解决这个问题,我尝试在 Servlet 中生成新线程,但不断收到 NotesContext not initialized 错误。我四处搜索,发现了一个名为Threads and Jobs的项目,并打算使用那里的代码创建一个 Servlet,该 Servlet 产生新线程并为客户端提供 requestId 并要求它们轮询以检索作业结果,或侦听服务器将在完成后广播的端口。当我尝试导入项目并按原样运行时,页面 Thread.xsp 和 Job.xsp 呈现但无法正常工作。我在控制台中得到以下输出:

线程开始

>> 线程运行

java.lang.NullPointerException

在 com.ibm.domino.xsp.module.nsf.NotesContext.getRunningModule(NotesContext.java:394)

在 com.ibm.domino.xsp.module.nsf.NotesContext.checkSignerRightsNonXSP(NotesContext.java:960)

在 com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.loadClass(ModuleClassLoader.java:379)

在 java.lang.ClassLoader.loadClass(ClassLoader.java:626)

在 org.openntf.samples.thread.ThreadSample$MyThread$1.run(ThreadSample.java:86)

在 org.openntf.samples.thread.ThreadSample$MyThread$1.run(ThreadSample.java:1)

在 com.ibm.domino.xsp.module.nsf.ThreadSessionExecutor$3.run(ThreadSessionExecutor.java:156)

在 java.security.AccessController.doPrivileged(AccessController.java:310)

在 com.ibm.domino.xsp.module.nsf.ThreadSessionExecutor.run(ThreadSessionExecutor.java:154)

在 org.openntf.samples.thread.ThreadSample$MyThread.run(ThreadSample.java:123)

>> 线程运行

java.lang.NoClassDefFoundError:莲花/多米诺/会话

在 org.openntf.samples.thread.ThreadSample$MyThread$1.run(ThreadSample.java:86)

在 org.openntf.samples.thread.ThreadSample$MyThread$1.run(ThreadSample.java:1)

在 com.ibm.domino.xsp.module.nsf.ThreadSessionExecutor$3.run(ThreadSessionExecutor.java:156)

在 java.security.AccessController.doPrivileged(AccessController.java:310)

在 com.ibm.domino.xsp.module.nsf.ThreadSessionExecutor.run(ThreadSessionExecutor.java:154)

在 org.openntf.samples.thread.ThreadSample$MyThread.run(ThreadSample.java:123)

>> 线程停止

线程左

4

1 回答 1

1

您需要将 servlet 设计为 OSGi 插件,否则它找不到 Domino 类。查看此示例以获取代码示例,还可以查看的线程代码并查看OpenNTF/GitHub 上的 Serdar 项目

让我们知道怎么回事。

于 2013-09-26T22:13:55.637 回答