2014-11-02 59 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

相关问题