2015-10-08 6 views
1

У меня есть read, что bean (SFSB) не должен быть введен в @Stateless bean (SLSB). Но каков правильный способ добиться следующего?Внесение фасоли с состоянием в состояние без гражданства

@Stateless 
public class FirstEJB 
{ 
    @EJB 
    private SecondEJB second; 

    public void businessMethod() 
    { 
     second.businessMethod1(); 
     second.businessMethod2(); 
    } 
} 

Существует некоторое состояние, которое должно сохраняться между second.businessMethod1() и second.businessMethod2(), так SecondEJB не может быть лицом без гражданства. Также нет простого способа объединить методы businessMethod1() и businessMethod2() в один, потому что SecondEJB может иметь более двух бизнес-методов и их можно вызывать в дефференциальных комбинациях.

На самом деле я попытался сделать состояние SecondEJB stateful и, похоже, работает, но это приводит к утечке памяти. Нет SecondEJB методов, отмеченных аннотацией @Remove, но я пробовал @StatefulTimeout без везения: много созданных и не удаленных экземпляров SecondEJB. Может кто-то объяснить, почему он течет?

ответ

0

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

+0

Спасибо. Но я до сих пор не понимаю, почему использование инъекций приводит к утечке памяти: в соответствии с анализом памяти у меня очень мало экземпляров «FirstEJB» (объединены?) И много «SecondEJB», даже если явно задано '@ StatefulTimeout'. –

+0

Вы действительно уверены, что это утечка памяти, а не просто поведение gc? Я не вижу в этом легком примере ничего, что могло бы привести к созданию большого количества sfsb. Причина заключается не в том, чтобы использовать sfsb в slsb, это тот факт, что slsb объединяются и повторно используются, а инъекция происходит только один раз, и вы можете получить уже пассивированный sfsb или с неожиданным состоянием. Таким образом, количество sfsb будет таким же, как количество slsb или немного больше, если slsb по какой-то причине не объединяется. – Stanislav

+0

Или может быть ваш sfsb просто пассивированы и ждут сбора мусора. Нелегко сказать, когда должен быть действительно собран мусор. И это потому, что sfsb, но не из-за какого-то другого кода, который использует один и тот же sfsb одновременно. – Stanislav

 Смежные вопросы

  • Нет связанных вопросов^_^