2012-01-30 86 views
0

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

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

回答

1

由于生命周期方法由容器处理,所提出的设计将具有不可预知的行为。无状态会话bean由容器合并(在大多数情况下)&同一个实例可以服务于多个请求。

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

但是,如果打开连接&豆保持在池中闲置,这将不必要地托起资源,像套接字超时异常可能最终,太多打开的连接等

其更好地写出了推广/关闭连接的概括方法,以恰当地利用资源。


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

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

+0

其他会话bean如何?那些安全的在session bean中“缓存”(在ejbCreate中初始化),就像我目前正在使用连接一样? – 2012-01-31 08:49:58

+0

请参阅编辑部分缓存无状态bean,这些bean不应该包含实例变量。 – 2012-01-31 17:14:06

+0

请注意,如果实例变量消耗资源并且可共享,如缓存数据库中的某些数据,建议使用实例变量。 – 2012-02-01 17:03:31