По поводу внешней JVM есть интересный проект
Удалось прикрутить сервер Open Liberty (внедренный в Domino) к IDEA.
@Author - Jesse Gallagher
@Source - GitHub - OpenNTF/openliberty-domino: Open Liberty server embedded in Domino
Хотел бы поделиться своими изысканиями по поводу сабжа.
Ссылка скрыта от гостей
.Удалось прикрутить сервер Open Liberty (внедренный в Domino) к IDEA.
@Author - Jesse Gallagher
@Source - GitHub - OpenNTF/openliberty-domino: Open Liberty server embedded in Domino
Хотел бы поделиться своими изысканиями по поводу сабжа.
В сухом остатке получаем современные javaEE подходы и инструменты: нормальная IDE + JVM 11 (возможны другие) + servlet-api-4.0, el-3.0, jsp-2.3 + возможность стандартной VCS.
Понятно, что проект еще сыроват - замечено выпадение domino в NSD (при завершении) и как бы не совсем легаси.
Тем не менее, как мне кажется, заслуживает внимания. Автору большой респект.
3-я версия запилена на автоматическое скачивание всего необходимого (open liberty, jvm ...) из интернета. Поэтому за прокси поставить у меня не получилось, хотя автор давал пару советов по предварительной ручной закачке и размещении. Но пока руки для проверки не дошли.
How does it work? Author answer:
После установки на сервер необходимо создать конфигурацию. Здесь важно указать "Integration Features: Domino API" для использования domino-классов и <feature>localConnector-1.0</feature> - для удаленного доступа к серверу.
Далее в проекте JavaEE необходимо подключить remote WebSphere/Liberty.
В качестве Domino API необходимо подключить Notes.jar (или domino-jna) через системные библиотеки или мавен (тут на любителя).
Запускаем сервер.
Build + deploy = Получаем выхлоп в браузере.
index.jsp:
test servlet:
Автор кода: Jesse Gallagher
Понятно, что проект еще сыроват - замечено выпадение domino в NSD (при завершении) и как бы не совсем легаси.
Тем не менее, как мне кажется, заслуживает внимания. Автору большой респект.
3-я версия запилена на автоматическое скачивание всего необходимого (open liberty, jvm ...) из интернета. Поэтому за прокси поставить у меня не получилось, хотя автор давал пару советов по предварительной ручной закачке и размещении. Но пока руки для проверки не дошли.
How does it work? Author answer:
As for how this all works, it comes from how Notes's shared memory works, and how it can be shared generally cleanly by child processes. It's actually basically the same way that all of the addin tasks, HTTP included, work, where they're really just child processes of the main Domino server task. Since these Liberty instances are doing the same sort of thing, they can access the Domino API as the server the same way other tasks can. They just have to obey the same rules that addins do: make sure to use NotesInit/NotesTerm for the process, make sure to do NotesInitThread/NotesTermThread for each thread, etc.. The notesRuntime feature just does the above at a server level, so your individual app doesn't have to worry about it. The calls at the same, though.
После установки на сервер необходимо создать конфигурацию. Здесь важно указать "Integration Features: Domino API" для использования domino-классов и <feature>localConnector-1.0</feature> - для удаленного доступа к серверу.
Далее в проекте JavaEE необходимо подключить remote WebSphere/Liberty.
В качестве Domino API необходимо подключить Notes.jar (или domino-jna) через системные библиотеки или мавен (тут на любителя).
Запускаем сервер.
Build + deploy = Получаем выхлоп в браузере.
index.jsp:
test servlet:
Автор кода: Jesse Gallagher
Java:
package example;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;
@WebServlet("/hello")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ExecutorService exec;
@Override
public void init() throws ServletException {
exec = Executors.newCachedThreadPool(NotesThread::new);
}
@Override
public void destroy() {
exec.shutdownNow();
try {
exec.awaitTermination(5, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain");
try {
String username = exec.submit(() -> {
Session session = NotesFactory.createSession();
try {
return session.getEffectiveUserName();
} finally {
session.recycle();
}
}).get();
resp.getWriter().println("I am " + username);
} catch (InterruptedException | ExecutionException e) {
throw new ServletException(e);
}
}
}