Как вызвать метод EJB, когда он развертывается сам? - PullRequest
0 голосов
/ 17 ноября 2009

Я хочу вызвать метод из EJB в тот же момент, когда он развертывается самостоятельно, без использования сервлета.

Спасибо.

Давид.

Ответы [ 5 ]

2 голосов
/ 17 ноября 2009

Похоже, что для этой цели в спецификации EJB не определены методы жизненного цикла. Отдельные поставщики могут предоставлять расширения, позволяющие это сделать. Например, Startup Beans в WebSphere будет местом для размещения желаемой логики вызова.

Использование таких методов, как статический метод, кажется немного опасным в том смысле, что мы не знаем, завершено ли все внедрение зависимостей до того, как этот статический метод запущен, и, следовательно, можно ли безопасно использовать бизнес-методы EJB.

Лично, если бы мне нужно было быть портативным, я бы кусал пулю и использовал сервлет. Это стоит очень мало.

0 голосов
/ 28 февраля 2013

Контейнер EJB для компонента @Singleton должен создать экземпляр компонента, как только приложение будет развернуто, если оно аннотировано @ Startup.

Это, конечно, вызовет статические блоки инициализации, конструктор, установщики внедрения зависимостей, методы @PostConstruct и т. Д.

Вот соответствующая ссылка на Учебное пособие по Java EE 6 .

0 голосов
/ 17 ноября 2009

Статические блоки инициализатора технически не являются недопустимыми в EJB, но они используются для выполнения кода перед любым конструктором (что может быть проблемой) при создании экземпляра класса. Обычно они используются для инициализации статических полей, которые могут быть недопустимы в EJB, если они не только для чтения. Итак, как насчет использования методов ejbCreate(), setSessionContext() или setEntityContext() (даже если вы не уверены, что это будет уместно без более подробной информации о проблеме, которую вы пытаетесь решить)?

0 голосов
/ 17 ноября 2009

Хук PostConstruct подходит именно для этого.

Более подробную информацию о PostConstruct можно найти здесь:

Давайте закончим с кратким примером:

@Stateless
public class TestEJB implements MyEJBInterface{

    @PostConstruct
    public void doThatAfterInitialization() {
        //put your code here to be executed after creation and initialization of your bean
    }

}
0 голосов
/ 17 ноября 2009

Попробуйте выполнить инициализацию внутри статического блока. Это будет выполнено один раз, когда загрузчик классов загрузит класс.

static { System.out.println("static"); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...