У нас есть сервер REST API на основе Jetty 9.3 и Jersey 2.7.
Внедрение зависимостей отлично работает с HK2, который поставляется в комплекте с библиотеками. Мы регистрируем необходимые службы в приложении Handler
через ResourceConfig
и имеем что-то вроде:
handler.addServlet(new ServletHolder("main-api", new ServletContainer(resourceConfig)), MAIN_SERVLET_PATH + "/*");
Затем мы хотели переместить некоторые конечные точки HTTP на отдельный порт «admin». Поэтому мы создали два отдельных ServerConnector
, по одному для каждого порта, и два отдельных Handler
, обертывающих отдельные ServletHolder
, которые сопоставляются с соответствующими путями для каждого соответствующего пути ("/admin" и "/api").
Проблема в том, что каждый из обработчиков теперь создает отдельный ServiceLocator
со своим набором управляемых сервисов. Таким образом, мы не можем совместно использовать службы между конечными точками администратора и API — объекты Singleton, определенные в обоих обработчиках, создаются дважды.
Попытался создать «мост» между двумя ServiceLocators, но это вызывает проблемы с ограниченными ресурсами. Попытался создать третий ServiceLocator и соединить его с двумя другими локаторами - тоже нехорошо.
Любые идеи, как можно обмениваться объектами DI между отдельными обработчиками в Jetty? Или есть альтернативное представление о том, как можно достичь вышеперечисленного?