Предложенный проект будет иметь непредсказуемое поведение, поскольку методы жизненного цикла обрабатываются контейнером.Сессионный компонент без сохранения состояния объединяется контейнером (в большинстве случаев), и один и тот же экземпляр может обслуживаться несколькими запросами.
Методы ejbCreate()
и ejbRemove()
вызываются контейнером при первоначальной инициализации компонентаИ когда он будет удален из пула соответственно.Поэтому он может открыть соединение в ejbCreate()
, но не может закрыть его и запросы на обслуживание с тем же соединением.
Но, если соединение открыто и компонент остается свободным в пуле, он задержит ресурсизлишне, может привести к исключениям, таким как тайм-аут сокета, слишком много открытых соединений и т. д.
Лучше написать метод обобщений для открытия / закрытия соединения, чтобы правильно использовать ресурсы.
Редактировать: Из базовых шаблонов J2EE - локатор службы
Использовать объект локатора службы, чтобы абстрагировать все использование JNDI и скрыть сложности начального создания контекста, поиска домашнего объекта EJB,и воссоздание объекта EJB.Несколько клиентов могут повторно использовать объект Service Locator, чтобы уменьшить сложность кода, обеспечить единую точку контроля и повысить производительность, предоставляя средство кэширования.