2015-12-24 2 views
0

У меня есть 2 безгражданных EJB, как показано ниже.Безгосударственный EJB, требующий предварительной конфигурации от другого EJB

@Stateless 
public class BeanA { 
    @EJB 
    private BeanB beanB; 
    @PostConstruct 
    public void init(){ 
     // trying to do some pre-configuration 
     beanB.configure(Map params); 
    } 
    public void doSomething(){ 
     beanB.doSomething(); 
    }   

} 

@Stateless 
public class BeanB { 

} 

Перед использованием необходимо выполнить предварительную настройку для каждого экземпляра BeanB. В большинстве случаев приведенный выше код выполняет эту работу, я думаю, из-за того, что экземпляры BeanB создаются только по запросам из экземпляров BeanA.

Но, наконец, я вижу, что иногда пул «BeanB» beans может содержать экземпляры, которые не были предварительно настроены. Следуя спецификации, такое поведение нормальное, поэтому я понял, что такой подход был неправильным.

Итак, мой вопрос в том, существует ли законный метод для такой предварительной конфигурации? Должен ли я создать BeanB Stateful вместо этого?

+0

Что конкретно вы делаете в предварительной конфигурации BeanB? Откуда взялись параметры? Кажется, что BeanA и BeanB плотно соединены, например. совместно используйте некоторый жизненный цикл. Используются ли они самостоятельно? –

+0

Параметры в основном вводятся в BeanA как env. но они не могут быть введены непосредственно в BeanB. Параметры используются для определения того, какая конкретная реализация компонента должна быть создана внутри BeanB. Не очень дорого для создания экземпляра запроса, но я бы предпочел попробовать сделать это только один раз. – user3714601

+0

И вы правы, BeanA и BeanB никогда не используются независимо. – user3714601

ответ

0

Вы никогда не знаете, какой экземпляр компонента без состояния будет вызван. Так что может случиться так, что вы настроите один экземпляр BeanB, и в следующий раз, когда вы его используете, вы получите еще один экземпляр, который не был настроен. Итак, в этом случае я рекомендую использовать некоторый sessionScopedBean, в этом сеансеScopedBean вы сохраняете свои параметры из BeanA и каждый раз, когда будете использовать BeanB, вы будете загружать эти параметры из sessionScopedBean.

У вас не должно быть глобальных параметров в BeanB (statelessBean).

Что такое области? http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html