EJB2会话bean中的连接处理

时间:2012-01-30 13:27:23

标签: connection ejb connection-pooling ejb-2.x

我最近开始维护在OC4J上运行的旧EJB2应用程序。这包括EJB doclet和其他可怕的可怕事情。目前,每个方法都会创建一个ConnectionFactory来查询Datasource的JNDI,然后创建一个连接。这导致了很多锅炉板代码。

我现在的问题是:每个无状态会话bean只执行一次是否安全,并重用相同的连接? ejbCreate()将从JNDI获得连接,然后在ejbRemove()中关闭它 这是好还是坏的设计?

1 个答案:

答案 0 :(得分:1)

由于生命周期方法由容器处理,因此提议的设计将具有不可预测的行为。无状态会话bean由容器(在大多数情况下)和池中汇集。同一个实例可以提供给多个请求。

当第一次初始化bean时,容器调用方法ejbCreate()ejbRemove()。当它分别从池中删除时。因此,它可能会在ejbCreate()中打开一个连接,但可能无法关闭它。具有相同连接的服务请求。

但是,如果打开连接& bean在池中保持空闲状态,它会不必要地占用资源,最终可能会出现套接字超时,打开连接太多等异常情况。

最好编写一个用于打开/关闭连接的通用方法,以便正确使用资源。


编辑:来自核心J2EE模式 - 服务定位器

  

使用Service Locator对象抽象所有JNDI用法并隐藏   初始上下文创建的复杂性,EJB主对象查找,   和EJB对象重新创建。多个客户端可以重用该服务   Locator对象降低代码复杂度,提供单点   控制,并通过提供缓存设施来提高性能。