标签:
一说到EJB,总是有一种感觉就是EJB已经过时了,或者是在项目中,EJB太笨重了,使用过程中很多的功能都没有体现出来,而且EJB还会影响性能,但是在ITOO中为什么还要用EJB分布式框架呢?
ITOO的技术框架结构图如下所示:
从这个图中可以看出,业务逻辑层使用EJB容器进行管理的,我刚开始接触到时候,我也很好奇为什么要用EJB分布式,而没有用webservice或者是现在比较火的阿里巴巴的dubbo+zookeeper呢.现在我就来解释以下为什么要选用企业级的ejb3.0.
首先需要了解什么是EJB,EJB主要的特点就是部署分布式应用程序,它有点类似于webservice,但是只是表面上有点像,其实不是.EJB发展到现在,可以说是在EJB3.0有了一个大跃进.伴随着spring和Hibernate等轻量级框架出现后,复杂而笨重的EJB2被大量的用户遗弃,用户开始大量转向了,这个时候EJB3.0就出来了.EJB3.0从四个方面减轻了开发人员进行底层开发的工作量,分别:
(1)EJB2.0使用EntityBeans来访问数据库,EJB3.0是使用JPA来访问数据库的.
(2)EJB需要用部署脚本(Deployment descriptions) ,EJB3.0不需要.
(3)EJB2需要home接口,而EJB3不需要.
(4)EJB3简化开发,引入元数据.
EJB3的变革能力来自于java5以及众多轻量级框架的出现,当EJB的开发足够简单时,学习和使用者的数量增加足以推动它的发展,那么EJB3的目标是:
1.应用metadata Annotation和默认机制以及现有轻量级框架,简化代码量.
2.消除对接口的需求,从而简单化编程逻辑
3.使用技术发展的趋势,提供新功能支持.
假定一个JavaBeans为A,那么一般使用这个JavaBeans命令如下:
A a = newA();
但是,在高访问量的环境中,newA()其实是很费时消耗系统性能的,因此,能不能在软件系统启动时候就预先建立一些对象,这样,系统运行时,从这些已经生成的对象池中借用一个,这样,就无需在使用时进行New,节约了开销,提高了性能,因此,真正成熟性能解决方案都是需要对象池等支持。
EJB容器(如JBoss)已经提供了对象池和缓存机制,所以,没有事务机制的无状态SessionBean的性能肯定要强于普通JavaBeans。EJB容器不但在单机中提供了对象池和缓存,而且可以跨服务器实现动态负载平衡,这些都无需开发者自己开发任何软件代码,结构如下:
每一个jar包代表一个EJB组件,一个系统可以由多个可重用的EJB组件构成,例如:树形结构EJB组件;自增序号EJB组件;用户资料EJB组件等,这样的EJB组件可以象积木一样搭配在大部分应用系统中,提高了系统的开发效率,保证了开发质量。
事务机制对于一些关键事务是很重要的,例如ATM机提款,提款有多个动作:修改数据库以及数钱等,如果这其中有任何一个环节出错,那么其它已经实现的操作必须还原,否则,就会出现,提款人没有拿到钱,但是卡上已经扣款等不可思议的事情发生。
EJB提供的事务机制非常周全,但事务机制带来的缺点是性能的降低,因此,有些人认为EJB很重,因为在实际应用中,有的用户系统可能不需要事务机制,只是需要EJB提供的性能优化机制,这样,如果使用EJB,就象叫一个人来背东西,他除了背着我要的东西外,还背着我不要的东西。
在ITOO中,需要EJB的RMI远程调用,在调用过程中,有可能会对多个表进行操作,就需要使用事务来保证数据的一致性和安全性.
ITOO这个项目从一开始的立足点就是一个企业级的项目,需要应对的是高并发大数据的情况,在启动阶段就需要对对象进行预处理了,而且EJB是J2EE的不可以忽视的一个规范,重要的核心功能都封装在EJB中,使用WEB+EJB结构,可以让项目的结构变得更加的清晰.所以综上所述考虑,itoo中就决定使用ITOO了.
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/tang_huan_11/article/details/47841711