把环境配好之后,Seam的例子也运行起来了,看了seam_reference第一章中如下几个例子讲解:
the registration example
the messages example
the todo list example
the numberguess example
又在满江红的网站上找了seam_reference2.0的中文文档,主要看了《the contextual component model》一章,看完以后感觉Seam最核心的地方就是其contextual component model了,不过看完这一章以后只是对Seam有个大概的了解,对其具体的内容,细节还缺乏进一步的了解,对其优点、缺点也缺乏进一步的认识。
然后又找到了《Seam in Action》的电子书,看了一点之后还是觉得这本电子书写得好,内容组织的很好,不象seam_reference后面的章节仅仅是罗列seam的各项功能。
今天把Seam in Action的第一章草草看了一遍,将第一章讲述的内容总结如下:
1、什么是Seam
在Seam in Action中,没有将Seam称之为web framework,而是将其称为application stack。Seam将Java EE中的EJB3、JSF、JPA/Hibernate、JAAS等技术融合在一起,提供了更容易使用的方式,比如conversation、page flows、buisness precesses、rule-based security、JavaScript(Ajax) remoting、PDF rendering、email组合、charting、file uploads、Groovy integration等,用以简化web开发。
2、Seam的目标
简化web开发
3、Seam如何集成各类技术
Seam集成了JSF、JPA和POJO Component
在Seam中将EJB3.0中的Session Bean作为JSF的managed bean,直接将表现层和业务层衔接在一起,使得Session Bean可以直接访问web相关数据,比如request、session、application、JSF的FacesMessage、 Component Tree等。而在不使用Seam时,一般都是使用JSF back bean来作为表现层和业务层之间的中介。
使用annotation中的@Name标注替代了JSF的faces-config.xml中关于managed bean的配置。
Seam不一定必须使用EJB和JPA,也可以使用POJO、Hibernate作为替代。如下图:
上下文相关的组件模型(Seam中的核心概念)
Seam提供了7种类型的上下文,其中属于Seam特有的两种上下文类型分别为:Conversation Context、Business process Context。
Seam提供了统一的组件注册、annotation、异常配置、方法拦截、统一的EL表达式等功能。其中Seam对其管理的组件拦截过程如下图:
4、Seam的核心竞争力
更好的JSF
增强的JSF
Seam对JSF最被认可的改进就是消除了在配置文件中声明managed bean。
Prerender page actions
Managed request parameters (for a given page)
Intelligent stateless and stateful navigation
Transparent JSF data model and data model selection handling
Fine-grained exception handling
Page-level security (per view ID)
基于Annotation的表单验证
Bookmarkable command links (solving the “everything is a POST” problem)
Entity converter for pick lists
Conversation controls
Support for preventing lazy initialization exceptions and nontransactional data access in the view
消除了连接Bean(ELIMINATING CONNECTOR BEANS)
用一幅图可以很好的说明这句话的含义
引入了有状态的变量范围(INTRODUCING STATEFUL VARIABLE SCOPES)
扩展的Persistence Context
Spring中提供了The Session In View Filter,使得persistence manage可以在一个请求中存在,避免了常见的LazyInitializationException。在Seam中,扩展的Persistence Context可以跨越多个请求。其实扩展的Persistence Context是Conversation Context、Business Process Context的基础。
get rich quick
Seam提供了两种方式将Ajax集成到Seam应用中,一种是使用具有Ajax特性的JSF组件,如RichFaces和ICEFaces,另一种是可以在浏览器中使用JavaScript直接调用服务端的组件。
Seam还提供了另外一种意义上的Rich,即将PDF、mail等功能集成到Seam应用中。
提供了一个快速开发环境
代码自动生成
热部署
Seam调试页面
不部署即可以进行单元测试
从目前我个人的理解来看,Seam的作用与能力如下:
Seam将EJB3与JSF整合在一起,消除了JSF与业务代码之间的间隙,直接将表现层与业务层衔接在一起
Seam提出了Conversation Context的概念,将Stateful EJB引入到web开发中,直接与Conversation Context对应
Seam提供了与Jbpm、itext、mail等一系列开源框架的整合,对于需要使用的相关功能的用户来说,提供了便利性
提供了开发工具的整合(Seam Gen与IDE),还可以自动生成部分代码
但由于Seam整合了如此多的框架,带来的一个最大的缺点:学习曲线陡峭,在SSH非常流行的今天,需要面对很多新技术(JSF、EJB3、JPA等),对于一个新手来说难度比较大,如果想使Seam被更多的开发人员使用,必须加强它的文档,目前的文档还是太少了。