Как создать общий ресурс в приложении JSP / Servlet? - PullRequest
0 голосов
/ 11 января 2012

Я работаю над веб-приложением на основе Java, которое будет состоять из пары JSP и нескольких сервлетов. Всем JSP и сервлетам необходим доступ к частному удаленному ресурсу, доступ к которому можно получить, отправив текстовый запрос по TCP (ответ также является простым текстом).

Для облегчения этого я создал объект стиля DAO с различными методами стиля getXbyId(). Внутренне DAO поддерживает SocketPool, то есть набор сокетов с синхронизированными методами get() и put(). Вызов get() приведет к увеличению пула, если он будет исчерпан (вероятно, мне следует ограничить размер пула, но я еще не там).

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

Тогда возникает вопрос: как мне лучше всего сделать так, чтобы один экземпляр этого объекта DAO был доступен для всех сервлетов и JSP в моем приложении без большого количества повторяющихся и подверженных ошибкам кодов инициализации базовой платы?

Спасибо, Фил

1 Ответ

0 голосов
/ 11 января 2012

Здесь вы заново изобретаете все виды вещей:

  • Параметры, особенно такие данные, как номер порта, IP-адрес и т. Д., Должны быть определены с использованием web.xml, если толькоу вас есть веская причина не делать этого.(?)

  • Учитывая, что вы (позвольте мне догадаться) пытаетесь подключить серверную часть noSQL к своему веб-приложению, в идеале вам следует использовать механизмы JCA (Java Connector Architecture) дляизолировать водителя.Включение блокировки сетевых вызовов и пула сокетов (!) Из сервлета напрямую может работать, но все ставки сняты с точки зрения гарантий, которые предоставляет вам контейнер Java EE-Web, и я лично никогда бы не позволил такому хаку / приложениюв конечном итоге на производственных серверах.Всегда.

  • Даже если вы настаиваете на этом, ServletContextListener сопоставляет жизненный цикл вашего веб-приложения с жизненным циклом соединителя.этот.

...