EJB Extended 与Seam-managed Persistence Context - 编程入门网
ence Context 在线程之间传递的问题,也不会有 LazyInitializationException 和 NonUniqueObjectException 问题的发生。
EJB Extended 与Seam-managed Persistence Context(2)时间:2011-02-09Seam-managed Persistence Context EJB 3.0 容器管理之下的 Persistence Context 很不错,能解决很多问题,但是还是有些问题无法解决。Seam 很强大,如果有些问题 EJB 容器解决不了了,没关系,把 Persistence Context 交由 Seam 来管理就 OK 了。那 Seam 都能解决哪些 EJB 不能解决的问题呢?先考虑下面两个问题: Extended Persistence Context 虽然可以跨越多个事务,但是每个事务照旧调教不误,这对于想在想让整个操作作为一次事务的话,该如何去做 如果一个业务的一组请求只是调用同一个 SFSB 的话,那么 EJB 的 Extended Persistence Context 可以在线程之间传递,使 SFSB 的整个生命周期都使用同一个 Persistence Context。但如果业务需要调用不同的 SFSB 的话,如何在 SFSB 之间传递。 对于第一个问题,由于 Seam 的 JPA 实现提供者是 Hibernate,而且 Hibernate 提供了一个扩展的 FlushModeType - "Manual"。通过使用这个 FlushModeType,我们可以手工控制何时执行 flush() 操作。在 Seam 的文档中有关于这部分的介绍 《Seam-managed persistence contexts and atomic conversations 》。文档中使用了一段简单的代码展示 Seam 如何实现所谓的 "atomic conversations"(关于代码的内容我就不介绍了,大家通过我提供的链接来浏览 Seam 的文档)。通过这种方式,事务貌似是跨越了整个事务,但我认为 SFSB 中除了调用 flush() 的方法以外的其它方法不是事务的。其实也没有必要,因为这些方法并没有执行数据库操作,所以没有必要使用事务。当然,如果是乐观事物的话,使用了对性能影响也不大(这只是我的一点浅薄的理解,欢迎指出错误)。只有最后的调用了 flush() 的方法有事务的必要。 这就引发了一个令我不解的问题。请先看这篇文章《Extended Persistence Context in Stateful Session Beans 》。在这篇文章介绍了如何只使用 EJB 3.0 去解决“问题1”。文中的 SFSB 的默认事务属性是 "NOT_SUPPORTED",也就是说这个 SFSB 中的方法默认不是事务的。只有最后的调用 flush() 的方法使用了 "REQUIRED" 的事务属性去覆盖默认设置。也就是最后的方法是事务的,其它的不是。这和 Seam 所做的有区别吗?感觉没有区别。但我认为像 Gavin King 这样的大牛绝不会做无用功的,那问题就是 Seam 实现 "atomic conversations" 的内部细节到底是什么呢?欢迎大家回答这个问题。 对于第二个问题,可以通过使用 Seam-Managed Persistence Context 来解决。Seam-manged Persistence Context 需要在 components.xml 文件中进行配置,并使用 @In 注入到 Seam 的组件中。由于 Seam 是一个比较新的框架技术,所以关于 Seam 是如何使 Persistence Context 在组件中传递并没有详细的介绍。应该只是声明,然后透明地使用即可。在一个 jBPM 流程中被使用到的 Seam 组件,其中的 Persistence Context 应该是可以很容易地被传递。(本不应该使用不确定的和模糊的词语,但无奈现在关于 Seam 的文章资料还是有限,所以我也没有找到关于 Persistence Context 在组件之间调用的例子) 结束语:这篇文章解释的问题不多,不过都是我自己的理解。可能有错误的地方,欢迎大家指出。同时,又有一些新问题产生了,应该可以通过阅读 Seam 提供的例子和源代码得到解释。但 Seam 的例子只看过三个,更多的还没有看。看过的 Seam 的源代码更可以忽略不计。继续努力吧!! |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |