我最近开始维护在OC4J上运行的旧EJB2应用程序。这包括EJB doclet和其他可怕的可怕事情。目前,每个方法都会创建一个ConnectionFactory
来查询Datasource
的JNDI,然后创建一个连接。这导致了很多锅炉板代码。
我现在的问题是:每个无状态会话bean只执行一次是否安全,并重用相同的连接? ejbCreate()
将从JNDI获得连接,然后在ejbRemove()
中关闭它
这是好还是坏的设计?
答案 0 :(得分:1)
由于生命周期方法由容器处理,因此提议的设计将具有不可预测的行为。无状态会话bean由容器(在大多数情况下)和池中汇集。同一个实例可以提供给多个请求。
当第一次初始化bean时,容器调用方法ejbCreate()
和ejbRemove()
。当它分别从池中删除时。因此,它可能会在ejbCreate()
中打开一个连接,但可能无法关闭它。具有相同连接的服务请求。
但是,如果打开连接& bean在池中保持空闲状态,它会不必要地占用资源,最终可能会出现套接字超时,打开连接太多等异常情况。
最好编写一个用于打开/关闭连接的通用方法,以便正确使用资源。
编辑:来自核心J2EE模式 - 服务定位器
使用Service Locator对象抽象所有JNDI用法并隐藏 初始上下文创建的复杂性,EJB主对象查找, 和EJB对象重新创建。多个客户端可以重用该服务 Locator对象降低代码复杂度,提供单点 控制,并通过提供缓存设施来提高性能。