作ؓ一个架构师Q我?/span>EJB是既׃恨,?/span>Spring又恨又爱Q现在我们来也把q两大技术体pL做一个全面分析和ҎQ希望能l大家在q行技术选型时一个更好的参考?/span>
EJB规范一直由国际l织jcp(www.jcp.org)来制定,一l通过Q即作ؓ官方标准Q且各厂商都会不遗余力的推动Q所以对于企业应用来_EJB是法,?/span>EJBZ业应用的基础架构暂且UCؓ法治; Spring来自开源社区,׃多的开源Y件开发者参与,逐步形成的一U流行的体系标准Q它的设计以IoC(反{控制)为核心,提倡所谓的”?/span>”侵入设计原则Q这里暂且称之ؓ民主?/span>
支持EJB的应用服务器一般是一个大而全的品,包括了构Z业应用需要的Ҏ面面Q如果需要额外扩展一般不ҎQ如果对一个应用服务器不满意的话,那么可以且也只能更换整个应用服务器了Q好在由于应用服务器市场百花齐放Q从免费C端再到高端,您可以Q意选择Q?/span>
Spring?/span>IoC容器发展而来Q通过不断集成AOP?/span>MVC?/span>OR/Mapping以及几乎您能惛_的各Ҏ务而提供完善的企业应用架。对于一个应用,你可以自由选择具体的技术框架的实现Q?/span>SSH是最常用一套组合,然而且不说是否每个架构师拥有正选择的能力,无论如何Q最l的选择在设计之初一旦确定,要想更换便不那么ҎQ你不可能轻杄一个基?/span>Spring + Structs的应用轻杄UL?/span>Spring + WebWorkQ更不能L的将一个基?/span>Spring + Hibernate的应用轻杄UL?/span>Spring + iBatisQ所以对于需要长期维护和发展的应用来_只能寄希望于你采用的框枉能够很好的发展,q且能在升的同时保证向前的兼容性?/span>
lg所qͼEJB׃对于整个世界是标准的Q就好像是一部国际法Q一旦遵循,全球通用Q你可以比较L的在WebSphere?/span>WebLogic甚至JBoss之间q行切换Q所以如果选择EJBQ你在一?/span>”法制”的环境下获得最大的民主Q?/span>Spring对于整个世界看似民主的,然而一旦整套架构确定下来,却成了专Ӟ犹如国式的民主Q一旦被它征服,成为它的专政统MQ想挣脱它的控制可就不那么容易了Q其中的利害Q大家细l品呛_?/span>
关于轻量U内核,不论属实是否Q现今的应用服务器都宣称采用了微内核技术,在此基础上徏?/span>Java EE的各Ҏ务构建成完善的应用服务器Q?/span>Spring本n是一个基?/span>IoC的轻量内核,然后通过集成W三方的服务器来提供完整的架构?/span>
EJBlg曄被认为是一个重量的组Ӟ而备受批评,EJB3规范的重要目标就是简?/span>EJB的开发,提供一个容器管理的轻量U的lgҎ?/span>
但是有必要提醒一下,轻量U的lgQƈ不意味着提供服务的容器是轻量的,不管?/span>EJB2q是EJB3Q应用服务器因ؓ需要管理组件的负责生命周期以及行ؓQƈ且内|提供了各项服务Q容器自然是一个重量的服务;臛_现在看来Q现有的Application Server提供的容器都q不_的轻量,从个人偏好来_我就非常喜欢JBoss 2.4q个版本Q它有我需要的功能Q同时又够简单,而现在, JBoss 4的启动速度已经逐渐让我对它对失M耐心?/span>
而对?/span>SpringQ也有同L问题Q轻量的内核,也不意味着整个框架是轻量的Q更不意味着ZSpring的整个应用架构是轻量的。对?/span>SpringQ你需要去Lq粘合各U服务,然后让他们能够稳定的在一起工作,如果应用Ҏ术的需求较多,伸羃性要求也较高Q你׃不断的在应用服务中加入其他服务,如:资源池、消息队列、集等。当加入q些后,Spring的解x案已l和Java EE Application Server解决Ҏ一样重量了?/span>
q求单、轻量,是每一个应用架构的目标Q对于企业应用的构徏来说Q轻量lg标准+轻量的内?/span>+轻量U的容器Qƈ以此构徏轻量U的应用q_Q才是最l需要的。如果有轻量U的容器出现Q将帮助EJB3在企业应用中重新占据有利的地位?/span>
q个问题对于一ơ性交付的目也许不是问题Q但是对于质量要求更高、生命周期更长的产品Q却是衡量^台和架构的重要因素?/span>
Z Spring 架构的应用,׃q分的自由和灉|Q随着目的进展,逐渐集成的第三方框架来多Q很难保证集成的服务和编写的lg中有没有漏洞Q甚至相互之间有严重的冲H,那么Q掌控整个项目的质量成了NQ光是一|一늚配置文gQ就知道今后的维护成本也随之增高,回想一?/span>EJB2.0时代?/span>ejb-jar.xml吧;?/span>EJB因ؓ集成的都是标准服务,而且lg模型也是固定的,加之应用服务器一般提供控制台Q用来查看运行时的各属性,q可Ҏ务进行实时的理Q显然比Spring开发的应用可控性更好?/span>
?/span>IoC的能?/span>Spring要略Z些,但是?/span>EJB3中可以完全用Annotation方式q行注入Q在开发上要简单很多,对于一些相Ҏ较固定的注入Q采?/span>Annotation更好Q而对于一些可能需要经常变动的注入Q?/span>XML更加灉|Q?/span>EJB3刚好提供了这L两种解决Ҏ。如果你已经患有XML恐惧症,那么EJB3无疑给您以解脱?/span>
同时Q?/span>EJB3lg中,支持多种方式注入Q比如依赖于名称、接口或?/span>JNDI名,另外q支持?/span>@PersistenceContext注入EntityManagerQ?/span>@Resource注入服务器资源,?/span>EJBContext?/span>TimerService{,而一?/span>Annotation已经成ؓJDK6的一部分Q将来可能直接被JDK支持?/span>
AOP斚wQ如果您需要彻底的AOPQƈ且在Spring中集成了AspectJQ?/span> 那么EJB3自然无法比拟Q但是如果您的项目以够用为原则,只需要一般方法拦截意义上?/span>AOPQ?/span>EJB3提供的各U回调方法应该可以满x的要求了?/span>
EJB的看家本领,Spring也通过提供TransactionTemplate以及集成W三方事务处理器来支?/span>JTAQ都支持x式事务,可以BMTQ?/span>CMTQ但无论如何Q移植的器官M没有自n长的好吧?/span>
一般?/span>Java EE体系的公叔R认ؓq是EJB的最大长处,但是实施q不如想象那P一来绝大多数都?/span>Web应用Q依?/span>Web提供的分布式能力已经可以满90%的需要了Q二来大家基本上都是Web容器?/span>EJB容器整体部vQ?/span>EJBlg的分布部|少之又。当然如果您需?/span>Web层和应用层分开部vQ那?/span>Spring一定不在你的考虑范围之内了?/span>
Cluster也是EJB的传l优势,但是老师_能够发挥EJB集群优势的地方ƈ不多Q因为即佉K目中采用?/span>EJBQ一般也采用Stateless SessionBeanQ而?/span>HttpSession ClusterQ既然如此,无论EJBq是SpringQ大安是^{的。当Ӟ如果您正在构Z个大型的应用Q对集群的能力要求非帔RQ比如需要事务?/span>ClusterQ而且q有分布式的需求,那么估计没有多少因素会让您考虑Web Server + Spring的架构了?/span>
EJB3中的Web Service?/span>EJBlg集成得如此之好,使用h再简单不q了Q如下面实例所C,JAX-WS也将逐步成ؓJava Web Service事实标准Q至?/span>Spring可以实现各种ZHttp的远E调用方法,其优势ƈ不明显?/span>
@Stateless
@Remote
@Local
@WebService(endpointInterface =
"jfox.test.ejb3.webservice.Calculator")
public class CalculatorBean
implements CalculatorRemote, CalculatorLocal {
public int add(int x, int y) {
return x + y;
}
public int subtract(int x, int y) {
return x - y;
}
}
如果需要集成第三方框架的时候,估计您需?/span>Spring了,当然前提?/span>Spring 已经l出很好的集成方案;而如果采?/span>EJBQ则需要视特定的应用服务器了,推荐当类库来用,或者?/span>context listener来启动,是在不行Q只能基于特定的应用服务器来q行集成Q一般来_应用服务器均提供?/span>JMX集成能力?/span>
U观人类历史Q官方过于强势,则必然官逼民反;而民间力量过于强大,C会必将不稳定,q都是我们不愿看到的Q在技术世界里也一栗对?/span>EJB3?/span>Springq两U方案,Spring现在处于压倒性的优势一方,希望EJB3的出玎ͼ一来能为官Ҏ回一些失ȝ领地Q二来也能l引发更多的探讨Q不再拘束于一家之aQ只有百家争鸣的环境Q才能让开发h员和架构人员对企业应用的构徏认识得更加完善,所以最好的方式?/span>EJB3?/span>Spring互相促进Q和谐发展?/span>
期待一个轻量的真正以开发需求ؓ中心?/span>EJB3应用服务器的出现Qؓ疲Y?/span>EJB市场注入新的zd!
Infoq链接: http://www.infoq.com/cn/articles/ejb3-spring-compare