Метод ejbCreate () MDB не вызывается при запуске приложения на Websphere Application Server - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь развернуть приложение на основе EJB 2.1 на Websphere Application Server v7.0.0.23 с некоторым кодом инициализации Spring в методе onEjbCreate MDB:

@Override
protected void onEjbCreate() {      
    getBeanFactory().getBean("myBean");     
}

Но этот метод вызывается наПрием сообщения, а не при запуске приложения.Как я могу заставить WAS создать экземпляр моего MDB до получения сообщения?

1 Ответ

0 голосов
/ 12 декабря 2018

Отредактировал мой ответ, чтобы он был более правильным и выделил информацию, упомянутую Трейси:

По умолчанию EJBContainer откладывает инициализацию bean-компонентов до их первого вызова.Кроме того, ejbCreate () вызывается каждый раз, когда создается новый компонент.Экземпляры MDB не создаются до тех пор, пока один из них не запросит адаптер реляционных ресурсов (RAR);как правило, когда сообщение доставлено.Поскольку ejbCreate запускается для каждого экземпляра, поэтому, если RAR запрашивает, скажем, 50, то ejbCreate будет вызываться 50 раз.

Вы можете программно искать компонент и каким-либо образом его создавать, прежде чем он получит сообщение для запуска вашего объекта.код инициализации, но вы, вероятно, не хотите запускать код инициализации каждый раз, когда создается компонент, так что лучше всего использовать запускающий компонент.Так как вы используете EJB2.1 bean-компоненты, а Was7 EJB Container имеет «устаревший» начальный bean-компонент

В EJB3.0 были введены одиночные bean-компоненты, которые могут быть добавлены путем аннотирования класса с помощью @Singleton @Startupили сконфигурирован для отдельных bean-компонентов с файлом ejb-jar.xml:

<session name="[bean-name]">
    <start-at-app-start value="true"/>
</session>

Перемещение вверх по версиям WAS / EJB и использование этого - ваш лучший выбор.

...