EJB-контейнер отвечает за хранение и управление экземплярами компонентов, управ ляемых сообщениями. Он контролирует жизненный цикл MDB и использует методы с обратным вызовом в классе реализации компонента для уведомления экземпляра о предстоящих важных изменениях состояния.
Жизненный цикл MDB показан на рис. 8.14.
Вот состояния, значимые для MDB.
• Создание компонента, управляемого сообщениями.
Экземпляры MDB создаются EJB-контейнером в три этапа:
a) EJB-контейнер вызывает метод Class.newInstance() класса реализации компонента;
b) EJB-контейнер передает новому экземпляру ссылку на MessageDrivenContext, вызывая метод setMessageDrivenContext;
c) EJB-контейнер дает новому экземпляру компонента, управляемого сообщени ями, возможность выполнить однократную инициализацию, вызывая метод ejbCreate. Компонент, управляемый сообщениями, может выделить здесь лю бые ресурсы, которые ему нужны.
• Вызов метода получателя запросов.
Поступив в пул экземпляров, готовых к вызову метода, экземпляр MDB становится доступным для обработки любого сообщения, посылаемого в соответствующий пункт назначения или конечную точку. Когда сообщение поступает в пункт назначения, EJB-контейнер получает сообщение и выделяет экземпляр MDB из пула для его обработки. Когда обработка завершена, экземпляр MDB возвращается в пул.
Примечание. EJB-контейнер в ходе обработки сообщения выполняет ряд других операций, например, проверку того, что обработка происходит в указанном контексте транзакции, и также выполняет все необходимые проверки, связанные с безопасностью. Эти этапы для простоты опущены.
• Удаление компонента, управляемого сообщениями.
EJB-контейнер может в любое время определить, что ему нужно освободить ресурсы. Для этого он уменьшает количество экземпляров MDB в пуле. В ходе процесса удаления он вызывает метод ejbRemove удаляемого экземпляра, чтобы дать управляемому сообщениями компоненту возможность освободить ресурсы, которые он может использовать.