2014-11-02 6 views
0

Я запрашиваю DB в этом EJB. Результат Iterable (я не могу это изменить).Как получить новый Iterable для каждого вызова в Stateless EJB

Но поскольку EJB является @Stateless, он будет «повторно использовать» Iterable <>, и результат запроса просто добавляется к нему. Вместо того, чтобы быть «новым»!

Как я мог избежать этого?

Я не знаю, есть ли «исправление» в Iterable или что-то делать с SessionBean? Это плохая комбинация?

@Stateless 
public class StartSessionBean implements Serializable, StartSessionBeanLocal { 
... 
public Iterable<VType> resultQuery; 
... 
    public List<VType> queryThis(String this) { 
... 
     resultQuery = (Iterable<Type>) "query DB"; 
     //Do Things here 
     return something; 
    } 
}  
+1

Возможно, мне что-то не хватает, но почему бы просто не переместить объявление resultQuery методу queryThis()? –

+0

Вы не правы! Но разве это единственный способ сделать работу с Iterable в EJB без гражданства? – Wozilla

ответ

1

Невозможно поддерживать состояние, такое как public Iterable<VType> resultQuery; в сеансе сеанса без состояния. Именно это означает «без гражданства».

На практике то, что на самом деле происходит, варьируется от реализации до реализации. Некоторые из них дадут вам новый боб каждый раз, когда вы его назовете. Другие будут выбирать один из пула и дать вам это, в результате каждый клиент может получить другой экземпляр resultQuery.

Если вы хотите сохранить состояние в EJB, вы должны использовать сеансовый компонент @Stateful.

Редактировать: Вам не нужно поддерживать поле resultQuery в любом случае. Просто сделайте это локальным в реализации вашего метода. Предположительно, вы используете его в цикле for-each, потому что это то, для чего они предназначены.

+0

Да, я предполагал, что вариант без гражданства - это вариант. Тогда, возможно, с @Remove, чтобы сохранить некоторую память. Но, может быть, вы знаете о другой стратегии решения проблемы с Iterable в сеансе сеанса без состояния, некоторые ключевые слова для исследования для меня? Он должен сэкономить некоторые ресурсы с момента его простого приложения и, надеюсь, использовать только небольшие вычислительные ресурсы. – Wozilla

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