У меня есть такая структура в моем проекте 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?
Другая точка зрения:
Может ли это бытьВозможно, что проблема не в загрузке класса, а в ApplicationScoped eager ManagedBean?Я добавил класс на .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, экземпляр ApplicationScoped eager ManagedBean будет автоматически создаваться при запуске приложения ( Как заставить экземпляр объекта, определяемый приложением, создать экземпляр при запуске приложения? ), и это происходит вмой код.
Мне просто интересно:
- Как JSF загружает / создает ApplicationScoped eager ManagedBeans?Существует ли какое-то правило, в котором порядок может быть определен / может быть определен?
- Почему Registry.class не был создан до / сразу после RegistryTwo.class, когда они оба находятся в одном и том же jar-файле и оба они ApplicationScoped?