0

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

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

4

1 回答 1

1

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

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

但是,如果连接打开并且 bean 在池中保持空闲,它将不必要地占用资源,可能会导致套接字超时、打开的连接过多等异常。

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


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

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

于 2012-01-30T19:19:58.120 回答