powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Екземпляр @ApplicationScoped бина создается много раз
5 сообщений из 5, страница 1 из 1
Екземпляр @ApplicationScoped бина создается много раз
    #38961654
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрий день

Есть сервер Glassfish 3.1.2.2

На нем есть приложение с такими бинами:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@ManagedBean(name = "Parent", eager = true)
@ApplicationScoped
public class Parent {

    @PostConstruct
    private void postConstruct() {
        System.out.println("init Parent");
    }

}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@ManagedBean(name = "Child1", eager = true)
@ApplicationScoped
public class Child1 {
    
    @ManagedProperty("#{Parent}")
    private Parent parent;

    public void setParent(Parent parent) {
        this.parent = parent;
    }
    
      @PostConstruct
    private void postConstruct() {
        System.out.println("init Child1");
    }

}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@ManagedBean(name = "Child2", eager = true)
@ApplicationScoped
public class Child2 {

    @ManagedProperty("#{Parent}")
    private Parent parent;

    public void setParent(Parent parent) {
        this.parent = parent;
    }

    @PostConstruct
    private void postConstruct() {
        System.out.println("init Child2");
    }

}



Если несколько раз задеплоить приложение то можно получить результат:
Info: init Parent
Info: init Child1
Info: init Parent
Info: init Child2

То есть Parent бин инициализируется несколько раз, что не есть хорошо.
Как этого избежать?
Поиск по гуглу не дал результатов
...
Рейтинг: 0 / 0
Екземпляр @ApplicationScoped бина создается много раз
    #38961685
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если прописать бины в faces-config.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 <managed-bean eager="true">
        <managed-bean-name>Parent</managed-bean-name>
        <managed-bean-class>com.mycompany.testjsf.Parent</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
    </managed-bean>
    <managed-bean eager="true">
        <managed-bean-name>Child1</managed-bean-name>
        <managed-bean-class>com.mycompany.testjsf.Child1</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>parent</property-name>
            <value>#{Parent}</value>
        </managed-property>
    </managed-bean>
    <managed-bean eager="true">
        <managed-bean-name>Child2</managed-bean-name>
        <managed-bean-class>com.mycompany.testjsf.Child2</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>parent</property-name>
            <value>#{Parent}</value>
        </managed-property>
    </managed-bean>



То все работает, но не ясно почему первый вариант не работает...
...
Рейтинг: 0 / 0
Екземпляр @ApplicationScoped бина создается много раз
    #38962186
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
denis111111,

Не используйте одновременно @ManagedBean и @ApplicationScoped.
Вообще советую отказаться от JSF ManagedBeans из пакета javax.faces.bean в пользу CDI-бинов из пакета javax.inject.*
...
Рейтинг: 0 / 0
Екземпляр @ApplicationScoped бина создается много раз
    #38962257
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGAdenis111111,
Не используйте одновременно @ManagedBean и @ApplicationScoped.

Так по идее их то и нужно разом использовать
WGAdenis111111,

Вообще советую отказаться от JSF ManagedBeans из пакета javax.faces.bean в пользу CDI-бинов из пакета javax.inject.*

Выбрал javax.faces.bean потому что там есть @ViewScoped. Читал где то что это можно было и к CDI прикрутить, но не было времени разбираться.

Пока чтоб не описывать все связи в faces-config.xml переделал @ApplicationScoped бин на javax.ejb.Singleton бин.
...
Рейтинг: 0 / 0
Екземпляр @ApplicationScoped бина создается много раз
    #38963232
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
denis111111Выбрал javax.faces.bean потому что там есть @ViewScoped. Читал где то что это можно было и к CDI прикрутить, но не было времени разбираться.Нагуглить-то недолго . Вот только вам действительно очень нужен @ViewScoped?
denis111111Пока чтоб не описывать все связи в faces-config.xml переделал @ApplicationScoped бин на javax.ejb.Singleton бин.Очень равноценная замена! Взял, быстренько сменил аннотации - а!, вроде работает. А то, что получил точку синхронизации и можно огрести deadlock впоследствии - ну и ладно.

ЗЫ. Мне порой страшно от кода, написанного методом ненаучного тыка )
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Екземпляр @ApplicationScoped бина создается много раз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]