我们都知道EJB是JavaEE的规范之一,下面我们就来了解一下EJB到底是什么东西。
百度百科的解释:
EJB(Enterprise Java Beans)是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。
比较通俗的解释:
EJB就是:"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。
EJB在架构中的位置:
下面我们看一下J2EE的体系结构:
EJB属于J2EE体系结构中的业务逻辑部分,Web容器通过EJB容器进行对数据库的操作。
EJB的分类
EJB可以分为三种Bean:Session bean(会话Bean),Entity Bean(实体Bean),MessageDriven Bean(消息Bean),这里先简单了解一下这三种Bean,在后续的博客中,我们会继续介绍。
(1)Session Bean
Session Bean实现会话中的业务逻辑。它分为有状态Bean和无状态Bean,每当客户端发出EJB调用请求时,容器就会选择一个Session Bean来为客户端服务,Session Bean可以直接访问数据库,但更多的时候,它是通过Entity Bean实现数据访问。
(2)其次Entity Bean
Entity Bean实现一个业务实体。Entity Bean代表真实物体的数据,在EJB3.0中(后面我们会专门拿出一篇文章来介绍EJB3.0),Entity Bean仅作为普通的Java对象来使用,它负责跟数据库表进行对象与关系映射(O/R Mapping)
(3)最后MessageDriven Bean
MessageDriven Bean作为JMS(Java Message Service)Java消息服务的API的监听者,异步处理其中的消息。MessageDriven Bean是用来专门处理基础消息请求的组件,能够轻松的与其他EJB交互。它特别适合用于当一个业务执行的时间很长,而执行结果无需实时向用户反馈的这样一种场合。
开发一个EJB程序十分简单,只需要在一个java类中加上一个注解即可。
@Stateless
publicclass EJBTest {
public Book methodOne(Long id) {
}
public Book methodTwo(String param) {
}
}
@Stateless表示这个类是一个无状态的会话bean,还有一些其他的注解,这里就不一一介绍了。
我们可以通过把这个Bean导出jar包,然后发布到Jboss的目录下,就可以通过客户端调用发布的Bean了。
JNDI
在EJB中,我们可以这样理解:EJB的各种Bean由容器(一般是Jboss)提供,我们并不能再程序中使用创建实例的方法来创建EJB的Bean,而是需要使用Java的JNDI来获得EJB对象的引用。
JNDI(Java Naming and Directory Interface),即Java的命名和目录接口来获得EJB对象的引用。可以简单的把JNDI理解为一种将对象和名字绑定的技术,JBoss容器负责生产出对象,这些对象都有唯一的名字绑定,外部程序可以通过名字来获得对象的引用。所以换句话说,JNDI是Sun公司提供的一种标准的Java命名系统接口。
小结:
1.EJB实现原理:就是把原来放到客户端实现的代码放到服务器端,其他模块或者客户端通过JNDI来获得对EJB对象的引用。
2.EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。