我正在尝试使用 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)
>> 线程停止
线程左