|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。上周往见了一个伴侣Mark,他应邀在RedHat的研究会下面先容他已经用JBossSeam做过的一个年夜的项目。由于听了他的演讲,对JBossSeam多了一点熟悉,有点出人意料的便利。以是周末在家下载了JBossSeam玩弄了一下,把Seam自带的examples都扫瞄了一遍,也大抵看了一下Seam的Reference,感到挺冷艳的。因而又在JavaEye下面搜刮了一下Seam,这才发明自从客岁下半年入手下手,JavaEye已有大批关于Seam的会商了,这都一年多已往了,看来本人对Java社区已有点目光如豆了。
写这个文章的目标是和人人一同交换一下JBossSeam,固然我经由过程文档和代码,已对Seam有了很多懂得,可是究竟没有效Seam写过项目,但愿有这方面履历的伴侣多谈谈本人的体味。那末作为举一反三,分离与Spring的对照,我先谈谈本人的感到吧:
1、Seam顺应疾速开辟、简化框架的趋向
在RoR盛行之前,Java社区的支流仍是十分考究分层、架构、复用和形式,而对照无视疾速开辟和简化架构的,其了局就是代码量年夜、开辟周期长、架构相称啰嗦。以对照罕见的Struts/Spring/Hibernate为例,从年夜的分层来讲就有Web层、营业层和耐久层,从细的分层就夙昔到后有:View(JSP)->StrutsAction->SpringBusinessObjectBean->SpringDAOBean->HibernatePersistentObject。假如有Remoting挪用,那末还必要响应的ServiceFacade层。每层都是用分歧的手艺框架大概形式、各层之间整合的体例也是八门五花。把全部项目标架构搭建起来,已长短常贫苦的事变了。
Seam给我的感到像是一个非常复杂的MVC框架,他实践上只要两层:JSFView和SeamComponent。而SeamComponent有两类:一类是EntityBean,另外一类就是SessionBean。EntityBean映照数据库表,SessionBean完成一切的营业逻辑,包含大概的耐久化,事件,呼应页面哀求、贸易逻辑,页面流把持等等。设置文件也未几,除一堆基本的设置文件,独一一个必要不休修正的就是pages.xml了,即设置JSF的view映照。
以是Seam开辟项目看起来很复杂、很间接,无分层之忧?。响应的也会让程序员把精神次要放在营业逻辑组件的完成上,而不是把精神华侈在架构、分层、形式和基本举措措施搭建的事情下面。
2、Seam的数据绑定做的很杰出
因为是一个复杂的两层布局,View和Component之间的数据绑定做的很杰出,看起来比我浏览的Webwork的数据绑定体例更胜一筹。官方的说法叫做双向依附注进,在component内里能够间接取到页面提交的数据,在页面也能够间接会见component数据。
别的耐久化数据的校验也间接集成好了,在EntityBean内里声明数据的束缚,在页面就能够间接校验了,和RoR的数据校验体例是一样的,固然这也得益于GavinKing是Seam和Hibernate两个项目标作者的原因。
3、Seam的组件机制看起来相称好用
既然Seam简化了分层,实践上把次要的事情都推到组件层往完成了。可是Seam的组件层看起来很复杂,这得益于Seam的组件机制计划了良多的组件形态,依据分歧的组件形态,自然的分别了分歧组件的功效和逻辑。
Seam的组件有点相似于把传统MVC的Action和Spring的Bean合二为一了,但仍是分歧于传统的MVC框架上面的Action:传统的MVCAction是基于页面哀求的,没法复用,而Seam的组件是事务驱动体例,它只必要捕捉和完成事务代码就能够了,至于怎样触发它其实不必要晓得,他和Web层能够不绑定,因而实际下面来讲是能够完成组件复用的。我团体以为Seam的这个组件机制十分奇妙,既能够用来完成呼应页面事务,绑定页面数据的所谓WebBean,也能够用来完成和Web没有任何干系的纯营业逻辑组件,一个很大度的完成。
别的Seam的组件注进机制看起来也很复杂,不像Spring那样贫苦,并且内置了良多现成的组件出去,间接用Annotation声明一下就能够用了,感到写组件真的很便利、很天真、很壮大。
4、Seam把数据库资本的办理和事件的封装完整埋没起来了
Spring的数据库资本办理和事件封装是经由过程供应了一系列的代办署理类和设置文件来完成的,程序员仍是要经由过程设置文件的体例来手工办理事件,会见数据库也必需经由过程Template编写匿名外部类来完成,并且在Spring/Hibernate框架上面,OpenSessionInView是一个很厌恶的成绩。
可是Seam已把数据库资本的办理和事件的封装全体都埋没起来了,程序员完整不必要晓得,也不必要费心这些事变,这真是个年夜年夜的束缚。固然Seam能够做到这一点,也不过是由于Seam供应了一套上至View层,下至耐久层完全的框架,因而能够把完成细节埋没在框架外部,不表露给程序员。Spring之以是做不到这一点,也由于他只充任了一个黏合剂,不克不及够间接修正View层和耐久层带来的限定。
5、Seam对第三方框架的整合看起来比Spring更深切
本来印象傍边只要Spring才供应了一站式的办理计划,此次一看Seam文档,呵!发明Seam也都完全了,甚么邮件啦、事情流啦、页面流啦、划定规矩引擎啦、异步义务调剂啦、动静体系啦、Web服务啦、远程挪用啦、乃至全文检索啦全体都集成了。并且集成的比Spring更深切一些,比方JavaEE自己的JMS,MDB天然是Seam的刚强,而JBoss自家的JBPM,JPDL,Rules集成的加倍没得说。
从整合角度来讲,感到Spring和Seam的起点分歧:Spring更像一个平台,我供应整合的大概性,然后程序员你自家往整合,我供应一些写好的整合bean,关于这些你经由过程XML设置一下就整合出去了,假如我没有供应bean的,那末你也能够本人写bean来整合。而Seam更像一个完全的框架而不是平台,我这个框架想供应的功效,框架本身就已整合好了,你间接用就是了,你也能够本人写扩大来整合,可是这个不是Seam但愿程序员做的事变。
因而关于程序员的感到来讲,Spring给你供应了统统的零件和半制品,但你要本人下手来组装,而Seam已给你装好了一个制品,你就别本人改装了,间接拿往用吧。
6、Seam供应了便利的代码天生器
和appfuse相似,能够间接用anttask来天生一个完全项目标骨架,和响应的组件代码天生器,使用seam-gen能够疾速天生一个完全的、带有AJAX功效的CRUD项目,并且仍是一个eclipse大概netbeans工程,你能够间接用IDE翻开编纂了。这功效固然不太难做,可是关于程序员来讲,匡助是很年夜的。Seam做的相称不错。
以上是我对Seam的一点小小的赞同,固然我也有一点疑问:
1、Seam的View完成是JSF,看页面代码仍是密密层层的Tag
我长短常恶感JSPTag的,看看页面密密层层的Tag就头皮发麻,能不克不及弄一个Template呀,比方freemarker啥的?这些Tag既不直不雅,也不便利扩大。必要扩大页面组件,总不克不及让我自界说Tag往干活吧?不分明这个成绩怎样办?像freeamarker还能够便利的自界说页面宏呢。
2、每次修正都要从头打包公布,太贫苦了吧
就算修正一个页面,也要全部打包deploy成为一个ear往拷贝到jboss的使用目次上面,这个如果改页面,不是得烦逝世?我之前都是在项目内里间接内嵌Jetty,作为一个application启动,修正页面基本无需重起呀,更不要说deploy了。
整体来讲,我以为Seam框架十分杰出,特别是他的组件机制计划的很有匠心,真不愧是GavinKing经心打造的框架了,固然看起来仍是有些缺点,可是做企业使用项目标话,Seam是一个很棒的选择,作为程序员来讲,要比用Spring/Hibernate/Struts费心的多,更可以把精神放在营业逻辑的编写下面,开辟效力也很不错,多是Java开源框架内里最优异的疾速开辟框架之一了。批评
家常咖啡8分钟前Seam实践上是对JSF架构的延长和扩大,能够说Seam和JSF是互相关注的。JSF自己就是一个完全的Web架构,超越JSP或Servlet等手艺的范围,文中所说到的组件和数据绑定等特征都是JSF的特征。
JSF的界面开辟更多要借助工具来举行。今朝,Java集成开辟情况,如NetBeans,对JSF的撑持已做到所见即所得,对组件拖拖拽拽举行结构,然后对组件的属性举行设定,相似开辟桌面GUI使用的体例。
固然,间接让美工接纳Java集成开辟情况来事情仍是不太实际。JSF已将Web界面完整从处置中提掏出来,这实践上供应了一种大概,即让现有Web界面计划工具(如FrontPage或Dreamweaver等)来天生JSF页面。假如能有人开辟出如许的插件或工具(将HTML转换成JSF标签),信任将会将JSF使用提到更高的条理。isky13分钟前感到用JSF最年夜的弱点就是页面的美工欠好整偶然候链接的CSS文件,呈现的效果稀里糊涂。不如其他的view展示,好作美工。koda3小时前甚么脚穿甚么鞋,关于企业使用,Java仍旧是我的首选,可是关于良多Internet项目,最少在启动期,我仍旧会选择剧本言语,至于静态言语,特别是java有甚么成绩,Robbin已说了,我再夸大一下:
1.糟糕的tag式页面--仅仅是看上往很美。
2.任意改个工具就要从头打包公布--太不Agile了吧
为了对付庞大的使用,没有任何言语的平台能够传播鼓吹本人充足复杂。这是个哲学成绩。假如为了一个复杂的使用选择SEAM,进修本钱是必需考量的,最少,你的团队的人都必需是专业的人,你的团队,筹办好了吗?cats_tiger10小时前robbin看到的两个不敷也是我不必seam的缘故原由,原本就不喜好JSF,再怎样整合也是废柴。等候JSF2.1吧。
Jboss反复的启动也十分不爽,不如jetty快,没想到每次修正还必要打包和deploy,让我想起了N年前用EJB的疾苦履历。团体以为所谓“疾速开辟框架”,container的启动速率长短常主要的一个特征,既然java不克不及做到主动的ClassLoad,那末就让Container只管快的启动。seam在这个方面做的还不敷。may_cauc10小时前facelets+seam+jpa(hibernate)+tomcat
使用jbosstools作为开辟情况,相称便利,不必ejb的话能办理楼主的全体的成绩Anatorian11小时前能够以explode的体例公布的。如许*.xhtml和*.page.xml都不必要重部署就能够失效了。令外,放在war/WEB-INF/dev/下的classes可以热部署,可是有些限定:
1,不克不及是EJB,只能是POJO
2,不克不及被在war/WEB-INF/dev/外的类援用
3,不克不及是实体类
我们刚用seam开辟过项目,走过很多弯路呀。正在探索一个seam的最好理论melin12小时前打成ear也要吓退很多人,实在由于这个缘故原由,以是就没有实验过seam。j2ee的顽症。EJB3.1假如能间接公布成war包,间接部署在servlet容器中就行了。我如今用openEJB就如许的。弄一个jetty。happylo12小时前基于JSP的JSF页面看上往的确头皮发麻,一样平常来讲,基于SEAM的项目会保举利用Facelets,它是利用JSF的一种全新体例,利用起来十分恬逸。来自:http://robbin.javaeye.com/blog/212105
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net网页编程,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|