在Domino Server上处理并发Servlet请求

时间:2013-09-26 19:14:04

标签: xpages lotus-domino xpages-extlib

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

线程已开始

>>线程正在运行

显示java.lang.NullPointerException

  
    

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

         

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

         

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

         

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

         

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

         

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

         

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

         

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

         

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

         

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

  

>>线程正在运行

java.lang.NoClassDefFoundError:lotus / domino / Session

  
    

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

         

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

         

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

         

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

         

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

         

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

  

>>线程停止

线程离开

1 个答案:

答案 0 :(得分:1)

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

让我们知道它是怎么回事。