у меня есть два управляемых бобы, которые оба имеют @ApplicationScope
аннотацию:JSF создает два экземпляра бина ApplicationScoped
Storage.java:
@ManagedBean(eager = true)
@ApplicationScoped
public class Storage {
private static final Logger LOGGER = LoggerFactory.getLogger(Storage.class);
private List<Sheet> sheets = new ArrayList<Sheet>();
public List<Sheet> getSheets() {
return sheets;
}
public Sheet load(String id) {
// ...
}
public void storeSheet(Sheet sheet) {
sheets.add(sheet);
LOGGER.trace(""+this.hashCode()+" Stored sheet: "+sheet);
}
public void delete(Sheet s) {
sheets.remove(s);
LOGGER.trace(""+this.hashCode()+" Removed sheet: "+s);
}
}
StorageInitializer.java:
@ManagedBean(eager = true)
@ApplicationScoped
public class StorageInitializer {
@ManagedProperty(value = "#{storage}")
private Storage storage;
@PostConstruct
public void init() {
int nofSheets = 10;
int min = 20;
int max = 200;
for (int i=0; i<nofSheets; i++) {
storage.storeSheet(new Sheet(
"Sheet "+i,
ThreadLocalRandom.current().nextInt(min, max),
ThreadLocalRandom.current().nextInt(min, max)));
}
}
public void setStorage(Storage storage) {
this.storage = storage;
}
}
Когда приложение запускается, StorageInitializer
должно записать 10 экземпляров в хранилище. Другие бобы с @RequestScoped
делают доступ к магазину и делают листы видимыми. Все они имеют
@ManagedProperty(value = "#{storage}")
private Storage storage;
для доступа к бобам Storage
.
Записывая хэш, я вижу, что иногда получаю два экземпляра bean-компонента Storage
. Первый инициализируется StorageInitializer
. Второй используется бобами @RequestScoped
и пуст.
Для меня это похоже на состояние гонки или проблему с тиминигами. Если я установил точку останова в StorageInitializer.ini()
, все будет хорошо.
Любые идеи?
В какой пакет вы импортировали аннотацию '@ ApplicationScoped'? – BalusC
javax.faces.bean.ApplicationScoped – BetaRide
В обоих случаях? Если все эти классы находятся в WAR (и, следовательно, не EAR), то ваш путь к среде выполнения, скорее всего, загрязнен несколькими различными версиями JSF-библиотек. Проверьте и очистите его. – BalusC