ORM大获全胜
所的这些因素是的ORM比以往更加规范。虽然很多项目仍然使用自己的持久层框架,但Hibernate,TopLink以及一些高端的JDO实现,使得使用自己持久层框架的难度相对变大、可维护性降低,自然,也没有什么理由去使用自己的框架了。
虽然这些框架的功能覆盖范围已经很大了,但仍有很多地方不在其中。比如,一个基于struts,hibernate的项目,业务逻辑很难搞定。尽管对于这种问题,J2EE规范提出了解决方案(EJB),但仍旧没有一个合适的编程模型。
Spring
J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。
本质上讲,Spring是IOC(Inversion of Control)和面向切面编程(AOP)的组合体。它是一个非侵入式的框架,增强了POJO的功能。从服务上讲(With a service abstraction),它将程序代码从J2EE环境解耦到普通的java对象(自然,这些代码可以脱离J2EE而在多种环境中运行)。它还在很多功能上提供了除EJB之外的选择――比如为所有的POJO提供声明式事务。Spring被广泛运用到很多项目中,从小的web程序到大的企业应用程序。
在这个领域还有其他的产品,比如HiveMind和NamoContainer。前者和Spring的思想大致相同,只不过在IOC上有较大差异;后者将很多服务融合在PicoContainer的IOC容器中。这些产品的实现方式和J2EE的不同在于,它们都很轻便。
在有J2EE API下做测试是非常困难的,这些容器将POJO从J2EE API中脱离出来,从而大大降低了测试的难度。测试一个普通的java对象,不用象测试J2EE程序那样,得先将应用程序部署到服务器上,要不就得自己动手模拟J2EE环境。提供日益流行的测试驱动的开发环境(对于开发者来说这是应得的),是这些轻量容器流行的关键因素。
下一个将会是谁?
人们日益对开源框架的重视,使得很多项目的成本大大降低,并且投放使用以及维护速度都增加了。现在的开源框架都有很高的质量,都提供了很好的文档&一些书籍让开发者做参考。即便如此,两大因素是的J2EE领域充满了不确定性:开源领域和J2EE“标准”的冲突和AOP的日益重要。
开源和标准之间的冲突表现在两个地方。一个是表现层,JSF的身后有Sun公司和其他的一些大公司,而在这个领域有Struts等开源产品与之竞争。在中间层,EJB 3.0采用J2SE5.0的annotations实现了依赖注入(dependency injection)的功能,但这个功能只是Spring的一个子集
在这两个领域,开源产品都更加革新。JSP借鉴了ASP.NET,而Tapestry则采用了WebObjects的思想。
同样的,不知道EJB3.0为何要尝试着标准化依赖注入,即使这样会使之不可避免地丧失很多功能。 EJB 3.0好像也要进入程序编写领域,而J2EE规范在这方面还没有涉足。
于此同时,AOP的重要性在J2EE社区猛增,在使用上,AOP也越来越受到开发者的青睐。像Spring、dynaop等被称作“带着双拐的AOP”实现提升了AOP的知名度。而纯粹的AOP技术比如AspectJ,在将来的几年也会流行起来。
其次,JBoss通过JCP和EJB3.0保持一致,它极大地推动了AOP技术。但即使如此,JCP 还没有转向AOP迹象。
下一代的J2EE规范将拥抱更简单的POJO编程模型,就像Spring和Hibernate做的一样。J2EE开发者也注定要从“欺诈客户”转到以自己的编程经验开发上来。这次改变将受到大多数人的欢迎,不像以前那样每一个新规范发布后,最终都没有能很好的实现。
