http://blog.csdn.net/jnqqls/article/details/17723417java
经过对EJB系列的总结和学习咱们已经对EJB有了基本的了解,可是为了更进一步的去深刻学习EJB,咱们颇有必要将它拿出来跟以前很是熟悉的spring进行一下对比,经过对比来了解这两个内容的相同与不一样之处,更有利于咱们对二者进行深刻的了解.mysql
咱们都有过这样的经历,在开发应用程序的时候,选择哪一个技术是比较有学问的.在我最近的面试过程当中也有不少问道关于技术选型的问题,举一个比较典型的例子好比:为何大家的系统要选择EJB3.0而不选用Spring或者为何选择Spring不选择EJB等.面试
通常而言咱们会针对特定的问题会采用哪一种技术可以最有效的解决它?这样的决定并非很轻易的就能作出来的.咱们须要了解各自的优点和劣势.接下来咱们将会对Spring和EJB进行一系列的对比.spring
咱们首先须要了解的一个概念是Spring是一个具体的实现,而EJB3.0是J2EE的规范,这是大的概念上的不一样.可是在具体的一些地方他们两个又有着许多的共同点.例如,他们都提供把中间件服务传递到 Java 应用。若是看一下历史会更清楚明了一些,Spring 被开发出来就是为了反对 EJB ,固然,那时候的EJB2的确有着自身不少的不足,可是随着新版本的 EJB 发布, EJB3.0 究竟克服了之前版本的一些缺点,而且借鉴了Spring的相关内容.sql
Spring和EJB他们各自都提供了那些功能?从这个最直接的问题入手可以直观的看到他们各自的特色.Spring定义成分层的J2EE应用框架.EJB则是针对面向对象,分布式的企业级应用开发和部署组件架构.一个是框架,一个是架构.框架更多的是实现,而架构更多的是定义.数据库
关于数据持久化服务器
关于数据持久化这一个关键的部分,Spring和EJB3.0都对其提供了良好的支持。Spring把众多流行的持久化框架集成进来,包括JDBC、hibernate、JDO、iBatis和JPA。EJB3.0的出现将实体bean用JPA取代。JPA致力于提供一个简单的、轻量级的OR映射框架。这个规范定义了两个接口,一个用于在persistence provider间交互,另外一个用于在实体和关系数据库之间创建映射。架构
在EJB3中经过使用@PersistenceContext注释提供的entityManager对象来得到JPA的数据访问,而在Spring中,经过对SessionFactory对象的注入得到Hibernate数据访问。咱们不少人会默认为EJB使用JPA来操做数据对象,而Spring使用Hibernate来操做数据对象。但实际上,Spring一样支持使用JPA来操做数据对象,而且Spring能够经过@PersistenceContext注释来支持JPA。oracle
关于轻量级和重量级框架
轻量级框架和重量级框架解决问题的侧重点是不一样的。
Spring为表明的轻量级框架侧重于减少开发的复杂度,相应的它的处理能力便有所减弱(比较适用于开发中小型企业应用。采用轻量框架一方面由于尽量的采用基于POJOs的方法进行开发,使应用不依赖于任何容器,这能够提升开发调试效率;另外一方面轻量级框架多数是开源项目,开源社区提供了良好的设计和许多快速构建工具以及大量现成可供参考的开源代码,这有利于项目的快速开发。
而做为重量级框架EJB强调高可伸缩性,适合与开发大型企业应用。在EJB体系结构中,一切与基础结构服务相关的问题和底层分配问题都由应用程序容器或服务器来处理,且EJB容器经过减小数据库访问次数以及分布式处理等方式提供了专门的系统性能解决方案,可以充分解决系统性能问题。
轻量级框架的产生并不是是对重量级框架的否认,甚至在某种程度上能够说两者是互补的。轻量级框架在努力发展以开发具备更强大,功能更完备的企业应用;而新的EJB规范EJB3.0则在努力简化J2EE的使用以使得EJB不只仅是擅长处理大型企业系统,也利用开发中小型系统,这也是EJB轻量化的一种努力。对于大型企业应用以及未来可能涉及到能力扩展的中小型应用采用结合使用轻量级框架和重量级框架也不失为一种较好的解决方案。
提供商无关性
开发者选择JAVA平台的一个最重要的缘由就是它的提供厂商无关性。EJB3.0是一个被设计为对提供商没有依赖性的开放的标准。EJB 3.0规范由企业JAVA社区的主流开源组织和厂商共同编写和支持的。EJB3.0框架使开发者的应用程序实现能够独立于应用服务器。
好比,JBoss的EJB3.0的实现是基于Hibernate的,Oracle的EJB3.0实现是基于TopLink的,可是,在JBoss或者Oracle上跑应用程序,开发者既不须要去学习Hibernate,也不须要学习TopLink提供的独特API。厂商无关性使EJB3.0框架区别于当前其余任何的POJO中间件框架。
不少人认为,尽管在任何应用服务器都上可使用Spring框架,但基于Spring的应用仍然被限制于Spring自己,以及在应用中使用到的Spring提供的各类特别服务。但事实上是否是如此呢?你们应该知道,Spring的应用程序中,JtaTransactionManager使用了自动检测机制,不论是MBeans应用服务器仍是Tomcat应用服务器。同理,当使用JPA时,Spring自动检测persistence.xml文件,而且建立EntityManagerFactory对象。在上面这些机制中,Spring不论是采用注释仍是采用XML,均可以像EJB应用同样的与应用服务器提供商无关。
参考文章:Make the Right Decision with Our Side-by-Side Comparison of Springand EJB 3.0