一、EJB技术概述
- Java之所以受到企业级应用的青睐,很大程度上不仅是因为其在Web领域的成功,
更多的是因为Java EE的规范中明确规定了一个清晰的软件分层,
将业务逻辑分离于表现层,而EJB就是这样的位置。 - 什么是EJB
EJB是用于构建企业应用程序模块托管的、服务器端组件架构。EJB技术加速
并简化了开发基于Java技术的分布式、事务性、安全和便携的应用程序。 - EJB类型
EJB的类型有两种:会话Bean(Session Bean)和
消息驱动Bean(Message Driven Bean)。
其中会话Bean又分为有状态的会话Bean(Stateful Session Bean)
和无状态的会话Bean(Stateless Session Bean)。
会话Bean:是供客户(Client)端调用的Bean,
会话Bean通常封装了常用的业务逻辑,是最常用的Bean。
有状态的会话Bean可以保存客户端的状态,能够跟踪客户端;
无状态的会话Bean不能保存客户端的状态;一次会话结束,会话Bean就结束了。
消息驱动Bean:可供客户端调用的异步方法,通常封装了发送消息相关的业务逻辑。
二、下载和安装JBoss服务器
- 下载JBoss
下载、解压 - JBoss的目录结构
JBoss解压缩后的根目录下有bin、client、docs、server和lib等文件目录。 - MyEclipse中配置JBoss
1、配置服务器
2、配置JDK
3、配置启动模式 - 启动JBoss服务器
选择Start选项启动JBoss
三、实例:HelloEJBService
- 新建EJB工程
1、选择菜单中的File | New | EJB Project命令,
弹出New EJB Project对话框。
2、输入项目名称,同时选择项目为Java EE 5.0,
单击Finish按钮,这样就创建了一个EJB项目。 - 定义EJB业务接口
开发一个SessionBean通常要定义两个类:一个是服务接口,
它声明为Remote或者是Local的。另一个是实现这个远程接口的Bean,
它可以被声明成Stateful或Stateless。
EJB的业务接口由以下两部分组成:
普通的Java接口。
标注调用接口的方式,本地调用@Local或者远程调用@Remote。 - 编写SessionBean
定义了远程的服务接口,之后需要开发无状态的会话Bean也需要两个要素:
实现定义的业务接口。
使用注释@Stateless,将Bean标注成为无状态的会话Bean。 - EJB的部署
将EJB部署到JBoss容器中的步骤如下:
1、在项目上右击,在弹出的快捷菜单中选择MyEclipse |
Add and Remove Project Deployments命令。
2、或者也可以单击工具栏中的部署按钮,也会打开部署项目的对话框。
然后在对话框中选择Add按钮,在弹出的对话框中
选择所要部署的JBoss服务器,单击Finish按钮。
部署时,可以选择部署为Explored Archive解压包和Packaged Archive
压缩包两种方式,两种方式的区别如下:
Explored Archive:可以支持热部署,也就是说当代码改变后,
不用重新启动JBoss便可以运行最新的程序,这种方式适合在
开发阶段部署使用,建议采用这种方式。
Packaged Archive:不支持热部署,改变代码后,需要重新启动
JBoss。这种方式适用于产品发版后,运行适用。
3、部署完成EJB后,将会在JBoss的安装目录
E:\server、jboss-5.0.0.Beta4\server\default\deploy下
新建xxx.jar的文件夹,这个EJB Jar包便是刚才部署的EJB。
4、启动JBoss服务器,在启动时JBoss会自动加载EJB。
四、运行EJB
- 客户端调用EJB
客户端调用EJB时需要注意以下几个问题:
1、要想获得指定的EJB组件,首先要初始化context上下文对象,
使用JBoss服务器,所以初始化Context要使用JBoss的实现。
protected static Context getInitialContext() {
if (context == null) {
Hashtable props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
props.put(Context.PROVIDER_URL,
"jnp://localhost:1099");
context = new InitialContext(props);
}
return context;
}
2、EJB的服务接口需要通过Context对象的lookup方法来查找,
其中参数的组成为:
EJB-JAR包中EJB的获取:EJB服务名/接口类型(remote/local)。
EAR包中EJB的获取:EAR包名/EJB服务名/接口类型(remote/local)。
Context ctx = getInitialContext();
Ojbect object = ctx.lookup("HelloEJBService/remote");
3、运行客户端程序需要将JBoss的客户端类库导入到运行环境中,该类库
位于E:\server\jboss-5.0.0.Beta4\client\jbossall-client.jar下。 - Web应用调用EJB
@EJB
IHelloEJBService service;
service.sayHelloEJB("Web Client");
五、EJB其他的相关技术规范
- MessageBean(消息Bean):
也叫做消息驱动Bean,是基于Java消息服务(JMS)技术的,它能够异步地
发送消息执行业务逻辑,常用的应用比如驱动工作流程等。 - EntityBean(实体Bean):
是持久层的业务组件,在EJB3.0以后,被单独分离出来成为
JPA(Java Persistence API),是一种ORM的规范。 - 事务管理(Transaction):
事务管理是EJB中很重要的内容,它能够保证业务逻辑的完整性。
事务管理是对一系列操作的管理,它最终只有两个结果,
要么成功,要么失败。一旦失败,所有的操作将回滚到初始状态。
一旦成功,才最终提交,最终持久化。 - EJB安全(Security):
对于任何系统来说,安全都是需要值得考虑的问题,EJB当然也不例外。
EJB中针对安全方面有专门的API,
能够帮助EJB快速地建立安全的运行环境。 - AOP在EJB中的而应用--拦截器(Interceptor):
AOP拦截器是EJB3.0以后的功能,它能够在调用EJB之前对EJB进行拦截,
可以方便地对访问进行控制。 - 定时服务(Timer Service):
定时服务是EJB中类似定时器的服务,它能够定时地触发业务逻辑,
简化了后台需要周期性执行的业务的开发。 - Web服务(Web Service):
Web服务是目前各大公司倡导的业务理念,EJB也不例外。
在EJB3.0规范中,将EJB发布成Web服务更加容易和方便。