论坛首页 Java企业应用论坛

发现JBoss Seam很棒呀!有用Seam做过项目的吗?

浏览 126091 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-07-07  
robbin 写道


以上是我对Seam的一点小小的赞许,当然我也有一点疑问:

一、Seam的View实现是JSF,看页面代码还是密密麻麻的Tag

我是非常反感JSP Tag的,看看页面密密麻麻的Tag就头皮发麻,能不能弄一个Template呀,例如freemarker啥的?这些Tag既不直观,也不方便扩展。需要扩展页面组件,总不能让我自定义Tag去干活吧?不清楚这个问题怎么办?像freeamarker还可以方便的自定义页面宏呢。

二、每次修改都要重新打包发布,太麻烦了吧

就算修改一个页面,也要整个打包deploy成为一个ear去拷贝到jboss的应用目录下面,这个要是改页面,不是得烦死? 我以前都是在项目里面直接内嵌Jetty,作为一个application启动,修改页面根本无需重起呀,更不要说deploy了。


总体来说,我觉得Seam框架非常出色,尤其是他的组件机制设计的很有匠心,真不愧是Gavin King精心打造的框架了,虽然看起来还是有些缺陷,但是做企业应用项目的话,Seam是一个很棒的选择,作为程序员来说,要比用Spring/Hibernate/Struts省心的多,更能够把精力放在业务逻辑的编写上面,开发效率也很不错,可能是Java开源框架里面最优秀的快速开发框架之一了。


1.这几天为项目加入了facelets模板机制,可以很好的解决密密麻麻tag的问题,facelets的行为解决了jsf渲染层面的不足。
2.打包ear只是jboss一厢情愿的做法,完全没有必要这样,我现在的做法,Tomcat底下跑facelets+seam+myfaces+spring+hibernate,利用seam的集成测试,可以把单元测试提前到表现层来测试了,测试的范围更加扩大,而且seam最酷的地方就是和spring良好的集成,spring里面可以直接注入seam组件或者作为seam组件存在!
0 请登录后投票
   发表时间:2008-07-07  
看来robbin也很久没有看spring了。要注意的是,每当写到“不象spring那样...贬义词...”时,建议还是去看看spring最新的文档,看该缺点是否还在,要么就注明“不象spring(版本号)那样。。。”。曾经有人不注意这点,结果被spring team耐心地教育了一番。

另外,seam也是用了OpenSessionInView。如果说讨厌的话,两个frameworks都适用。俺用了很久,倒也不觉得有什么问题。

虽然我觉得Gavin King人不怎么样(以前),但对事不对人,俺也觉得seam是不错的东西。要是和spring比的话,因侧重点不同,不好直接比较。
0 请登录后投票
   发表时间:2008-07-07  
bottom 写道
看来robbin也很久没有看spring了。要注意的是,每当写到“不象spring那样...贬义词...”时,建议还是去看看spring最新的文档,看该缺点是否还在,要么就注明“不象spring(版本号)那样。。。”。曾经有人不注意这点,结果被spring team耐心地教育了一番。


我很期待被你耐心的教育一番,我很想借这个机会讨论讨论Seam和Spring 2.5,真的。

引用
另外,seam也是用了OpenSessionInView。如果说讨厌的话,两个frameworks都适用。俺用了很久,倒也不觉得有什么问题。


还是有很大不同。Spring的OpenSessionInView并不是一种被Spring官方推荐的模式,在View中延迟加载数据的时候,已经离开了事务的控制范围了,在某些特定的情况下,会造成数据不一致的问题。特别是有远程调用的情况下,更需要手工处理Session,确保远程调用方法结束的时候就立即关闭Session。Seam看起来没有这些问题,当然我现在还不太清楚Seam的底层实现机制。但是官方文档上面这是一个Seam被宣传的亮点,那应该就不会出现Spring那些问题了。

引用
虽然我觉得Gavin King人不怎么样(以前),但对事不对人,俺也觉得seam是不错的东西。要是和spring比的话,因侧重点不同,不好直接比较。


你可以说说看我对spring有哪些贬低的话,我已经看过了一遍spring2.5的文档,确实很想知道现在spring有哪些我还不知道的,特别不一样的东西。
0 请登录后投票
   发表时间:2008-07-07  
自从RoR流行以来,EJB时代所强调的一分二分再分变为了一合二合再合,Java界合下来的结果就是Seam。
这其实是比较务实的,毕竟大多数项目搞那么多层是没有必要的,来来回回绕那么多弯,最后也未必真能复用到哪里去。
MVC已经足够了。这一点上,RoR已然作出了回应,Seam也是大势所趋。

JSF这东西,以Struts这类的习惯性思维来衡量是不行的。它本质上是标准化平台性质(Sun似乎就喜欢搞这种事情),大家可以对其进行扩展改造,以适应自己的需要。所以如myfaces、RichFaces、ICEFaces、AOM这类的东西才大有可为。

坚守Java领域的同道,大可以考虑好好研究应用Seam。虽然初始开发效率还是不如RoR(大概有1/2),但深入下去静态语言的优越性会慢慢体现出来,最终效益如何未为可知,还待大家实践。
0 请登录后投票
   发表时间:2008-07-07  
lgx522 写道
自从RoR流行以来,EJB时代所强调的一分二分再分变为了一合二合再合,Java界合下来的结果就是Seam。

每次来JavaEye,不想跟别人较什么劲,但是每次总会发现一些个无知的人在说一些无知的话。不明白lgx522说的所谓什么“自从RoR流行以来”是什么意思,RoR对于业界的影响最大的无非是敏捷开发和默认大于配置的思想而已,如果单纯从技术角度出发,RoR还远没有走在技术的最前沿。

lgx522 写道
Java界合下来的结果就是Seam”,
不知道lgx522了解不了解目前Java EE的现状,Java EE6预计下半年不久就会发布,其中最引人注目的是EJB3.1和JSF2.0以及WebBean,WebBean就是Gavin King提出来的,目前Gavin King跟Bob Lee共同支持和制定WebBean的相关规范,草稿已经发布。seam目前的角色跟Hibernate很相似,JPA规范是Hibernate实现的一个子集,JPA可以使开发者免于底层的ORM实现,所以无论Hibernate,OpenJPA,TopLink都可以使用。seam也是同样的,是WebBean的一个参照实现而已,所以最终的结果不是seam,而是WebBean。

虽然最终的Java EE6会是什么样还不得而知,但可以肯定的是,它的最终目标是使Java开发更加简化,而且更加贴近开源社区。目前的seam2.1已经可以整合wicket,所以将来Java EE6对于目前流行的开源项目会是一个更好的整合点。几天前跟robbin还在帖子上讨论Java与RoR的前景,我选择从RoR回到Java,可以看到Java的进步,更看好目前Java界。
0 请登录后投票
   发表时间:2008-07-07  
huixjan 写道
lgx522 写道
自从RoR流行以来,EJB时代所强调的一分二分再分变为了一合二合再合,Java界合下来的结果就是Seam。

每次来JavaEye,不想跟别人较什么劲,但是每次总会发现一些个无知的人在说一些无知的话。不明白lgx522说的所谓什么“自从RoR流行以来”是什么意思,RoR对于业界的影响最大的无非是敏捷开发和默认大于配置的思想而已,如果单纯从技术角度出发,RoR还远没有走在技术的最前沿。

lgx522 写道
Java界合下来的结果就是Seam”,
不知道lgx522了解不了解目前Java EE的现状,Java EE6预计下半年不久就会发布,其中最引人注目的是EJB3.1和JSF2.0以及WebBean,WebBean就是Gavin King提出来的,目前Gavin King跟Bob Lee共同支持和制定WebBean的相关规范,草稿已经发布。seam目前的角色跟Hibernate很相似,JPA规范是Hibernate实现的一个子集,JPA可以使开发者免于底层的ORM实现,所以无论Hibernate,OpenJPA,TopLink都可以使用。seam也是同样的,是WebBean的一个参照实现而已,所以最终的结果不是seam,而是WebBean。

虽然最终的Java EE6会是什么样还不得而知,但可以肯定的是,它的最终目标是使Java开发更加简化,而且更加贴近开源社区。目前的seam2.1已经可以整合wicket,所以将来Java EE6对于目前流行的开源项目会是一个更好的整合点。几天前跟robbin还在帖子上讨论Java与RoR的前景,我选择从RoR回到Java,可以看到Java的进步,更看好目前Java界。


我看你也挺莫名其妙的,lgx522明显是支持Seam和Java EE的,就说了一句RoR如何如何,就踩了你的尾巴了?RoR走的路子和Seam是不一样的,Seam这种强调服务端组件状态的框架完全不适合互联网应用,但它特别适合企业应用,而RoR是反过来的,这两个的应用领域不一样,并不冲突吧?

何况我这个帖子是探讨Seam和Spring2.5的,请你也不要随便跑题吧。 有空就多发表发表你关于Seam和JSF方面的实战经验,谢谢。

0 请登录后投票
   发表时间:2008-07-07  
支持,看了许多web框架,感觉seam对于web开发的问题域考虑的非常全面。给予一定的时间难保变成像hibernate统一orm那样一统web框架 :)
0 请登录后投票
   发表时间:2008-07-07  
seam和spring最大的区别,就是seam的组件可以是有状态的(或者说状态丰富的),而spring的bean则是无状态的。spring的bean并不记得上一次调用它的时候,它具有什么状态。但是在seam中,一个组件在它生存期内,是可以有状态的。Gavin认为人们在开发spring+ hibernate时遇到的阻力主要是来自于hibernate是有状态的,页面表现层也是有状态,但是spring却是无状态的。是这种有状态与无状态之间的不对口,导致orm的能力不能全部发挥,导致了从表现层到服务层的时候状态转换的麻烦。所以seam的理念,就是stateful。

同时为了便于开发,seam也注意了其它地方。比如,
1 大量的使用annotation,减少xml,
2 使用 事件机制, 让方法解耦,
3 集成很多方便使用的技术,richfaces, pdf, rule based 权限机制,等

seam瞄准了企业开发,和jbpm无缝集成,加入 business scope就是专门做这事的。

seam和spring很不一样,使用的时候,要有一痛苦的观念转变过程。


另外,关于OpenSessionInView的问题,seam的文档里好像有专门的说明。传统的opensessioninview不能处理这种情况,当view生成完后,关闭session的时候,可能有一部分状态没有能够成功的持久化到数据库,但是由于view已经生成,用户也无法得到持久化不成功的消息。 seam 没有使用传统的OpenSessionInview。它的hibernate session和 conversation及jsf之间存着联系。当conversation开始时,会开始session和一个事务,在jsf的 Invoke Application phase之后提交事务,保证数据的持久化。而之后这个session并不会关闭,她会开启到conversation结束,而conversation是能跨越redirect get 的,所以后面get 生成view时,也不会出先 LazyInitializationException。 hibernate session可以跨越多个请求,比opensessioninview还要长。
0 请登录后投票
   发表时间:2008-07-07  
Seam研究过一阵子,感觉是jboss各种技术的糅合体,更多像是一种j2ee企业应用开发模式而不是开发框架。另外,讲究分层、架构、复用和模式与代码量大、开发周期长、架构烦琐等没有直接关系。
0 请登录后投票
   发表时间:2008-07-07  
刚才写了一点,没登陆,白写了。

对JSF和Seam都因为恐惧而没有深入接触

习惯了随心所欲的控制web界面上的各种元素,总觉得用拖拖拽拽的JSF会束缚WebUI的开发。
而以前开发EJB时的不爽的体验,也对JBoss失去了兴趣,最大的痛苦就是deploy;

看来星星还是那颗星星。

要不要跟风学习一下JSF和Seam呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics