У меня есть 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
. Может кто-то объяснить, почему он течет?
Спасибо. Но я до сих пор не понимаю, почему использование инъекций приводит к утечке памяти: в соответствии с анализом памяти у меня очень мало экземпляров «FirstEJB» (объединены?) И много «SecondEJB», даже если явно задано '@ StatefulTimeout'. –
Вы действительно уверены, что это утечка памяти, а не просто поведение gc? Я не вижу в этом легком примере ничего, что могло бы привести к созданию большого количества sfsb. Причина заключается не в том, чтобы использовать sfsb в slsb, это тот факт, что slsb объединяются и повторно используются, а инъекция происходит только один раз, и вы можете получить уже пассивированный sfsb или с неожиданным состоянием. Таким образом, количество sfsb будет таким же, как количество slsb или немного больше, если slsb по какой-то причине не объединяется. – Stanislav
Или может быть ваш sfsb просто пассивированы и ждут сбора мусора. Нелегко сказать, когда должен быть действительно собран мусор. И это потому, что sfsb, но не из-за какого-то другого кода, который использует один и тот же sfsb одновременно. – Stanislav