- 浏览: 793951 次
- 性别:
- 来自: 成都
最新评论
-
天塔上的猫:
技术孵化,任重道远啊!不过大哥能力牛逼啊,相信会有实现的一天的 ...
技术孵化的探索之路 -
SIHAIloveYAN:
谢谢分享,刚刚考上研究生,对我有很大的帮助,希望5年后再回到这 ...
我的2015 -
MUMU影子:
...
技术孵化的探索之路 -
tonyyan:
谢谢分享!
Java源码阅读的真实体会 -
cauchenlu:
http://ez.web126.cn/这个不错,完全颠覆目前 ...
一种快速开发的Java Web架构设计和实现(续)
近段时间,给公司一项目组培训Seasar Framework (http://www.seasar.org/en/index.html),一个非常类似于Spring Framework的框架,它起源于日本,并且在日本非常流行。现在我对这段时间的学习做一个总结。学习和培训过程中,我们以一个mini Blog项目练习,功能需求类似于Javaeye的blog。
Seasar framework最初公布于众是03年8月,那时是作为一个应用服务器,依托于Web 容器Jetty和数据库HSQLDB。后来,于04年3月,经过改造,成为一个轻量级DI(Dependency Injection)和AOP容器,并重新命名为Seasar2。经过一段时间的发展,从05年4月,该项目移到sourceforge.jp,并且真正意义上的开源,用的是apache liscense2.0。
就像其它DI容器一样,Seasar中的组件也是通过xml配置文件定义,但是,它引入了“Convention over Configuration”,有点类似于Ruby On Rails的CoC,和Spring的配置文件比起来,确实小的很多。
Seasar框架主要由三部分组成:
Seasar内核和扩展:框架的DI和AOP实现,以及一些相关服务,如连接池、事务、JDBC框架
相关软件:如S2Hibernate,S2Dao,S2Struts,S2JSF
Sandbox软件:就是相关软件的开发中版本。这类软件非常多,如对JMS、Remote的支持框架。
Seasar框架,除了以Java版本为主外,还有.Net和php5版本。当然,这两种语言的扩展框架不如Java版丰富。
我自己对Seasar框架整体的看法:
1、 从框架的使用来说,和使用Spring没有太大区别。Spring提供的IoC和AOP,它几乎都提供,而且第三方扩展也都差不多。
2、 Seasar的配置文件,比Spring的少很多,这也是官方宣传的亮点。因为它可以根据规则,将组件和组件的关联一次性配置。这些规则,就是接口和接口的实现类的命名、分包方式。
3、 Seasar的官方英文文档很少,而且几乎只有官方网站支持,没有论坛。我主要是看源码,再结合文档看。而且源码没有任何注释。但是,它的代码量比较小,两个核心包加起来只有2w行代码(不包括注释和空行)。
4、 Seasar也是一个一站式框架。它除了提供核心DI和AOP服务外,还有持久层和表示层框架,比较有特色的是Mayaa模板,类似于Tapestry那种方式,一个html,一个.mayaa文件。
下面,我大致介绍一下在用Seasar开发过程中用到的一些流行框架组合:Seasar+S2Dao+S2Struts+Mayaa。
S2Dao:
这是Seasar自己的持久化解决方案。非常精致,只有6000多行代码。不过功能比起Hibernate弱很多。但是,对于不是非常强调OO建模的应用来说,我认为是足够了。它不是ORM,只是实现了DAO模式,并且开发人员不必和JDBC打交道。
而且,我觉得它最大的亮点,就是不用写持久层代码,用户只需写接口,以及某些接口方法对应的sql。它会通过AOP自动生成实现类,而且也是声明式事务。
它的开发过程大概是:
1、 根据数据库table,写Entity类。注意,不是命名为Model,因为它只是数据库表的实体映射,就如同E-R图的E部分,在Entity类中,通过字段表示如下信息:对应的数据库table、字段对应信息、多对1关联关系等等。注意,它只能实现多对1关联。
2、 写出DAO的接口,譬如基本的CRUDL操作,要是有复杂的CRUDL,可以通过方法名、以及对应的sql搞定。但只能用一条sql。所以,譬如当我们要实现复杂的insert操作,必须在Service层组合几个dao的接口方法,然后加上声明式事务。
3、 对于多数据库支持,是通过在sql语句的文件名后面加上数据库后缀,如UserDAO_findByUsername_mysql.sql。我觉得非常不爽的地方时,它必须每个方法一个sql文件,要是我一个dao接口有30个方法,我不是要写30个sql文件?当然,sql语句可以注释在DAO接口上面。
大概以上三步概括了S2Dao框架的基本使用,它没有什么特殊用法,因为我看源代码上也很简单。因为它省去了在ORM框架中最难的部分:关联映射、继承关系、cache等。不过,这样也让S2dao的持久层开发异常简单。
对S2Dao的整体感觉,它和EJB中的实体Bean,特别是CMP非常类似,又有些BMP的特性。但是,它的配置文件除了sql,几乎没有。
当然,持久层还有和Hibernate集成的S2Hibernate,但比起Spring差远了。
S2Struts:
它是Seasar用DI和AOP技术对Struts进行封装。它支持Struts的Action风格和配置,同时,也支持纯POJO的Action。后者的Action是官方的推荐,它不用像Webwork那样实现特定的Action接口,它就是普通的JavaBean,但是它一般需要实现一个自己的接口,这点有些不爽,但对于Action配置很方便。另外,它的ActionForm也完全是普通的JavaBean。
整体上,S2Struts的使用和Webwork惊人的相似,类风格也非常一致,譬如方法的返回值是一个字符串。
S2Struts通过 prototype的实例生成方式,解决了Struts本身的线程安全问题,因为Struts是共享一个Action实例。所以,在S2Struts的Action里面,我们可以声明实例变量。
S2Struts的实现原理大致是:通过AOP将普通JavaBean的ActionForm动态注入自己的S2BeanValidatorBean,该Bean继承于Struts的ActionForm。普通POJO的Action类也类似这样:动态将ActionForm和ActionMapping等注入。而且,通过filter,将HttpServletRequest,HttpServletResponse等实例注入Seasar 容器的ThreadLocal变量里,而Action可以通过访问容器来获取这些组件,同时,这些对象也自动通过Setter方式注入Action,这样Action就可以和Web容器打交道了,譬如直接调用reponse.sendRedirect导航,因为在url里面动态注入参数这类需求不容易实现,但Webwork可以在配置文件里面通过类似viewUser.do?id=${id}方式注入id值。
表示层模板语言Mayaa:
我认为这是它的一个亮点,当然Mayaa不属于Seasea,它是一个单独的项目,譬如官方已经将Mayaa和Webwork2集成了,但是它挂在seasar下:http://mayaa.seasar.org/。我接触过几种模板语言,如Velocity、Freemaker,Tapestry的html,但是,我认为,Mayaa是设计上最优雅的:它可以完全将html页面单独拿出来设计。通过每个html文件并列的mayaa文件写展现逻辑,动态注入html页面。
Velocity和Freemake对于美工和可视化编辑并不友好,Tapestry这种事件驱动框架生成的url也不友好。
不过,也有一些限制,它现在只有日文文档,模板出错调试几乎不太现实:大量反射。Mayaa的文档还是挺丰富的,我是用google的网站翻译工具,再结合官方examples学习的。
Mayaa现在支持三种标签库:Struts、JSTL、mayaa标签,所以mayaa的使用主要在标签上。
另外,Mayaa有自己的布局管理器,功能类似于Tiles和Sitemesh。
Mayaa的实现原理,大致是根据html的tag ID,用mayaa模板对应的ID动态替换。
Mayaa的demo,很多用直接的html请求,如listArticls.html?userId=12方式请求,mayaa模板文件里调用action方法
<s2struts:init action="#{ownerAction.doInitRegisterOwner}" />
,虽然方便,但这样就退化到了Model 1请求方式,从Model 2的Push退化到了Pull,一会儿 .do请求,一会儿 .html请求,让人对Request.setAttribute很迷惑。
这次,就介绍到这儿了,下次我再对Seasar框架的设计原理,特别是源码做初步探索。
评论
5 楼
mb459
2007-07-20
怎么没有“ 系列(二)”呢?
4 楼
l0_ol_le_el
2007-07-11
下个项目要用seaser,同在大连,强烈关注。
3 楼
liufanjavaeye
2007-04-27
学习,公司也有个项目在用seaser, 不过俺没有参加,没有深入了解
2 楼
zwchen
2007-04-24
cherami 写道
呵呵,这个果然是趋势啊,spring之类的就是太灵活,需要太多的配置,其实根据规则来很简单,也可以让各种命名更加的一致。
我想,Spring应该是没有想到根据规则匹配这个idea,要是它去做,我认为还是很easy的,因为Seasar中处理组件配置的实现技术并不难。
1 楼
cherami
2007-04-23
呵呵,这个果然是趋势啊,spring之类的就是太灵活,需要太多的配置,其实根据规则来很简单,也可以让各种命名更加的一致。
发表评论
-
一个优秀的Java企业应用框架的设计和实现
2013-10-25 17:43 52一个优秀的Java企业应用框架的设计和实现: http:/ ... -
一个Java框架引发的思考:语言、框架、范式转换和软件生产力
2011-09-10 13:26 3693前几天,iteye上的pojo同学,发来了他四年前写的一个框架 ... -
电子商务网站,前后台是否该分离?
2011-08-21 12:44 8035做电子商务网站,一般 ... -
Java源码阅读的真实体会
2011-08-20 19:51 25758刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅 ... -
我理解的互联网应用和企业应用开发
2011-07-12 12:01 3169前段时间,我写过一篇该主题的博客,但写完了,我觉得还是没有谈到 ... -
一个在读学生的疑问及我的回复
2011-06-24 11:39 3076我经常收到类似的站内信,然后花上半个来小时回复(我摆文字真的非 ... -
一位技术人员成长历程
2010-05-26 15:52 126084、坚持了第一个月,再坚持半年,以后的学习速度越来越快,你离 ... -
Java虚拟机技术总结(07年写的,原JavaEye精华帖)
2010-04-17 11:15 8350原文:IBM WebSphere Application Se ... -
IBM WebSphere Application Server 诊断和调优(07年写的,原JavaEye精华帖)
2009-12-19 11:07 8259这是上篇文章的续篇, ... -
JBPM源码浅析
2007-09-13 15:04 16452离职啦,工作交接中, ... -
JBPM阶段性工作总结
2007-09-12 15:20 14427快要离职了,工作交接 ... -
AIX学习总结笔记一
2007-07-03 18:07 8484公司项目用到AIX和Websphe ... -
软件开发的一点感想
2007-06-29 10:53 6070这两天,遇到工作中的两个小问题,加深了我以前对软件开发的看法。 ... -
Java线程安全系列(1)--Servlet线程安全
2007-06-16 23:19 13256刚才search的时候,竟然 ... -
从分布式系统的角度看REST
2007-05-28 20:37 3581原帖:http://www.iteye.com/t ... -
也说说项目成败、企业信息化
2007-05-19 15:25 2598这篇文章是我对nbsp同学 ... -
读HSQLDB的源码想到的
2007-05-17 10:36 9241昨天在论坛看到一篇讨 ... -
Web Services开发体会和项目教训
2007-04-21 14:42 52843去年,在一个大型项目( ... -
Struts的html:options 标签内幕
2007-04-20 18:14 7928最近用一个在日本很流 ... -
HTTP客户端POST方式中文解决方案
2007-01-17 20:26 17528这段时间,在给一个地 ...
相关推荐
6. **Web开发支持**:Seasar2提供了S2Framework,这是一个基于Servlet的MVC(Model-View-Controller)框架,简化了Web应用的开发。它包括了请求处理、视图渲染、URL映射等功能。 7. **测试工具**:Seasar2集成了...
Seasar是一个在中国编程社区中不太为人所熟知但十分有价值的开源框架,主要针对Java开发,尤其在数据处理领域具有显著优势。Seasar项目旨在提供一套全面的解决方案,包括面向切面编程(AOP)、数据访问对象(DAO)...
使用Seasar2的基本功能(如S2Container和S2AOP)时,需要在CLASSPATH下包含一系列特定的JAR文件,包括aopalliance、commons-logging、javassist、ognl和s2-framework等。 如果要利用Seasar2的扩展功能,如S2JTA、S2...
日本框架seasar 的一个action处理
使用Seasar2的基本功能,如S2Container和S2AOP,需要在CLASSPATH中包含特定的库文件,包括aopalliance、commons-logging、javassist、ognl、s2-framework等。如果要利用Seasar2的扩展功能,如S2JTA、S2DBCP、S2JDBC...
Seasar2是一个开源的Java框架,主要功能包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。这个框架的设计目标是提高开发效率,通过将组件(Plain Old Java ...
Seasar2是一个源自日本的开源框架,被广泛认为是类似于Spring的一种轻量级容器。它主要面向那些在Java应用开发过程中遇到挑战的开发者,旨在提高开发效率并确保高质量的代码产出。 **特点总结**: - **高生产率和...
seasar教程,最流行的java开发框架之一,再过几年可能成为主流. struts与Spring与Hibernate的简化版本,国外很多大公司己经用了几年了,NEC,LG的软件开发都是用这个的。兄弟们快学吧
Seasar2是一款面向Java开发者的开源框架,它旨在简化企业级应用的开发工作,特别是针对数据库操作和配置管理。Seasar2的核心理念是通过减少繁琐的XML配置文件,提高开发效率,让开发者能够更加专注于业务逻辑。其...
Seasar2是一个由日本开发...然而,随着Spring Framework等其他轻量级框架的崛起,Seasar2在近年来的流行程度有所下降。尽管如此,对于学习Java企业级应用开发的历史和技术演进,Seasar2仍然是一个值得了解的重要框架。
Seasar2是一个源自日本的开源Java框架,它旨在简化企业级应用的开发过程。这个框架提供了全面的工具和组件,包括数据库访问、事务管理、IoC(Inversion of Control)容器、MVC(Model-View-Controller)架构支持以及...
Seasar2是一个已退役的Java应用框架,它旨在简化企业级Java开发,提供了一系列的工具和组件,包括数据库访问、事务管理、IOC(控制反转)和AOP(面向切面编程)等功能。Seasar2的核心组件包括S2Container、S2DAO、S2...
为了理解Seasar2框架的基本概念及如何快速启动一个项目,我们首先介绍一个简单的示例:实现一个问候功能。在这个过程中,我们将学习Seasar2中的核心组件之一——`S2Container`。 ##### 登场人物 - **问候语类** (`...
Seasar框架是一个源自日本的开源Java Web框架,它旨在简化Web应用程序的开发并提高开发效率。Seasar提供了多个组件,其中一个是DOMA(Database Object Mapping Accessor),这是一个强大的数据访问层,它允许开发者...
Seasar 是一个源自日本的开源框架,最初是为 Java 平台设计的,它提供了一系列的组件和服务,如持久层框架、AOP(面向切面编程)、事务管理等,极大地简化了企业级应用的开发。然而,随着 .NET 框架的发展,Seasar ...
Seasar框架是一个源自日本的开源Java开发框架,它旨在简化企业级应用的开发流程,提高开发效率。Seasar提供了一套完整的解决方案,包括容器管理、数据访问、MVC框架以及Web应用开发等组件。在这个“S2Containor+S2...
Seasar2是一个开源的Java应用框架,而S2DAO是其数据库访问组件,它提供了简单易用的接口来处理数据库操作。然而,你提到的是"seasar2 samples",但结合描述,似乎这里指的是.NET环境下的一个类似实现,可能是基于C#...
Seasar2是一个轻量级的Java应用开发框架,它的核心理念是为了解决开发者在进行Java应用程序开发时遇到的各种困扰,比如代码重复、模块耦合度高等问题。作为一个容器,Seasar2提供了一种结构化的开发模式,它可以帮助...
Seasar2其实就是类似于spring的一个提供DI功能的开源框架,但比Sping轻量级。 并且同“其它轻量级容器”不同的是,“完全不需要书写设定文件”,“就算是应用程序发生改动也无需再次起动即可直接识别变更,因此具有...