itoo项目实战之itoo中为什么要用EJB3.0分布式框架
来源:互联网 发布:java连接mysql的jar包 编辑:程序博客网 时间:2024/06/07 13:03
一说到EJB,总是有一种感觉就是EJB已经过时了,或者是在项目中,EJB太笨重了,使用过程中很多的功能都没有体现出来,而且EJB还会影响性能,但是在ITOO中为什么还要用EJB分布式框架呢?
ITOO的技术框架结构图如下所示:
从这个图中可以看出,业务逻辑层使用EJB容器进行管理的,我刚开始接触到时候,我也很好奇为什么要用EJB分布式,而没有用webservice或者是现在比较火的阿里巴巴的dubbo+zookeeper呢.现在我就来解释以下为什么要选用企业级的ejb3.0.
第一: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的目标
EJB3的变革能力来自于java5以及众多轻量级框架的出现,当EJB的开发足够简单时,学习和使用者的数量增加足以推动它的发展,那么EJB3的目标是:
1.应用metadata Annotation和默认机制以及现有轻量级框架,简化代码量.
2.消除对接口的需求,从而简单化编程逻辑
3.使用技术发展的趋势,提供新功能支持.
第三:EJB提供性能优化支持
假定一个JavaBeans为A,那么一般使用这个JavaBeans命令如下:
A a = newA();
但是,在高访问量的环境中,newA()其实是很费时消耗系统性能的,因此,能不能在软件系统启动时候就预先建立一些对象,这样,系统运行时,从这些已经生成的对象池中借用一个,这样,就无需在使用时进行New,节约了开销,提高了性能,因此,真正成熟性能解决方案都是需要对象池等支持。
EJB容器(如JBoss)已经提供了对象池和缓存机制,所以,没有事务机制的无状态SessionBean的性能肯定要强于普通JavaBeans。EJB容器不但在单机中提供了对象池和缓存,而且可以跨服务器实现动态负载平衡,这些都无需开发者自己开发任何软件代码,结构如下:
第四:EJB3.0组件能提供真正的可重用框架
每一个jar包代表一个EJB组件,一个系统可以由多个可重用的EJB组件构成,例如:树形结构EJB组件;自增序号EJB组件;用户资料EJB组件等,这样的EJB组件可以象积木一样搭配在大部分应用系统中,提高了系统的开发效率,保证了开发质量。
第五: EJB3.0提供事务机制
事务机制对于一些关键事务是很重要的,例如ATM机提款,提款有多个动作:修改数据库以及数钱等,如果这其中有任何一个环节出错,那么其它已经实现的操作必须还原,否则,就会出现,提款人没有拿到钱,但是卡上已经扣款等不可思议的事情发生。
EJB提供的事务机制非常周全,但事务机制带来的缺点是性能的降低,因此,有些人认为EJB很重,因为在实际应用中,有的用户系统可能不需要事务机制,只是需要EJB提供的性能优化机制,这样,如果使用EJB,就象叫一个人来背东西,他除了背着我要的东西外,还背着我不要的东西。
在ITOO中,需要EJB的RMI远程调用,在调用过程中,有可能会对多个表进行操作,就需要使用事务来保证数据的一致性和安全性.
ITOO这个项目从一开始的立足点就是一个企业级的项目,需要应对的是高并发大数据的情况,在启动阶段就需要对对象进行预处理了,而且EJB是J2EE的不可以忽视的一个规范,重要的核心功能都封装在EJB中,使用WEB+EJB结构,可以让项目的结构变得更加的清晰.所以综上所述考虑,itoo中就决定使用ITOO了.
- itoo项目实战之itoo中为什么要用EJB3.0分布式框架
- 【java】itoo项目实战之EJB中的RMI框架
- 【java】itoo项目实战之SpringMVC+EasyUI_HelloWorld
- 【java】itoo项目实战之常见问题一
- 【java】itoo项目实战之常见问题二
- 【java】itoo项目实战之常见问题三
- ITOO项目之Memcached
- 【java】itoo项目实战之EJB中的RMI框架如何设计
- 【java】itoo项目实战之java Web 中web的作用
- 【java】itoo项目实战之优化后具体代码
- 【java】itoo项目实战之hibernate 懒加载优化性能
- 【java】itoo项目实战之hibernate 批量保存优化
- 【ITOO 4】WCF中,分布式事务处理
- 【ITOO】--分布式事务
- 【ITOO】为什么使用EF?
- 【ITOO】--MVC框架入门
- 【ITOO】--搭建底层框架
- 【ITOO】--框架搭建
- 算法:矩阵右移
- linux基础教程---设置文件的主人、组别
- http tcp/ip socket之间的关系
- kvc
- Android Studio - no debuggable applications 的解决办法
- itoo项目实战之itoo中为什么要用EJB3.0分布式框架
- AFN的使用
- hdoj 1869 六度分离
- KVO
- 一起talk C栗子吧(第三十八回:C语言实例--你了解scanf吗)
- springmvc学习笔记(四)访问静态资源
- 从网上找到的加载刷新的方法
- Wing IDE 如何设置 python版本
- leetcode 150: Evaluate Reverse Polish Notation