JAVA语言已经慢慢
![](/icons/36203de.gif)
在成为主流
![](/icons/36203de.gif)
开发语言的
![](/icons/36203yi.gif)
![](/icons/36203dou.gif)
或者说现在已经成为了主流
![](/icons/36203de.gif)
开发语言
![](/icons/36203dou2.gif)
在JAVA语言平台上
![](/icons/36203dou.gif)
也出现了多种开发模型
![](/icons/36203dou2.gif)
对于刚入门
![](/icons/36203de.gif)
JAVA
![](/icons/36203chengxu.gif)
员来说
![](/icons/36203dou.gif)
也许面对这么多
![](/icons/36203de.gif)
开发模型
![](/icons/36203dou.gif)
会眼花缭乱
![](/icons/36203dou.gif)
不知道该如何选择
![](/icons/36203dou2.gif)
笔者刚开始接触JAVA语言
![](/icons/36203de.gif)
时候没有多少
![](/icons/36203de.gif)
开发模型可以选择
![](/icons/36203dou2.gif)
而前几年笔者也遇到了这个问题
![](/icons/36203dou2.gif)
可选
![](/icons/36203de.gif)
开发模型比较多
![](/icons/36203dou.gif)
笔者必须选择
![](/icons/36203yi.gif)
个开发模型作为未来自己
![](/icons/36203de.gif)
主攻方向
![](/icons/36203dou2.gif)
![](/icons/36203yinwei.gif)
人
![](/icons/36203de.gif)
精力是有限
![](/icons/36203de.gif)
![](/icons/36203dou.gif)
特别是我们做
![](/icons/36203chengxu.gif)
开发
![](/icons/36203de.gif)
![](/icons/36203dou2.gif)
我们要把有限
![](/icons/36203de.gif)
精力花在刀口上
![](/icons/36203dou2.gif)
笔者在这里向大家推荐EJB开发模型
![](/icons/36203dou2.gif)
这个EJB本质上就是
![](/icons/36203yi.gif)
个被管理
![](/icons/36203de.gif)
组件
![](/icons/36203dou.gif)
存在于J2EE容器中
![](/icons/36203dou.gif)
由J2EE容器进行创建、控制和销毁
![](/icons/36203dou2.gif)
J2EE容器复杂控制当前存在
![](/icons/36203de.gif)
EJB数目和EJB所使用
![](/icons/36203de.gif)
资源
![](/icons/36203dou2.gif)
在重负载
![](/icons/36203de.gif)
情况下
![](/icons/36203dou.gif)
即使是客户端正在使用
![](/icons/36203de.gif)
EJB
![](/icons/36203dou.gif)
也将被返回到例子池
![](/icons/36203dou.gif)
如此
![](/icons/36203de.gif)
话
![](/icons/36203dou.gif)
这个EJB例子还可以供其他客户端使用
![](/icons/36203dou.gif)
从而提高EJB例子
![](/icons/36203de.gif)
利用率
![](/icons/36203dou2.gif)
虽然J2EE官方也是推荐使用EJB
![](/icons/36203dou.gif)
但是这并不是
![](/icons/36203yi.gif)
个强制性
![](/icons/36203de.gif)
措施
![](/icons/36203dou2.gif)
![](/icons/36203chengxu.gif)
开发人员除了利用EJB的外
![](/icons/36203dou.gif)
还可以利用JSP或者单机版
![](/icons/36203de.gif)
JAVA应用
![](/icons/36203chengxu.gif)
等等
![](/icons/36203dou2.gif)
但是如果应用
![](/icons/36203chengxu.gif)
需要不断
![](/icons/36203de.gif)
升级、性能要求比较高等等
![](/icons/36203dou.gif)
那么笔者就向大家推荐使用EJB
![](/icons/36203dou.gif)
主要有如下 3个方面
![](/icons/36203de.gif)
原因
、可以隐藏管道代码![](/icons/36203dou2.gif)
现在音乐喷泉在各地迅速
![](/icons/36203de.gif)
被采用
![](/icons/36203dou.gif)
成为高科技景观
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
个代表的作
![](/icons/36203dou2.gif)
![](/icons/36203chengxu.gif)
员在开发这个应用
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
人员需要用到这些管道
![](/icons/36203dou.gif)
但是并不需要知道这些水管
![](/icons/36203de.gif)
具体走向
![](/icons/36203dou2.gif)
这不是
![](/icons/36203chengxu.gif)
开发人员所需要关注
![](/icons/36203de.gif)
内容
![](/icons/36203dou2.gif)
![](/icons/36203chengxu.gif)
开发人员的需要直接使用这些现成
![](/icons/36203de.gif)
管道即可
![](/icons/36203dou2.gif)
我们把这些管道就叫做“管道代码”
![](/icons/36203dou2.gif)
其实
![](/icons/36203chengxu.gif)
开发人员有时候就好像
![](/icons/36203yi.gif)
个工业设计师
![](/icons/36203dou2.gif)
工业设计师在设计洗澡用
![](/icons/36203de.gif)
花撒水笼头
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
其根本不用关心自来水管道
![](/icons/36203dou2.gif)
为什么呢?
![](/icons/36203yinwei.gif)
自来水管道都是采用同
![](/icons/36203yi.gif)
![](/icons/36203de.gif)
标准
![](/icons/36203dou.gif)
水压
![](/icons/36203de.gif)
话也是国家有
![](/icons/36203yi.gif)
个强制性
![](/icons/36203de.gif)
标准
![](/icons/36203dou2.gif)
为此在需要使用管道
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
设计者的需要直接引用这些标准化
![](/icons/36203de.gif)
参数即可
![](/icons/36203dou2.gif)
在早期
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
些开发模型中
![](/icons/36203dou.gif)
如最原始
![](/icons/36203de.gif)
CORBA开发模型
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
开发人员不得不便写大量
![](/icons/36203de.gif)
代码来完成同Corba环境
![](/icons/36203de.gif)
交互、连接、注册过程
![](/icons/36203dou2.gif)
其实这些代码就是通常所说
![](/icons/36203de.gif)
管道代码
![](/icons/36203dou2.gif)
而如果采用EJB模型
![](/icons/36203de.gif)
话则可以最大限度
![](/icons/36203de.gif)
减少这些管道代码
![](/icons/36203de.gif)
编写工作
![](/icons/36203dou2.gif)
如
![](/icons/36203chengxu.gif)
开发人员通过声明属性就可以无需要编写代码来控制这些功能即可指定组件
![](/icons/36203de.gif)
事务性为;不用通过编写管道代码来定义EJB组件的间
![](/icons/36203de.gif)
关系以及所需要用到
![](/icons/36203de.gif)
资源
![](/icons/36203dou.gif)
![](/icons/36203yinwei.gif)
可部署
![](/icons/36203de.gif)
J2EE应用
![](/icons/36203chengxu.gif)
在部署描述信息中定义了多个EJB组件的间
![](/icons/36203de.gif)
关系同时定义了EJB组件所需要用到
![](/icons/36203de.gif)
资源;如每个Bean都遵循
![](/icons/36203yi.gif)
个定义
![](/icons/36203de.gif)
声明周期和
![](/icons/36203yi.gif)
套规则
![](/icons/36203dou.gif)
为此
![](/icons/36203chengxu.gif)
开发人员不需要知道“管道”
![](/icons/36203de.gif)
设计
![](/icons/36203dou.gif)
而只需要知道管道接口
![](/icons/36203de.gif)
参数即可
![](/icons/36203dou.gif)
如此
![](/icons/36203de.gif)
话系统代码和应用
![](/icons/36203chengxu.gif)
代码的间就是两个互相独立
![](/icons/36203de.gif)
内容
![](/icons/36203dou2.gif)
显然
![](/icons/36203dou.gif)
通过J2EE提供
![](/icons/36203de.gif)
EJB组件
![](/icons/36203dou.gif)
可以让
![](/icons/36203chengxu.gif)
开发人员将精力集中在业务代码
![](/icons/36203de.gif)
编写上
![](/icons/36203dou.gif)
而尽量减少编写管道代码
![](/icons/36203dou2.gif)
这不仅可以提高应用
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
开发效率
![](/icons/36203dou.gif)
而且把管道代码和应用
![](/icons/36203chengxu.gif)
代码独立开来
![](/icons/36203dou.gif)
也利于后续
![](/icons/36203de.gif)
调试和维护
![](/icons/36203dou2.gif)
这就是笔者推荐使用EJB模型来开发JAVA应用
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
第
![](/icons/36203yi.gif)
个原因
2、EJB预定义了
些复杂
处理机制![](/icons/36203dou2.gif)
在应用
![](/icons/36203chengxu.gif)
开发
![](/icons/36203de.gif)
过程中
![](/icons/36203dou.gif)
或多或少有
![](/icons/36203yi.gif)
些共性
![](/icons/36203de.gif)
内容
![](/icons/36203dou2.gif)
如需要进行应用
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
生命周期管理
![](/icons/36203dou.gif)
需要进行命名和注册
![](/icons/36203dou.gif)
需要进行事务管理等等
![](/icons/36203dou2.gif)
如果每次在开发应用
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
都需要从零开始来开发这些功能
![](/icons/36203dou.gif)
那么工作量就会很大
![](/icons/36203dou.gif)
而且代码
![](/icons/36203de.gif)
重复利用性也会比较差
![](/icons/36203dou2.gif)
为了解决这些问题
![](/icons/36203dou.gif)
EJB提供了
![](/icons/36203yi.gif)
些预定义
![](/icons/36203de.gif)
服务
![](/icons/36203dou.gif)
把
![](/icons/36203yi.gif)
些应用
![](/icons/36203chengxu.gif)
开发中要用到
![](/icons/36203de.gif)
服务集成到J2EE开发环境中
![](/icons/36203dou2.gif)
需要用到这些服务
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
开发人员的需要声明
![](/icons/36203yi.gif)
下或者通过少量
![](/icons/36203de.gif)
代码就可以
![](/icons/36203diaoyong.gif)
这些服务
![](/icons/36203dou.gif)
实现
![](/icons/36203yi.gif)
些复杂
![](/icons/36203de.gif)
控制管理机制
![](/icons/36203dou2.gif)
如在应用
![](/icons/36203chengxu.gif)
开发中
![](/icons/36203dou.gif)
为了保持数据
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
致性事务管理机制是必须要实现
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
个机制
![](/icons/36203dou2.gif)
如果在应用
![](/icons/36203chengxu.gif)
层面没有实现事务管理机制
![](/icons/36203de.gif)
话
![](/icons/36203dou.gif)
则当同
![](/icons/36203yi.gif)
个业务涉及到多条记录
![](/icons/36203de.gif)
时候
![](/icons/36203dou.gif)
很容易破坏数据
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
致性
![](/icons/36203dou2.gif)
而如果从零开始来编写事务处理机制代码
![](/icons/36203de.gif)
话
![](/icons/36203dou.gif)
那么工作量会很大
![](/icons/36203dou2.gif)
在EJB
![](/icons/36203de.gif)
容器服务中就预先提供了事务管理
![](/icons/36203de.gif)
解决方式
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
开发人员可以凭借这个预定义地解决方案轻松
![](/icons/36203de.gif)
创建事务、处理和控制事务等等
![](/icons/36203dou2.gif)
如在应用
![](/icons/36203chengxu.gif)
开发中命名和注册也是很麻烦
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
件工作
![](/icons/36203dou2.gif)
而EJB也提供另
![](/icons/36203yi.gif)
个命名和注册
![](/icons/36203de.gif)
容器
![](/icons/36203dou.gif)
EJB容器和服务器为EJB提供了对命名服务
![](/icons/36203de.gif)
访问
![](/icons/36203dou2.gif)
远程和本地客户端使用这些服务来寻找EJB;EJB组件本身也使用这些服务来查询自身所需要
![](/icons/36203de.gif)
资源
![](/icons/36203dou2.gif)
也就好说
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
开发人员在应用
![](/icons/36203chengxu.gif)
开发中不用通过代码来实现命名和注册服务
![](/icons/36203dou.gif)
而直接
![](/icons/36203diaoyong.gif)
EJB组件中
![](/icons/36203de.gif)
命名和注册容器即可
![](/icons/36203dou2.gif)
这个容器会自动生成相关
![](/icons/36203de.gif)
代码来完成所需要实现
![](/icons/36203de.gif)
功能
![](/icons/36203dou2.gif)
另外
![](/icons/36203dou.gif)
EJB组件还提供了生命周期管理容器、安全性和访问控制容器、持久性容器等等
![](/icons/36203dou.gif)
通过这些容器可以让
![](/icons/36203chengxu.gif)
开发人员少写大量
![](/icons/36203de.gif)
代码
![](/icons/36203dou.gif)
不仅可以提高
![](/icons/36203chengxu.gif)
![](/icons/36203de.gif)
开发效率
![](/icons/36203dou.gif)
而且同意了这些基础性内容解决方案
![](/icons/36203dou2.gif)
这也有利于后来
![](/icons/36203de.gif)
人员了解源代码
![](/icons/36203dou.gif)
有利于应用管理软件Software
![](/icons/36203de.gif)
后续升级
3、用户接口和底层业务功隔离![](/icons/36203dou2.gif)
在企业管理中共性和个性是并存
![](/icons/36203de.gif)
![](/icons/36203dou.gif)
这也体现在了企业
![](/icons/36203de.gif)
管理软件Software上
![](/icons/36203dou2.gif)
如同
![](/icons/36203yi.gif)
家企业
![](/icons/36203dou.gif)
如果管理者
![](/icons/36203de.gif)
文化背景区别
![](/icons/36203dou.gif)
其或许多同
![](/icons/36203yi.gif)
个业务具有区别
![](/icons/36203de.gif)
管理方式
![](/icons/36203dou2.gif)
这个用我们
![](/icons/36203chengxu.gif)
开发人员专业
![](/icons/36203de.gif)
术语来讲就是用户接口区别
![](/icons/36203dou2.gif)
但是其背后
![](/icons/36203de.gif)
管理模型是相同
![](/icons/36203de.gif)
![](/icons/36203dou.gif)
也就是说其业务功能是相同
![](/icons/36203de.gif)
![](/icons/36203dou2.gif)
如利用JAVA语言开发
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
个订单管理系统
![](/icons/36203dou.gif)
其订单
![](/icons/36203de.gif)
处理机制是相同
![](/icons/36203de.gif)
![](/icons/36203dou.gif)
都在数据库中建立相关
![](/icons/36203de.gif)
纪录并在保存记录的前进行数据有效性
![](/icons/36203de.gif)
审核
![](/icons/36203dou2.gif)
但是区别
![](/icons/36203de.gif)
订单类型其处理方式可能稍有区别
![](/icons/36203dou2.gif)
如对于预付订单
![](/icons/36203dou.gif)
必须要先收到客户
![](/icons/36203de.gif)
款项才能够下订单给生产部门安排生产或者仓库部门准备出货;如对于仓库订单
![](/icons/36203dou.gif)
则在流程处理上不需要经过生产而直接转到仓库出货等等
![](/icons/36203dou2.gif)
也就说是
![](/icons/36203dou.gif)
10种区别类型
![](/icons/36203de.gif)
订单
![](/icons/36203dou.gif)
其80%
![](/icons/36203de.gif)
功能是相同
![](/icons/36203de.gif)
![](/icons/36203dou.gif)
而又20%
![](/icons/36203de.gif)
内容由于管理方式或者其他
![](/icons/36203de.gif)
原因而有所区别
![](/icons/36203dou2.gif)
在这种情况下难道要写十个区别
![](/icons/36203de.gif)
代码来实现这十种区别
![](/icons/36203de.gif)
需求吗?
在EJB开发模型中不用这么复杂
![](/icons/36203dou.gif)
![](/icons/36203yinwei.gif)
EJB允许独立于表达层开发和部署业务功能
![](/icons/36203dou2.gif)
如上面这个订单管理需求
![](/icons/36203dou.gif)
![](/icons/36203chengxu.gif)
开发人员可以利用EJB模型来实现底层
![](/icons/36203de.gif)
功能(80%
![](/icons/36203de.gif)
共性内容)
![](/icons/36203dou.gif)
然后再无需重新设计或者开发整个应用
![](/icons/36203chengxu.gif)
或者销售订单管理模块
![](/icons/36203de.gif)
情况下
![](/icons/36203dou.gif)
可以利用区别
![](/icons/36203de.gif)
用户接口来实现用户
![](/icons/36203de.gif)
区别需求
![](/icons/36203dou2.gif)
这就好像父母和子女
![](/icons/36203de.gif)
关系
![](/icons/36203dou2.gif)
现把父母
![](/icons/36203de.gif)
特性定义好
![](/icons/36203dou.gif)
然后再根据区别
![](/icons/36203de.gif)
需要生养区别
![](/icons/36203de.gif)
子女即可(用户接口)
![](/icons/36203dou2.gif)
由于子女继承了父母
![](/icons/36203de.gif)
全部特性
![](/icons/36203dou2.gif)
那么只需要把用户需要实现
![](/icons/36203de.gif)
![](/icons/36203yi.gif)
些个性特点嫁接到子女身上即可
![](/icons/36203dou2.gif)
所以这种业务需求和业务功能相分离
![](/icons/36203dou.gif)
各自独立
![](/icons/36203de.gif)
特征
![](/icons/36203dou.gif)
是EJB开发模型
![](/icons/36203de.gif)
最大优势
![](/icons/36203dou2.gif)
![](/icons/36203chengxu.gif)
开发人员可以利用EJB实现分布式应用
![](/icons/36203chengxu.gif)
![](/icons/36203dou.gif)
将用户接口和底层业务功能隔离开来
延伸阅读
最新评论