Обработка одновременных запросов сервлетов на сервере Domino

Я пытаюсь создать службу REST, используя сервлет, который находится внутри NSF. Сервлет работает, но я заметил, что он обрабатывает запросы по одному, поэтому, если запрос ожидает завершения запроса к базе данных, все остальные запросы должны ждать. Я знаю, что запросы на сервлеты на Tomcat или Glassfish получают свой собственный поток, но, похоже, этого не происходит на сервере Domino. Чтобы попытаться обойти это, я попытался создать новые потоки внутри сервлета, но продолжал получать ошибки NotesContext, не инициализированные. Я поискал и нашел проект под названием Threads и Jobs, и предназначен для использования кода там для создания 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)

>> Остановка потока

Нить слева


person Peter    schedule 26.09.2013    source источник


Ответы (1)


Вам нужно спроектировать сервлет как подключаемый модуль OSGi, иначе он не найдет классы Domino. Проверьте этот пример для получения образцов кода, а также посмотрите мой код для тредов и проверьте проект Сердара на OpenNTF/GitHub

Дайте нам знать, как это происходит.

person stwissel    schedule 26.09.2013
comment
ммм... Сердар... ммм... :) - person Serdar Basegmez; 27.09.2013
comment
@SerdarBasegmez Опечатки случаются, когда ты долбишь по стеклу - извини за это. Починил это - person stwissel; 28.09.2013
comment
При использовании вашего кода для потоков я получаю сообщение об ошибке: java.lang.IllegalStateException: NotesContext не инициализирован для потока - person Peter; 10.10.2013
comment
Код зависит от Extlib. У тебя есть такой? Я также тестировал только на R9. Измените свой вопрос и покажите свой код - person stwissel; 10.10.2013