December 18th, 2008王者归来之Seam ?!
王者归来之Seam??!!!
前言:
seam : 以前在项目开发的过程中,你需要引入很多框架(比如:hibernate, jsf , 工作流引擎….) , JBOSS说,你们自己做整合,不专业,我来帮你们做了这个工作吧,我来整合,肯定比你们自己整合要好。于此,JBOSS招兵买马,把hibernate的核心团队,JSF规范制定核心团队,EJB3规范制定核心团队等等,都找来当咨询顾问,共讨整合之事,如此诞生了一个新宝宝,取名为SEAM
使用Seam已经有1个多月的时间了,对Seam有一些简单的了解,谈谈我对Seam的一点感想吧。Seam的目标就是把各种优秀的开源系统,J2EE规范,都通过seam这个框架整合起来,从而简化开发工作,提高开发效率。我想这是seam的目标。
seam亮点:
1 JSF和EJB3.0规范实现与整合是亮点之一。
seam实现了SUN公司JSF规范做了不错的工作,在开发JSF应用时,简化了一些JSF。 Seam框架试图简化JSF的开发比如JSF的异常处理,XML配置,JSF组件的调用等等,在开发的时候让JSF和后端的业务逻辑组件(business service bean)达到紧凑,易用的效果。
2 Seam 很有意思的组件管理
我没有去看seam的源代码,但是从seam的介绍文档里有一些简要的介绍,如果有说得不对的地方,仅为交流。
Seam有2种方式来管理组件,一种为了跟JSF,JSP, servlet 等接口,seam 在web.xml 里添加了一个SeamListener,把JSF所需要的组件实例缓存到ServletContext或者HttpSession中,当请求完成或者Session失效时销毁组件实例.
另一种方式是Seam业务组件,这个组件的生命周期管理,类似EJB3规范里规定的方式,Seam业务组件的生命周期管理是否就是EJB3组件规范的实现,还是有自己的管理方式,这些方面的问题,将在以后再去深入了解。
总之,有了对组件的生命周期管理,您不需要去关心事务,并发,同步等问题。我一直都觉得EJB3的组件生命周期管理,比Spring的实现要舒服很多(Spring的组件生命周期管理,还要实现Spring 的InitializingBean,DisposableBean 这2个类,EJB3的组件就是一个很干净的POJO)。
3 Hibernate,Seam中集成的经典JPA
EJB3的JPA规范,作为EJB3的重要组成部分,Seam中对此规范的实现,整合了Hibernate3. 在使用的过程中,好像针对Hibernate3做了一些优化,让您在开发过程中,使用hibernate3更加简单一些了。
EJB2的持久化方案,在过去的几年,被hibernate3之前的版本彻底打败,EJB3开始, 这2家冤家对头,居然走到了一起。在ejb3的JPA规范发布不久,Hibernate就开始支持这一规范, 以前的相互指责,现在变成相互吹捧。
(题外话:其实我在做项目的过程中是很不喜欢hibernate的,不是因为他能提高效率的话,早就抛弃它了。我更喜欢ibatis一些,都是手工写的SQL代码做成映射关系,效率提高很多,可惜他现在对ejb3规范还不支持。虽然开发的时候会多写一点代码,那可是值得的)
Seam真的是王者归来,我见未必。让我们跳出SEAM看seam。
不要看seam的介绍文档说得多好听,好比一个人自己说自己多厉害一样,没用,还是要人家去评价才行。 在你使用seam之前,请仔细评估自己的需求,是否需要使用他。
1,你的项目是否需要使用EJB?
SEAM 在文档里有说明,SEAM也可以开发类似struts+spring+hibernate一样的轻量级架构的系统,但是那是胡说八道。我可以负责任的告诉 你,seam是一个很重的架构,他大多数的技术体系都是偏重于EJB,用他开发SSH类似的系统,只会误事误工。
2, JSF是否适合你的项目?
JSF 是SUN公司主推的一种表示层解决方案。可惜生不逢时,用JSF做企业应用,有Flex,Silverlight等技术比他强。 用JSF做WEB网页方向的应用,JSF更是滑稽可笑。也许有人说,JSF跟Seam有什么关系?但是我告诉你,seam核心目标之一就是整合JSF做表 示层开发,是他整合目标的重要组成部分。如果你打算应用seam,那么表示层的开发就一定绕不过JSF这一关。尽管seam说,他不用JSF也可以,但是 不用JSF,用什么!! 没有其它好的选择了。
3,开发效率低
呵呵,seam说我的开发效率很高嘛,但那是他自己说的嘛,seam开发环境只能在Jboss里运行才有良好的表现,Jboss在开发,调试,部署还是非常麻烦,和tomcat比效率低很多。
4,学习成本
seam引入了很多相关的其它框架包,假设你有良好的JAVA基础,一个未使用过seam的开发团队,熟悉seam起码也要3周以上的时间,这是我见过的学习成本最高的框架,他整合的框架很多,技术面很广.
5,大型系统的解决方案,seam还是无法提供
一个大型的系统,核心的关键点是:负载均衡,集中缓存处理,并行计算, 分布式存取等, seam面对这些问题,一样显得力不从心,这些问题还是需要架构师自己动手解决。而且seam中有一个web beans的技术(我在想,他使用这个是否考虑到整合JSF才这么做呢!),给负载均衡, session的处理还不及其它框架灵活。
Seam是否是归来的王者? 让我们拭目以待!
文章内容只是个人之见,肤浅之处,意在交流。