2014-11-02 47 views
0

我正在查詢此EJB中的數據庫。結果是Iterable(我無法改變)。如何在無狀態EJB上調用每個新的Iterable

但由於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()方法? – 2014-11-02 13:30:41

+0

不,你說得對!但是,這是在無狀態EJB中進行Iterable工作的唯一方法嗎? – Wozilla 2014-11-02 22:45:22

回答

1

您無法在無狀態會話bean中維護狀態,如public Iterable<VType> resultQuery;。這就是「無國籍」的含義。

實際上,實際發生的情況因實施而異。有些人每次給你打電話都會給你一個全新的豆子。其他人將從一個池中選擇一個,並給你一個,結果是每個客戶端可能會得到另一個的實例resultQuery

如果你想在EJB保持狀態,那麼你必須使用一個@Stateful會話bean。

編輯:你不需要維護resultQuery字段。在你的方法實現中使它成爲本地的。據推測,你正在使用它在for-each循環,因爲這是他們的目的。

+0

是的,我猜測無狀態是選項。然後用@Remove來保存一些內存。但是也許你知道在無狀態會話bean中處理Iterable的另一個策略,一些關鍵字可以爲我研究?它應該保存一些資源,因爲它只是一個簡單的應用程序,並且希望只使用少量計算資源 – Wozilla 2014-11-02 11:58:34

相關問題