Skip to content
springside edited this page Feb 25, 2012 · 34 revisions

Web

MVC Framwork: SpringMVC3.0 Restful的风格终于回归了MVC框架的简单本质,对比之下Struts2概念太复杂更新又太懒了。

Template:JSP2.0且尽量使用JSP EL而不是taglib,一向是SpringSide的推荐,Freemarker们始终有点小众。

Layout Decoration: 一直想要这种框架,但如Tiles们的配置都太复杂了,直到SiteMesh的3.0版出现。

Javascript Library: 随大流用了JQuery。其实Dojo的面向对象语法更优美,但用户数和插件社区差了点。

CSS Framework: 随便挑的Blueprint CSS,提供了简便的布局能力和基本的页面美化。

JavaScrit/CSS Compress: 还是随便选的YUI Compressor

Database

ORM Framework: 快速开发的应用里,领域对象肯定是用JPA标注的。至于API用Hibernate还是JPA,因为那个极简便的,DAO只要写接口就好了的Spring-Data-JPA,所以选了JPA。 当然,JPA的实现还是用Hibernate

追求高性能的应用,如mini-service这种Web服务,当然就是MyBatis了。如果项目再简单点,Spring JDBC其实也不错。

Cache: 在JVM里的缓存,最老牌最多人用的依然是Ehcache,JBoss的infinispan喊得再大声也没多少人用。有时间要看看它被Teracotta收购后有什么新功能。

而中央式的缓存,Memcache已经成为了事实标准。而且当主创撒手不管后,社区现在反而有着稳定的更新。 Client方面,比较稳健选择的还是Spymemcached

Services

SOAP WebService: JAX-WS2.0的注解 + Apache CXF 无疑是最成熟的,一说起Axis1/2我都要打冷颤。

Restful Service: JAX-RS1.0的注解 + Jersey。CXF也提供Restful的能力,但总有些小问题。Spring MVC也可以的。 但最后还是用Jersey,因为是标准,而且比较单纯。当然,如果性能是目标,直接写Servlet也没啥。 在Restful Client方面,暂时还没有JAX-RS标准,Jersey的Client是最好用的,比Apache HttpClient和Spring的RestTemplate好用。

Security Framework: 选择Apache Shiro是因为SpringSecurity的代码复杂度已经超过了它的实际需要,扩展困难痛苦。另一个原因是SpringSecurity的基本API居然只支持基于角色的判断hasRole("Administrator"),而Shiro同时还支持我们其实更常用的基于Permission的判断(hasPermission("User:Edit"))。

JMSActiveMQ是最成熟JMS实现,JBoss的HornetQ同样只是喊得大声。但还有更复杂的AMQP协议的RabbmitMQ,或者ActiveMQ自己新出的Applo可以选择。

Schedule: 对于固定时间间隔的任务,JDK自带的Executor已足够好,简单的Cron式定时执行,Spring自带的Executor也能满足。Quartz更大的优势体现在保证集群中有且仅有一台服务器执行了任务,有空同样看看它被Teracotta收购后有什么新功能。

##Utilizes GeneralApache Commons Lang说是伴着我们长大的也不为过,3.0版连package名也改了,全面支持泛型。

Guava Google新鲜推出的优雅产品。但说它会一桶天下又不定,因为它有时候太新潮了,反而用不惯。比如StringUtils我还是喜欢用Apache的,IO也同样是Apache Commons IO的好使。

XML: 用JDK自带的JAXB就算了,不折腾。

JSON: GSon虽然系出名门而且接口优雅,但Jackson的功能更加丰富到匪夷所思而且比GSon1.X快很多。

Bean Validator: JSR303 Bean Validator的用途越来越广, Hibernate Validator没太多的竞争对手。

最后,Dozer,可以在异构对象间复制值。Freemarker即使不用来做页面Template,平时用来生成点东西也不错的。 JodaTime这种要直接加入JDK的就不多说它了。POIApache HttpClient这种也没什么好说了。提一下

##Test Unit Test: JUnit始终是正统,TestNG的功能如测试用例分组它也慢慢支持了。

Mock: Mockito的API比老牌的EasyMock更为优雅,而PowerMock则能配合Mockito完成static方法,final方法这些Mockito做不了的mock。

Integration Test:Selenium与WebDriver的合并后,最大改进是原来基于javascript的方案, 变成了直接调用浏览器的核心API,性能好了不少。

##Infrastructure JDK6这样没什么兼容性问题又成熟得一塌糊涂的版本建议大家都升级吧。JDK7也不错,有G1垃圾收集器和Try-Catch新语法这种语法糖。

Jetty7是因为它的嵌入式版本做得好,集成测试不用部署直接就开跑了。开发时一般也不用Eclipse插件,直接自己在代码里启动了,省下打包拷贝War文件的时间。

H2 Database一是因为它的性能比Derby好得多,二来是用它的Standalone版本,不想在示例里使用嵌入式数据库,和实际的开发模式差别太大。

用[DBUnit|http://www.dbunit.org]来初始化系统默认数据和测试数据,是因为它能用数据库无关的XML语言来定义数据。

监控方面,一是使用JMX,二是像MongoDB那样提供Resful接口+JSON格式的数据。

另外,用Perf4j来获取代码的执行效率,Log4jdbc查看实际执行SQL,都是纯个人爱好。

最后,用Jenkins做持续集成, Sonar做代码质量检查,是大部分好项目的默认选择了。