|
转载: http://blog.csdn.net/gaoying_blogs/article/details/41515743
EJB是Enterprice Java Beans的简称,即企业Java组件,是一个用于分布式业务应用标准服务端组件模型(这里强调是服务端组件模型,后面我们将会说一下为什么是服务端而不是客户端),是一组用java语言编写的包含字段和方法的代码体,而这些代码的核心任务就是实现纯粹的业务逻辑。
采用Enterprice java Beans架构编写的应用是可伸的、事务性的、多用户安全的,可以一次编写这些应用,然后部署在任何支持Enterprice Java Beans规范的服务器平台,如JBoss、Weblogic等。
容器知多少?EJB容器呢?
EJB要在EJB容器中运行,运行时环境由容器建立,当完成EJB的开发后,需要将EJB组件部署到EJB容器中,只有正确部署后,EJB容器才能向客户提供业务服务。在这里想说一下容器,我们可以这么理解容器,容器只是一种概念,容器可以管理对象的生命周期,对象与对象之间的依赖关系。可以使用配置文件(通常是xml)然后定义好对象的名称、如何产生等,在启动容器之后,所有的对象都可以直接被取用(如果不用容器就需要编写一段相应的代码来产生对象或建立与对象之间的依赖关系等)。也就是原来不用容器前,都是需要自行编写程序以管理对象;应用了容器之后都会自动帮忙做好,就节省了再编写程序管理对象的环节。常用的容器有WebLogic、Tomcat等
在EJB中,JBoss是一个开源的J2EE应用服务器,可以在该容器下部署和运行EJB组件。每个J2EE应用服务器都包含EJB容器和Web容器,所以既可以运行EJB,也可以运行Web应用(而Tomcat目前只是Web容器,它不能运行EJB应用)。早期的JBoss版本只包含EJB容器,而不包含Servlet容器,因此需要把JBoss与Tomcat集成,二者协同工作,才能构成完整的JEE应用服务器。新版本的JBoss同时提供了Servlet容器和EJB容器,因此既能运行JavaWeb应用,又能运行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方面的知识,下面我想说一下JNDI。其实上网查找了好多关于EJB方面的资料,很多资料很顺便的介绍JNDI,弄的我也是云里雾里,所以很有必要把JNDI好好扒一扒,限于篇幅的原因,下篇文章,我们就来好好扒一扒何为JNDI,敬请期待!有什么困惑有什么不足的地方,非常欢迎您在下方留言,和我沟通,谢谢!
转载: http://blog.csdn.net/gaoying_blogs/article/details/41516525
上篇文章我们宏观的介绍了一下何为EJB,在上篇文章的结尾我为大家埋下了一个伏笔,就是何为JDNI呢?在很多关于EJB的资料中介绍了JNDI,但是弄得我也是云里雾里的,所以我们借着今天这篇文章,就来好好扒一扒什么是JNDI。
JNDI知多少?
EJB对象由容器(JBoss)提供,因此不能在程序中使用创建实例的方法来生成EJB对象,而需要采用Java的JNDI(Java Naming and Directory Interface),即Java的命名和目录接口来获得EJB对象的引用。可以简单的把JNDI理解为一种将对象和名字绑定的技术,JBoss容器负责生产出对象,这些对象都有唯一的名字绑定,外部程序可以通过名字来获得对象的引用。所以换句话说,JNDI是Sun公司提供的一种标准的Java命名系统接口。
在结构上,JNDI由两部分组成:即API和SPI(Service Provider Intergace,服务提供商接口)。JNDI提供统一的客户端API,应用程序通过客户API访问命名和目录服务(目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性);服务提供商接口SPI用于供厂商创建命名和目录服务的JNDI实现。
JNDI的架构和JDBC的架构非常类似,所以网上有一系列关于JNDI和JDBC区别的文章,有兴趣的可以自己去查阅。
对于EJB开发者来说,我们只需要知道使用客户API如何访问命名和目录服务即可,而不需要知道SPI的使用,因为我们不需要使用SPI开发JNDI实现产品。就好比我们通过JDBC访问数据库,我们只需要知道使用JDBC API如何访问数据库,而不需要知道数据库的JDBC驱动如何实现,只知道我们要实现的就可以了,而不需要了解内部的处理调用流程、原理。
J2EE规范要求所有的J2EE容器都要提供JNDI规范的实现,JNDI在J2EE中的角色就是“交互机”,就是J2EE组件在运行时间间接的查找其他组件、资源或服务的通用机制,也就是说JNDI在J2EE应用程序中提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。这样就暗合了上段中我们所提到的,对于EJB开发者而言只需要知道使用客户API如何访问命名和目录服务即可,而不需要知道SPI的使用。
好了,JNDI的介绍就这么多,如果您有更好的想法欢迎您在下方留言,谢谢!