Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Enterprise-бин проходит через различные этапы в течение своего жизненного цикла. Каждый тип Enterprise-бина (сессионный с сохранением состояния, сессионный без сохранения состояния, сессионный синглтон, управляемый сообщениями) имеет свой жизненный цикл.
Следующие описания относятся к методам, которые объясняются вместе с примерами кода в следующих двух главах. Если вы новичок в Enterprise-бинах, вам следует пропустить этот раздел и сначала выполнить примеры кода.
Здесь рассматриваются следующие темы:
Рисунок 35-2 иллюстрирует этапы, через которые сессионный компонент с сохранением состояния проходит через свою жизнь. Клиент инициирует жизненный цикл, получая ссылку на сессионный компонент с состоянием. Контейнер выполняет инъецирование всех зависимостей, а затем вызывает метод, аннотированный @PostConstruct
, если таковой имеется. Теперь компонент готов к вызову его бизнес-методов клиентом.
На этапе готовности (Ready) контейнер EJB может решить деактивировать (Deactivate или Passivate) компонент путём перемещения его из памяти во вторичное хранилище. (Как правило, контейнер EJB берёт самый редко используемый компонент для деактивации.) Контейнер EJB вызывает аннотированный @PrePassivate
метод, если таковой имеется, непосредственно перед его деактивацией. Если клиент вызывает бизнес-метод бина, который находится на этапе деактивации, EJB-контейнер активирует его, вызывает аннотированный @PostActivate
метод , если таковой имеется, и затем переводит его на этап готовности.
В конце жизненного цикла клиент вызывает аннотированный @Remove
метод, а контейнер EJB вызывает аннотированный @PreDestroy
метод, если таковой имеется. Объект компонента готов к сборке мусора.
Ваш код управляет вызовом только одного метода жизненного цикла — аннотированного @Remove
. Все остальные методы на рисунке 35-2 вызываются контейнером EJB. См. главу 56 «Адаптеры и контракты ресурсов» для получения дополнительной информации.
Поскольку сессионный компонент без сохранения состояния никогда не деактивируется, его жизненный цикл состоит только из двух этапов: несуществующего и готового к вызову бизнес-методов. Рисунок 35-3 иллюстрирует этапы сессионного компонента без сохранения состояния.
Контейнер EJB обычно создаёт и поддерживает пул сессионных компонентов без сохранения состояния. Контейнер выполняет инъецирование всех зависимостей, а затем вызывает аннотированный @PostConstruct
метод, если он существует. Теперь компонент готов к тому, чтобы его бизнес-методы вызывались клиентом.
В конце жизненного цикла контейнер EJB вызывает аннотированный @PreDestroy
метод, если он существует. Объект компонента готов к сборке мусора.
Как и сессионный компонент без сохранения состояния, сессионный компонент-синглтон никогда не деактивируется и имеет только два этапа: не существует и готов к вызову бизнес-методов, как показано на рис. 35-3.
Контейнер EJB инициирует жизненный цикл сессионного компонента-синглтона, инстанцируя объект его класса. Если синглтон помечен аннотацией @Startup
, это происходит при развёртывании приложения. Контейнер выполняет инъецирование всех зависимостей и затем вызывает метод, аннотированный @PostConstruct
, если он существует. Теперь сессионный компонент-синглтон готов к тому, чтобы его бизнес-методы вызывались клиентом.
В конце жизненного цикла контейнер EJB вызывает аннотированный @PreDestroy
метод, если он существует. Сессионный компонент-синглтон теперь готов для сборки мусора.
Рисунок 35-4 иллюстрирует этапы жизненного цикла бина, управляемого сообщениями.
Контейнер EJB обычно создаёт пул объектов, управляемых сообщениями. Для каждого объекта контейнер EJB выполняет следующие задачи.
Если управляемый сообщениями компонент использует инъецирование зависимостей, контейнер инъецирует зависимости до инстанцирования объекта.
Контейнер вызывает аннотированный @PostConstruct
метод, если таковой имеется.
Как и сессионный компонент без сохранения состояния, управляемый сообщениями компонент никогда не деактивируется и имеет только два состояния: не существует и готов к приёму сообщений.
В конце жизненного цикла контейнер вызывает аннотированный @PreDestroy
метод, если таковой имеется. Объект компонента готов к сборке мусора.
Назад | Вперёд | Содержание |