【问题标题】:Handling Concurrent Servlet Requests on Domino Server在 Domino 服务器上处理并发 Servlet 请求
【发布时间】:2013-10-02 22:07:19
【问题描述】:

我正在尝试使用 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: lotus/domino/Session

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

>> 线程停止

线程离开

【问题讨论】:

    标签: xpages lotus-domino xpages-extlib


    【解决方案1】:

    您需要将 servlet 设计为 OSGi 插件,否则它找不到 Domino 类。查看this sample 获取代码示例,还查看my code 获取线程,并查看OpenNTF/GitHub 上的Serdar's project

    告诉我们进展如何。

    【讨论】:

    • 嗯...塞尔达...嗯... :)
    • @SerdarBasegmez 错别字发生在您啄玻璃时 - 抱歉。修复它
    • 将代码用于线程时出现错误:java.lang.IllegalStateException: NotesContext not initialized for the thread
    • 代码依赖Extlib。你有那个吗?我也只在 R9 上测试过。修改您的问题并显示您的代码
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 2020-11-02
    • 2012-05-09
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多