我经常被问到Seam与Seam和Web Beans之间的关系。从高层次来说,Seam项目的使命保持不变:在Java EE环境中提供一个完全集成的开发平台,用于构建富互联网应用程序。在Seam2中,这个平台由以下层组成
- 上下文生命周期、配置和依赖注入模型,这是使一切以一致方式协同工作的基本
胶水
- 一系列模块,它们集成了其他技术,如JSF、jBPM、Hibernate、Drools、Groovy、Wicket和GWT,或者解决了诸如安全性、异步性和渲染PDF、电子邮件、Excel、RSS等常见问题
- 工具
第一层是JSR-299所解决的问题。该规范定义了一个更优雅、更类型安全、更用户友好的标准解决方案,这是对Seam2(以及所有其他解决方案)的重大改进。其价值在于更优雅、更类型安全、更松散耦合的应用程序代码。但许多人认为Seam的真正价值在于它提供了一套完整、预先构建、预先集成的技术堆栈,以及工具支持。这不是JSR-299的作用。
因此,Seam3的目标是将第二层移植到Web Beans骨干。这将使使用Web Beans编程模型的应用程序能够利用Seam所组成的所有集成技术。第二个直接的好处是Seam将与应用程序服务器集成得更一致、更透明,这些服务器原生支持Web Beans。Seam3可能会以比Seam2更模块化的方式进行打包,允许任何基于Web Beans的应用程序“嵌入”Seam安全性、jBPM集成、Drools集成等。希望Seam不会是唯一基于Web Beans提供基础设施的项目。
当然,我们希望让拥有Seam2应用程序的人更容易迁移到Web Beans。有两种可能的方法,我不确定我们最终会走哪条路。我们可以
- 将Seam的核心重新实现为Web Beans骨干之上的一个层,或者
- 简单地允许Seam2和Web Beans并行运行,实现Web Beans和Seam2组件之间的高级互操作性。
第一个选项听起来像是需要做很多工作,但我怀疑这可能会比你想象的更容易。