EJB整理1-基础知识

    技术2022-06-12  46

    1 EJB基本知识

    1.1 EJB定义

    Enterprice JavaBeans 是一个用于分布式业务应用的标准服务端组件模型。采用 Enterprice JavaBeans 架构编写的应用是可伸的、事务性的、多用户安全的。可以一次编写这些应用,然后部署在任何支持 Enterprice JavaBeans 规范的服务器平台,如 jboss、weblogic 等。

    Enterprise JavaBean(EJB)定义了三种企业 Bean,分别是会话 Bean(Session Bean),实体 Bean(Entity Bean)和消息驱动 Bean(MessageDriven Bean)。

    Ø 会话 Bean

    会话 Bean 用于实现业务逻辑,它分为有状态 bean 和无状态 bean。每当客户端发出 EJB 调用请求时,容器就会选择一个 Session Bean 来为客户端服务。会话 Bean 可以直接访问数据库,但更多时候,它是通过实体 Bean 实现数据访问。

    Ø 实体 Bean :

    从名字上我们就能猜到,实体 bean 代表真实物体的数据。在 EJB3.0 中,实体 bean 仅作为普通 Java 对象来使用,它负责跟数据库表进行对象与关系映射(O/R Mapping)。使用的JPA

    Ø 消息驱动 Bean(MDB) :

    MDB 是设计用来专门处理基于消息请求的组件。它能够收发异步 JMS 消息,并能够轻易地与其他 EJB 交互。它特别适合用于当一个业务执行的时间很长,而执行结果无需实时向用户反馈的这样一个场合。

    EJB 需要运行在 EJB 容器,每个 JavaEE 应用服务器都含有 EJB 容器和 Web 容器,所以既可以运行 EJB,也可以运行 Web 应用。目前支持 EJB3.0 的应用服务器有 Jboss(4.2.x 以上版本)、Glassfish、Weblogic(10 以上版本)、Sun Application Server(9.0 以上版本)、Oracle Application Server(10g 以上版本)和我们国内的 apusic 应用服务器。本书将介绍 Jboss 和 Weblogic,前者是使用者最多的开源应用服务器,后者是市场占有率最高的商业应用服务器。注意:Tomcat 目前只是 Web 容器,它不能运行 EJB 应用。

    为什么要使用EJB

    分布式!分布式对象之间相互协作,完成特定的业务功能。分布式对象之间应实现分布透明性(或位置透明性)。即在客户端代码中无需指定分布式对象的位置(通过配置来解决)分布式对象之间的事务支持(RMI不支持事务)应用程序需要支持不同的客户端,只需要少量的代码,就可以让远程客户端访问到企业Bean。

    1.2 JNDI定义

    JNDI 是自 JDK1.3 版本开始就绑定的标准 Java API。它为各种现有的命名和目录服务提供了通用接口:DNS、LDAP、活动目录(Active Directory)、RMI 注册器、COS 注册器、NIS 及文件系统。在结构上,JNDI 由两部分组成:客户 API 和服务提供商接口(Service Provider Intergace,SPI),应用程序通过客户 API 访问命名和目录服务;服务提供商接口用于供厂商创建命名和目录服务的 JNDI 实现。下面是 JNDI 的结构图:

    对于 EJB 开发者来说,我们只需要知道使用客户 API 如何访问命名和目录服务即可,而不需要知道 JNDI SPI 的使用,因为我们不需要使用 JNDI SPI 开发 JNDI 实现产品,这就好比通过 JDBC 访问数据库,我们只需要知道使用 JDBC API 如何访问数据库,而不需要知道数据库的 JDBC 驱动如何实现。使用客户 API 访问 EJB3.0,我们需要编写的 JNDI 代码不过几句,所以大家不要被吓倒了。

    命名服务用于将名称和对象联系起来,使得我们可以用名称访问对象。例如,当你在 web 浏览器输入 URL:http://www.baidu.com 时,DNS(Domain Name System,域名系统)将这个域名转换成 IP 地址。

    目录服务是命名服务的自然扩展,在这种服务里,对象不但有名称,还有属性。与命名服务的关键差别是:目录服务中对象可以有属性(例如,用户有 email 地址),而命名服务中对象没有属性。

    1.3 环境配置

    1.3.1 JDK安装

    进入 http://java.sun.com/javase/downloads/index_jdk5.jsp 下载 JDK。在页面中找到 JDK 5.0 Update 14(版本在不断更新中,有可能大于 14),点击右边的 Download,注意中间有 Accept 和 Decline 两选项,点选 Accept。在 WindowsPlatform 一栏找到 Windows Offline Installation, Multi-language 这个链接,点击下载。(注:本书光盘“软件”文件

    夹中带有 JDK 5.0)按照安装向导提示安装,安装路径选择 C:/Java/jdk1.5.0_14。Jdk 安装完后,接着问你是否安装 jre,也一起安装上。

    右键点击“我的电脑”->“属性”->“高级”->“环境变量”,在“系统变量”里添加 JAVA_HOME 变量,值为JDK 的安装路径,如:C:/ Java/jdk1.5.0_14。

    在“系统变量”里再添加 CLASSPATH 变量,值为: .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;在系统变量栏找到变量名为 Path 的选项,点“编辑”在变量值的末尾添加;%JAVA_HOME%/bin;

    1.3.2 JBoss安装

    进入 http://labs.jboss.com/jbossas/downloads/下载页面,选择 jboss4.2.2.GA 文件下载(大小为 92MB)。下载后直接解压缩文件即可完成安装,为了避免应用出现莫名的错误,解压缩的路径最好不要带有空格,如“Program Files”。

    注:本书配套光盘“软件”文件夹中已经带有 Jboss4.2.2.GA 安装包。

    安装完后请右键点击“我的电脑”->“属性”->“高级”->“环境变量”,在“系统变量”里添加 JBOSS_HOME变量,值为 Jboss 的安装路径,如:D:/JavaEEServer/jboss。

    在系统变量一栏找到变量名为 Path 的选项,点“编辑”在变量值的末尾添加: ;%JBOSS_HOME%/bin;现在验证 Jboss 安装是否成功, 进入[jboss 安装目录]/bin 目录,双击 run.bat 启动 jboss。观察控制台有没有 Java例外抛出,如果没有例外并看到下图,恭喜你,安装成功了。

    你可以输入 http://localhost:8080 进入 Jboss 的欢迎主页。在 JBoss Management 栏点击“JMX Console”进入 Jboss的管理平台。如果需要输入用户名及密码,默认的用户名及密码都是 admin。如果 jboss 启动出错,应检查打印在 Jboss 控制台的 JDK 版本是否 5.0 以上,jboss 所用的端口是否被占用(如 1099,8009 ,8080 等端口)。

    1.3.3 JBoss 的目录结构

    目录

    概述

    bin

    启动和关闭 JBoss 的脚本

    client

    客户端与 JBoss 通信所需的 Java 库(JAR)

    docs

    配置文件的例子(数据库配置等)

    docs/dtd

    在 JBoss 中使用的各种 XML 文件的 DTD。

    lib

    JBoss 启动时使用到的 JAR,这些库为所有 JBoss 配置所共享。(不要把你的库放在这里)

    server

    各种 JBoss 配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。JBoss 包含 3 个默认的配置:minimal,default 和 all。

    server/all

    JBoss 的完全配置,启动所有服务,包括集群和 IIOP。

    server/minimal

    这是启动 JBoss 服务器所要求的最低配置。minimal 配置将启动日志服务、JNDI 服务器以及 URL 部署扫描器,以找到待部署的(新)应用。对于那些不需要使用任何其他 J2EE 技术,而只是使用自定义服务的场合而言,则这种配置最适合。它仅仅是服务器,而不包含 Web 容器、不提供 EJB 和 JMS 支持。

    server/default

    默认配置,它含有大部分 J2EE 应用所需的标准服务。但是,它不含有 JAXR 服务、IIOP 服务、或者其他任何群集服务。如果在 JBoss 命令行中没有指定配置名称,则默认使用此配置。(本教程就采用此配置)

    server/default/conf

    JBoss 的配置文件。如:log4j.xml 是 Log4j 日志配置文件,login-config.xml 是 Jboss安全配置文件,jboss-service.xml 配置在 jboss 启动时开启的 Jboss 服务(像类加载器,JNDI,部署工具等),jbossmq-state.xml 是 JbossMQ(JMS 实现)的用户配置文件。

    server/default/deploy

    JBoss 的热部署目录。任何位于此目录下的文件或目录都会被自动部署。如:EJB、WAR、EAR,甚至服务。

    server/default/lib

    一些 JAR,JBoss 启动 default 配置时会加载它们。

    server/default/log

    日志信息将存储到该目录。JBoss 使用 Jakarta Log4j 包作为其日志功能。同时,用户可以在应用中直接使用 Log4j 日志记录功能。

    server/default/data

    这一目录存储持久化数据,即使服务器发生重启其中的数据也不会丢失。许多 JBoss服务将数据存储在这里,比如 Hypersonic 数据库实例。

    server/default/tmp

    供部署器临时存储未打包应用使用,也可以作为其他用途。

    server/default/work

    供 Tomcat 编译 JSP 使用。

    其中,log、data、tmp、work 目录是 JBoss 创建的。如果用户没有启动过 JBoss 服务器,则这些目录不会被创建。

    1.3.4 在 JBoss 部署应用

    在 JBoss 部署应用的过程非常简单、直接。在每一个配置中,Jboss 会不断扫描一个名为[jboss 安装目录]/server/config-name/deploy 的特定目录,查看是否有任何更新,此目录一般被称为“部署目录”。

    你可以把下列文件拷贝到部署目录中:

    任何 Java 库(其中的类将被自动添加到 JBoss 的 classpath 中)EJB-JARWAR (Web Appliction aRrchive)EAR (Enterprise Application aRchive)包含 JBoss MBean 定义的 XML 文件以.jar、.war 或者.ear 结尾的目录,分别包含了 EJB-JAR、WAR 或者 EAR 的解压缩内容。

    要重新部署上述文件(JAR、WAR、EAR、XML 等),只需用更新后的版本覆盖即可。Jboss 将通过对比时间戳来检测变化,卸载旧文件,部署相应的新文件。如果要重新部署目录,只需更新其时间戳即可。从部署目录中删除文件会导致相应文件从部署中卸载。


    最新回复(0)