设计与选型1. WebMVC Framwork: SpringMVC3.0 Restful的风格终于回归了MVC框架的简单本质,配合JPA2.0,开发效率十分高,对比之下Struts2概念太复杂更新又太懒了。
SpringMVC3.0风格简洁明了,学习成本较低,开发效率较高,运行速度较快。
Strus2 VS Spring MVC 3struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入struts2实际上是通过setter getter方法与request打交道的struts2中,一个Action对象对应一个request上下文Spring MVC 3不同,Spring MVC 3是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去在Spring MVC 3中,一个方法对应一个request上下文struts2是类级别的拦截, 一个类对应一个request上下文,Spring MVC 3是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应所以说从架构本身上 Spring MVC 3就容易实现restful url ,而struts2的架构实现起来要费劲,因为struts2 action的一个方法可以对应一个url ,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了Spring MVC 3的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦Spring MVC 3的验证也是一个亮点,支持JSR303 ,处理ajax的请求更是方便 只需一个注解@ResponseBody ,然后直接返回响应文本即可Template:JSP2.0且尽量使用JSP EL而不是taglib,Freemarker们始终有点小众, 而Thymeleaf与美工配合度非常高,可惜也是太少用户了。
Layout Decoration: Tiles的配置都太复杂了,SiteMesh2好些。
Javascript Library: jQuery 是目前最流行的 JavaScript 库,随大流用了JQuery。
其实Dojo的面向对象语法更优美,但用户数和插件社区差了点。
随着互联网技术以及HTML5的发展,越来越多的应用开始注重用户体验(与用户之间的交互),这也给了JavaScript/jQuery一个急速发展的时机。
jQuery越来越受到开发者的欢迎,这是有依据的:•互联网中近一半的网站都使用了jQuery;•一项调查表明74%的移动web开发者使用了jQuery。
近日发表了一篇调查报告称,在过去的一年中,在排名前100万的网站中,每4分钟就有一个网站开始使用jQuery。
下图显示了jQuery份额的变化,在2010年10月为25%,截止到本月,已经翻了一番,达到了50%。
CSS Framework: 最热火的Twitter Bootstrap,提供了简便的布局能力和基本的页面美化。
Bootstrap是来自国外有名的一个社交网站Twitter,是快速开发Web应用程序的前端工具包。
它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。
JavaScript/CSS 压缩工具: 还是随便选的YUI Compressor,因为只是压缩js/css文件,选什么都一样,没有本质差别。
Validation: JQuery Validation Plugin这种客户端校验的客户体验更好,而Spring MVC 集成Hibernate Valiator的服务端校验则可以避免恶意用户跳过页面直接发送请求,校验规则也更多, 所以需要混合使用。
2. WebServiceSOAP WebService: JAX-WS2.0的注解 + Apache CXF 无疑是最成熟的,一说起Axis1/2我都要打冷颤。
Axis2 VS CXF1.Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile2.Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-IBasicProfile,WS-Policy将在新版本里得到支持3.Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合,Axis2 不是4.Axis2 支持data bindings包括XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
5.Apache CXF 支持 JAXB 、Aegis、XMLBeans、JiBX 和 Castor,并且默认是JAXB 2.06.Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web ServicesAxis2与Axis2性能的比较1.CXF比Axis2快2-6倍2.CXF的响应时间是Axis2的1/2到1/5CXF更注重开发人员的工效和嵌入能力。
大多数配置都可以API来完成,替代了比较繁琐的XML配置文件, Spring的集成性经常的被提及,CXF支持Spring2.0和CXF's API和Spring的配置文件可以非常好的对应。
CXF强调代码优先的设计方式(code-first design),使用了简单的API使得从现有的应用开发服务变得方便。
Restful Service: JAX-RS 1.0 + Jersey,够标准。
但直接使用Spring MVC能使架构更简单。
如果追求极致的性能标,直接写Servlet也没啥。
在Restful Client方面,暂时还没有JAX-RS标准,直接使用Spring的RestTemplate也是为了减少技术的引入。
为了隔绝变化影响,隐藏细节,对外暴露的DTO和应用内部的领域对象是不同的类型,用Dozer进行复制。
请求参数的校验,JSR303 Bean Validator的实现Hibernate Validator没太多的竞争对手。
3. DatabaseORM Framework: 快速开发的应用里,领域对象肯定是用JPA标注的。
至于API用Hibernate还是JPA,因为那个极简便的,DAO只要写接口就好了的Spring-Data-JPA,所以选了JPA。
当然,JPA的实现还是用Hibernate。
追求高性能的应用,如各种Web服务,当然就是MyBatis了,最新的官方默认做法已经很潮了,不再需要Config.xml, 也不用在编写Dao实现(只需要DAO接口)。
如果项目再简单点,Spring JDBC其实也不错。
Cache: 在JVM里的缓存,最老牌最多人用的依然是Ehcache,一些更强大的DataGrid方案如HazelCast,JBoss的Infinispan反而没什么人用。
另外最简单的JVM内缓存是Guava的Cache。
而中央式的缓存,Memcached已经成为了事实标准。
而且当主创撒手不管后,社区现在反而有着稳定的更新。
Client方面,比较稳健选择的还是Spymemcached。
3. ServicesSecurity Framework: 选择Apache Shiro是 因为SpringSecurity的代码复杂度已经超过了它的实际需要,扩展困难痛苦。
另一个原因是SpringSecurity的基本API居然只支持 基于角色的判断hasRole("Administrator"),而Shiro同时还支持我们其实更常用的基于Permission的判断(hasPermission("User:Edit"))。
JMS: ActiveMQ是最成熟JMS实现,JBoss的HornetQ同样只是喊得大声。
但还有更复杂的AMQP协议的RabbmitMQ,或者ActiveMQ自己新出的Applo可以选择。
Spring自带的JMS封装很好用。
Schedule: 对于固定时间间隔的任务,JDK自带的Executor已足够好,Cron式定时执行,Spring的Scheduler也能满足。
而且Spring的提供的纯XML配置也让Scheduler变得很简单,Quartz更大的优势体现在保证集群中有且仅有一台服务器执行任务。
JMX: Jolokia能将JMX中的MBean以Restful+JSON的方式暴露出来,使JMX这个古老的,在平台互通中显得有点封闭的协议重新焕发了青春。
而Spring-Jmx将普通POJO注释一下就变成MBean也非常方便。
4. 工作流用Activiti5,其实jBPM5规则引擎结合业务流程管理系统更具优势,Drools+ jBPM5为您提供一个声明式编程的完整平台,将为你的应用增加许多重要的特点,诸如CEP引擎的优点以及集中式业务资产库。
选择jBPM5或Activiti5,都将让你实现业务流程管理需求的主要目标。
两者都是开源和基于ASL许可的。
jBPM5基于原先的Drools Flow,支持BPMN,通过与Drools的合并支持BAM,通过内容仓库增加对流程可视化的支持。
由于放弃了jBPM4的PVM,引擎的可扩展性受到损害,并且不再支持jPDL。
Activiti5基于jBPM4,与Alfresco的集成增加了其流程可视化与管理能力,同时通过创新的Activiti Cycle协作组件支持流程相关人员之间的协调,最后,它加强了集成能力。
对于工作流应用或者jBPM3、jBPM4的老用户,建议转向Activiti5。
5. UtilizesGeneral: Apache Commons Lang说是伴着我们长大的也不为过,3.0版连package名也改了,全面支持泛型。
[Guava]是(/p/guava-libraries/) Google新鲜推出的优雅产品。
但说它会一统天下又不定,因为它有时候太新潮了,反而用不惯。
比如StringUtils我还是喜欢用Apache的,IO也同样是Apache Commons IO的好使。
XML: 用JDK自带的JAXB就算了,不折腾。