技术开发 频道

Spring VS EJB 3 的若干认识误区


四、提供商无关性
开发者选择JAVA平台的一个最重要的原因就是它的提供厂商无关性。EJB 3.0是一个被设计为对提供商没有依赖性的开放的标准。EJB 3.0规范由企业JAVA社区的主流开源组织和厂商共同编写和支持的。EJB 3.0框架使开发者的应用程序实现可以独立于应用服务器。
比如,JBoss的EJB 3.0的实现是基于Hibernate的,Oracle的EJB 3.0实现是基于TopLink的,但是,在JBoss或者Oracle上跑应用程序,开发者既不需要去学习Hibernate,也不需要学习TopLink提供的独特API。厂商无关性使EJB 3.0框架区别于当前其他任何的POJO中间件框架。
很多人认为,尽管在任何应用服务器都上可以使用Spring框架,但基于Spring的应用仍然被限制于Spring本身,以及在应用中使用到的Spring提供的各种特别服务。但事实上是不是如此呢?大家应该知道,Spring的应用程序中,JtaTransactionManager使用了自动检测机制,不管是MBeans应用服务器还是Tomcat应用服务器。同理,当使用JPA时,Spring自动检测persistence.xml文件,并且创建EntityManagerFactory对象。在上面这些机制中,Spring不管是采用注释(如PersistenceContext、@Transactional、@Resource等等)还是采用XML(如”jee:indi-lookup”等等),都可以像EJB应用一样的与应用服务器提供商无关。
 
五、小结
 
笔者认为,EJB和Spring设计的角度根本不同,就目前来看,还不能说哪一个能完全打倒另外一个。首先EJB最初的设计思想考虑的是为分布式的应用服务的。就因为这个原因,使得开发一个EJB不难,但是开发一个好的EJB却非常难。此外对于中小型的应用项目而言,基本不采用分布式的解决方案,那么为什么要采取一个为分布式设计的方案来解决非分布式的问题呢? Spring就是为了解决这个问题而诞生的。
本文中,笔者希望比较客户的评价Spring相对EJB所具有的一些特性,同时,Spring可以与EJB进行协同的工作,Spring可以应用到EJB应用中去,同样,EJB可以在Spring应用中很好的使用。同时,Spring如今有力的支持注释:@Resource、@PersistenceContext、@PostConstruct、@PreDestroy、@EJB及@WebServiceRef。当然,Spring 中不只是能使用Hibernate这样的ORM框架,同样可以使用JPA。更妙的是,Spring越来越与应用服务器提供商无关了,很容易实现在不同的应用服务中进行移植。
0
相关文章