Я работаю над веб-приложением на основе Java, которое будет состоять из пары JSP и нескольких сервлетов. Всем JSP и сервлетам необходим доступ к частному удаленному ресурсу, доступ к которому можно получить, отправив текстовый запрос по TCP (ответ также является простым текстом).
Для облегчения этого я создал объект стиля DAO с различными методами стиля getXbyId()
. Внутренне DAO поддерживает SocketPool
, то есть набор сокетов с синхронизированными методами get()
и put()
. Вызов get()
приведет к увеличению пула, если он будет исчерпан (вероятно, мне следует ограничить размер пула, но я еще не там).
У меня есть приведенный выше код, работающий для одного сервлета. В частности, метод сервлета init()
создает экземпляр объекта DAO и сохраняет его как локальный объект. Мой план состоял в том, чтобы расширить это, поместив один экземпляр объекта DAO в область приложения (возможно, принудительно сделав его одноэлементным). Каждый JSP и сервлет должны будут проверить наличие этого объекта в области приложения и инициализировать его там, где это необходимо. JSP могли бы использовать <jsp:useBean>
, в то время как сервлеты должны были бы делать это программно (то есть извлекать его из контекста приложения и создавать его экземпляр, если выборка возвращает ноль). Проблема с вышеупомянутым сценарием состоит в том, что DAO не может быть значимо инициализирован конструктором без аргументов. Требуются аргументы для указания IP-адреса, порта и т. Д. Для удаленного ресурса. Эти значения хранятся в файле свойств, который я загружаю из ServletContext (через getResourceAsStream).
Тогда возникает вопрос: как мне лучше всего сделать так, чтобы один экземпляр этого объекта DAO был доступен для всех сервлетов и JSP в моем приложении без большого количества повторяющихся и подверженных ошибкам кодов инициализации базовой платы?
Спасибо,
Фил