Объединение объектов: как - PullRequest
1 голос
/ 17 февраля 2010

Мне нужно реализовать пул сеансов, которые возвращаются внешней системой, чтобы я мог быстро их использовать, как только потребуется (создание сеанса занимает некоторое время).Я работал с источником данных для создания пула соединений с базой данных (DBCP от Apache), и это было реализованное решение.

Что мы используем в общем случае для объединения произвольных объектов, и есть ли реализованные решенияобъекты, а не интерфейсы, чтобы мучительно справляться с задачей?

Второй вопрос: как мы можем проверить, жива ли сессия?Есть ли конкретный метод, который мы переопределяем в пуле объектов, который запрашивает собственные методы сеанса?

Третий, ОЧЕНЬ ВАЖНЫЙ вопрос, должен был бы быть, чтобы этот объектный пул был статичным ?Множество объектов, которые я извлекаю из системы, должно быть общим для разных веб-приложений.Итак, скажем, мы извлекаем 5 сессий.Приложение A запрашивает пул и получает первый доступный сеанс.Теперь осталось 4 сессии.Запускается другое приложение B и запрашивает тот же бассейн.и т.д. Бассейн является общим.Среди разных экземпляров одного и того же веб-приложения, работающего на одной машине.

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Если вы используете сервер приложений J2EE, рассмотрите возможность создания компонента, реализующего архитектуру Java Connector Architecture ( JCA ). Каждый экземпляр компонента обращается к одному сеансу, и вы настраиваете контейнер для создания не более пяти (из вашего примера) экземпляров. Контейнер управляет пулом и жизненным циклом компонента. Кроме того, все приложения, развернутые на этом сервере приложений, совместно используют пул компонента.

Если я правильно помню (это было давно), есть также способ сообщить контейнеру, что экземпляр умер. В этом случае контейнер удаляет мертвый экземпляр и создает новый.

Некоторые серверы приложений, отличные от J2EE, поддерживают компоненты JCA, поэтому регистрируйтесь на нем, даже если вы не используете традиционный контейнер J2EE.

1 голос
/ 17 февраля 2010
  1. Для общего пула объектов у вас есть проект Apache Commons для этого.
  2. Для проверки того, что сеанс жив, существуют разные способы, но многие из них ненадежны.И надежный (делает запрос на dual) медленный.Вы можете взглянуть на c3p0 , который имеет эту встроенную функцию.
  3. Пока ваши веб-приложения находятся в одном файле WAR, я думаю, что вы будете в порядке, чтобы использоватьэтот статический объект пула.Хотя лично я предпочитаю синглтоны статическим объектам, которые имеют что-то большее, чем служебные методы и константы.

В общем, я большой поклонник Hibernate ... вы уже рассматривали возможность его использования?для вашего приложения?Через него можно по-прежнему выполнять простые запросы SQL, и он обрабатывает ваши пулы и кэширование.

...