Метод вызова в EJB при запуске JBoss
Я ищу точку входа в EJB, развернутую на JBoss.
Сервлеты имеют тег load-on-startup
для использования в web.xml
.
Я ищу аналогичную функциональность init()
для EJB.
Ответы
Ответ 1
Этого не было для EJB до 3.1. С EJB 3.1 вы можете использовать singleton bean для имитации того, что:
От Заявления о запуске/завершении приложений:
@Startup
@Singleton
public class FooBean {
@PostConstruct
void atStartup() { ... }
@PreDestroy
void atShutdown() { ... }
}
В противном случае вам нужно будет положиться на старый добрый трюк, чтобы использовать ServletContextInitializer
.
Существует некоторое расширение для приложения, например. прослушиватель жизненного цикла для Glassfish. Может быть, такая вещь для JBoss.
Но если бы я был вами, я бы постарался как можно больше полагаться на стандартные функции. Проблема с нестандартным расширением заключается в том, что вы никогда не знаете точно, что можно сделать или нет, например. вы можете начать транзакцию или нет, и т.д.
Ответ 2
В этой статье описаны семь различных способов вызова функций при запуске сервера. Не все будут работать с JBoss.
Семь способов начать все. Классы запуска Java EE с GlassFish и WebLogic
Ответ 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")