В контексте приложения Java EE 6, запущенного в WebSphere 8.0, мне нужно выполнить несколько задач запуска до того, как любой бизнес-метод может быть выполнен. Использование компонента @Startup @Singleton для этой цели кажется многообещающим решением. Однако мне не совсем ясно, как будет выглядеть жизненный цикл приложения. В EJB 3.1 spec говорится следующее:Метод @Singleton @Startup @PostConstruct гарантированно возвращается до того, как EJB будут доступны для клиентских звонков?
По умолчанию, контейнер отвечает за принятие решений, когда инициализации экземпляра Singleton боба. Однако разработчик компонента может дополнительно настроить Singleton для инициативной инициализации. Если аннотация «Запуск» появляется в классе компонента Singleton или если Singleton был назначен через дескриптор развертывания как , требующий инициативной инициализации, контейнер должен инициализировать экземпляр компонента Singleton во время последовательности запуска приложения . Контейнер должен инициализировать все такие стартовые синглеты до , любые запросы клиентов доставляются на компоненты любого компонента предприятия в приложении .
В последнем предложении, что именно представляет собой "инициализации"? Будет ли контейнер ждать, пока метод @PostConstruct компонента @Startup не вернется, прежде чем сделать доступными для клиентских запросов корпоративные компоненты?
Говоря о «клиентских запросах», выполняйте запланированные кавычки метода EJB с помощью подсчета аннотации @Scheduled как одного в этом контексте?
Мне нужно, чтобы гарантировать, что некоторый код выполняется при запуске приложения, прежде чем какой-либо из бизнес-методов в любой из различных EJBs приложения могут быть запущены, будь то с помощью вызовов клиента или запланированных казней. Обеспечивает ли запуск кода запуска внутри метода @PostConstruct компонента @Singleton @Startup такую гарантию? Если нет, есть ли другой способ гарантировать такое поведение?
Ну, это было бы плохим дизайном для сервера приложений, который будет обслуживать bean-компоненты, которые все еще находятся в середине запуска методов '@ PostConstruct'. – Kayaman
@ Kayaman Существует разница между порциями bean-компонентов в середине их методов '@ PostConstruct' и предотвращением звонков на * все * bean-компоненты, в то время как * any *' @ Startup' bean находится в методе '@ PostConstruct', что является поведением требуемый спецификацией. –
@BrettKail Действительно есть. Последнее гарантирует, что первое не может произойти. Однако, поскольку в его цитате явно не упоминалось '@ PostConstruct', я считаю, что он задавался вопросом, является ли' @ PostConstruct' частью инициализации или нет. – Kayaman