Подтвердить что ты не робот

Метод вызова в EJB при запуске JBoss

Я ищу точку входа в EJB, развернутую на JBoss.

Сервлеты имеют тег load-on-startup для использования в web.xml.

Я ищу аналогичную функциональность init() для EJB.

4b9b3361

Ответ 1

Этого не было для EJB до 3.1. С EJB 3.1 вы можете использовать singleton bean для имитации того, что:

От Заявления о запуске/завершении приложений:

   @Startup
   @Singleton
   public class FooBean {

       @PostConstruct 
       void atStartup() { ... }

       @PreDestroy
       void atShutdown() { ... }

   }

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

Существует некоторое расширение для приложения, например. прослушиватель жизненного цикла для Glassfish. Может быть, такая вещь для JBoss.

Но если бы я был вами, я бы постарался как можно больше полагаться на стандартные функции. Проблема с нестандартным расширением заключается в том, что вы никогда не знаете точно, что можно сделать или нет, например. вы можете начать транзакцию или нет, и т.д.

Ответ 3

Если вы настроите JBoss AS 5.1 и не против использования JBoss EJB 3.0 Extensions, вы можете создать сервис bean для загрузки вашего EJB. Если ваша служба реализует интерфейс, аннотированный аннотацией @Management и объявляет метод с сигнатурой public void start() throws Exception, JBoss будет вызывать этот метод при запуске службы. Затем вы можете вызвать выделенный init() метод на EJB, который вы хотите инициализировать:

@Service
public class BeanLauncher implements BeanLauncherManagement
{
    @EJB private SessionBeanLocal sessionBean;

    @Override
    public void start() throws Exception
    {
        sessionBean.init();
    }
}

@Management
public interface BeanLauncherManagement
{
    public void start() throws Exception;
}

Более подробную информацию об этом, включая дополнительные события жизненного цикла, можно найти здесь.

Ответ 4

Управляемый Beans может использоваться для выполнения некоторого процесса при запуске JBoss, вам нужно добавить запись этого управляемого файла bean в файл конфигурации.

Ответ 5

Вы должны иметь возможность добавить следующую строку в начало метода, который вы хотите запустить при запуске:

@Observer("org.jboss.seam.postInitialization")