У меня есть такая структура в моем проекте Maven:
WEB-INF/lib
- a.jar
- Registry.class (@ApplicationScoped, @ManagedBean(eager=true)
- b.jar
- Module.class (@ApplicationScoped, @ManagedBean(eager=true)
Я поместил регистратор в аннотированный метод @PostConstruct для двух классов, чтобы определить, какой из них вызывается первым, и после нескольких развертываний на сервере JBossAS7 я заметил, что КАЖЕТСЯ, нет определенного порядка загрузки б> эти классы. Я намерен ВСЕГДА загружать Registry.class перед Module.class. Но с таким поведением при загрузке класса я не знаю, как этого добиться.
В некоторых случаях Registry.class загружается первым, но в других случаях первым загружается Module.class, даже если я только что перезапустил сервер приложений и не внес никаких изменений в код б>.
Теперь мой вопрос: могу ли я что-то сделать, чтобы определить порядок загрузки jar-файлов в WEB-INF/lib?
Другой ракурс:
Может также быть возможно, что проблема не в загрузке класса, а в нетерпеливом ManagedBean ApplicationScoped? Я добавил класс в a.jar:
- RegistryTwo.class (@ApplicationScoped, @ManagedBean(eager=true)
так что a.jar теперь содержит Registry.class и RegistryTwo.class. При этом я ожидаю что-то вроде:
(Желаемый результат)
Registry.class is invoked.
RegistryTwo.class is invoked.
Module.class is invoked.
или (У меня будут проблемы с этим.)
Module.class is invoked.
Registry.class is invoked.
RegistryTwo.class is invoked.
НО в некоторых случаях я получаю следующее:
RegistryTwo.class is invoked.
Module.class is invoked.
... (Other Processing logs.)
Registry.class is invoked.
Согласно @BalusC, ManagedBean ApplicationScoped будет автоматически создан при запуске приложения ( Как заставить bean-компонент в области приложения создавать экземпляр при запуске приложения?), и это происходит в моем коде.
Мне просто интересно:
- Как JSF загружает/создает нетерпеливые ManagedBeans ApplicationScoped? Есть ли какое-то правило, в котором порядок может быть определен?
- Почему экземпляр Registry.class не был создан до/сразу после RegistryTwo.class, когда они оба находятся в одном и том же файле jar и оба находятся в ApplicationScoped?