Многие экземпляры компонента Seam в области приложения - PullRequest
2 голосов
/ 23 декабря 2009

У меня есть компонент Seam, аннотированный так:

@AutoCreate
@Name("asyncServiceManager")
@Scope(ScopeType.APPLICATION)
public class AsyncServiceManager {

Классы, которые его используют, настроены так:

@In("#{asyncServiceManager}")
private AsyncServiceManager asyncServiceManager;

При запуске кода я вижу, что класс AsyncServiceManager создается каждый раз, когда он используется. Поскольку я аннотировал класс с помощью APPLICATION, это не должно иметь место. Мне нужно, чтобы этот класс был единственным.

Ответы [ 2 ]

1 голос
/ 12 января 2010

Кроме того, вы можете просто свою конфигурацию. Вам не нужно это:

@In("#{asyncServiceManager}")

Вместо этого, поскольку имя вашей переменной совпадает с именем компонента, этого достаточно

@In
private AsyncServiceManager asyncServiceManager;

В зависимости от того, как часто используется ваш компонент (это оптимизация), вы можете сделать его компонентом в области событий, автоматически создать его при наблюдении события, а затем позволить ему уничтожаться после этого.

Walter

0 голосов
/ 24 декабря 2009

Книга «Шов в действии» гласит:

Любые компоненты, помеченные как запускаемые компоненты приложения (т. Е. Аннотированные @Startup и @Scope (ScopeType.APPLICATION)) * автоматически создаются Seam в это время .

Так что я думаю, что аннотация @AutoCreate должна быть удалена.

Seam использует SeamListener для начальной загрузки помеченных @Scope (ScopeType.APPLICATION) компонентов.

С уважением,

...