MyEclipse6Java开发中文教程 第十六章开发EJB应用 第十六章开发EJB应用 161介绍 16.1.1概述 1612 Java ee5技术简介 6.1.3 Java ee打包和发布 16131JAR文件 16.132WAR文件 16.1.33EAR文件 1614 Java ee开发中的角色划分 1615 JavaBean和EJB的区别 161.6EJB和 Spring能否共存 9000 162系统需求 163准备工作 1631 MyEclipse对EJB提供的开发支持 1631配置应用服务器 1632 JBoss服务器目录结构简介 164走进 Java ee:JND1 164.1JND简介…. 1642如何查看 JBoss服务器的JND树 3368 1643开发JND|应用 1643.1简单JND|开发 1643.2JND访问数据源 1643使用JND|进行DNS,邮件服务器,主机信息查找… 1644 JBoss/. Tomcat E的一个JND|Bug问题解决 41 165开发 Session bean 1651 Session bean简介 1652开发无状态 Session Bean 1653体验无状态Bean的混乱态 1654开发有状态 Session bean 1655EJB发布描述符和 JBOss jND|地址 65268 1655EJB互访问和资源注入 1656拦截器 1657EJB和Web服务 1658EJB最佳实践 166开发实体Bean 1651使用反向工程生成EJB3实体Bean 1652调整生成的配置文件和实体类… 1653编写并运行测试代 166消息驱动Bean 1661JMS简介… 刘长炯著
MyEclipse 6 Java 开发中文教程 1 刘长炯著 第十六章 开发 EJB 应用 第十六章 开发 EJB 应用 ................................................................................................. 1 16.1 介绍................................................................................................................... 2 16.1.1 概述......................................................................................................... 2 16.1.2 Java EE 5 技术简介 ................................................................................. 5 16.1.3 Java EE打包和发布.................................................................................. 7 16.1.3.1 JAR文件......................................................................................... 7 16.1.3.2 WAR 文件 ................................................................................... 16 16.1.3.3 EAR文件...................................................................................... 17 16.1.4 Java EE开发中的角色划分..................................................................... 19 16.1.5 JavaBean和EJB的区别.......................................................................... 20 16.1.6 EJB和Spring能否共存 ............................................................................ 20 16.2 系统需求.......................................................................................................... 20 16.3 准备工作.......................................................................................................... 20 16.3.1 MyEclipse对EJB提供的开发支持 ........................................................... 20 16.3.1 配置应用服务器..................................................................................... 21 16.3.2 JBoss服务器目录结构简介..................................................................... 21 16.4 走进Java EE:JNDI ........................................................................................ 23 16.4.1 JNDI简介................................................................................................ 23 16.4.2 如何查看 JBoss服务器的JNDI树 .......................................................... 26 16.4.3 开发JNDI应用........................................................................................ 28 16.4.3.1 简单JNDI开发.............................................................................. 28 16.4.3.2 JNDI访问数据源........................................................................... 34 16.4.3.3 使用 JNDI 进行DNS, 邮件服务器, 主机信息查找...................... 38 16.4.4 JBoss/Tomcat中的一个JNDI Bug问题解决 ..................................... 41 16.5 开发 Session Bean ......................................................................................... 41 16.5.1 Session Bean简介.................................................................................. 41 16.5.2 开发无状态Session Bean ...................................................................... 46 16.5.3 体验无状态Bean的混乱态 ..................................................................... 51 16.5.4 开发有状态 Session Bean .................................................................... 52 16.5.5 EJB发布描述符和JBoss JNDI 地址 ....................................................... 56 16.5.5 EJB互访问和资源注入............................................................................ 58 16.5.6 拦截器 ................................................................................................... 65 16.5.7 EJB 和 Web 服务................................................................................. 67 16.5.8 EJB最佳实践.......................................................................................... 69 16.6 开发实体Bean ................................................................................................. 70 16.5.1 使用反向工程生成 EJB 3 实体 Bean................................................... 70 16.5.2 调整生成的配置文件和实体类 ............................................................... 81 16.5.3 编写并运行测试代码.............................................................................. 81 16.6 消息驱动Bean ................................................................................................. 82 16.6.1 JMS简介 ................................................................................................ 82
MyEclipse6Java开发中文教程 16.62JMS编程模型 16.6.3JMS点对点模式编程. 1664JMS发布订阅模式编程 1665MDB简介及MDB编程 167可嵌入式的EJB引擎 168小结 104 169参考资料 16.10术语表 107 161介绍 注意:本章将会出现大量术语(英文缩写等),请您参考本章末尾的术语表 1611概述 本章将会简要介绍JNDl,EJB及其开发。随着轻量级框架的流行,EJB的开发相对不 如以前那样受到大家的重视,不过在某些场合,以及大公司和大企业例如银行,电信等机构 中,它的使用还是非常的广泛的。尤其在一些需要多台服务器集群的时候,还是离不开的。 这是因为 Spring等轻量级框架不提供对于分布式服务的攴持。那么什么是分布式服务呢 我们来举一个简单的例子,例如你承包了一片地,需要找人来开发。第一种办法呢,是你自 己去开发,来盖房子,当然这种方式呢会有间题,比如说你不是建筑方面的专家,没有学习 过相关的技术不会盖房子那怎么办呢?这时候呢,一般来说我们可以去委托给一些建筑队或 者是建筑公司,让他们来进行这些房子的设计和开发,并且根据实际情况,如果工程量比较 大,或者是进度要求比较快,我们呢,还可以联系多家建筑公司一块儿来进行开发。这些相 当于我们是客户端,而一个建筑公司呢是服务器,虽然有多家建筑公司,但是他们提供的服 务是标准化的服务,也就是都能够进行合乎标准的建筑服务,这样呢他们就相当于所谓的服 务器集群,我们作为客户端需要的就是提出建筑的具体要求(所谓的业务逻辑),其他的功 能由他们来提供。同时,因为他们提供保证符合标准前提下,又带有特色的服务,所以呢, 可以方便的在工程的中间阶段根据情况更换服务公司,这相当于更换服务器 简单回顾一下EJB的历史。EJB10出现于1997年,那时候中国人还没几个做Java 的,只可惜搞的太重量级了,开发比较困难,后来才有了轻量级的 Hibernate和 Spring。在 Hibernate之前还有好多其它的轻量级ORM框架,不过那也是在EJB推广之后的事情 了。有意思的发现EJB最早是旧BM的发明,参考:http:/zh.wikipediaorg/wiki/ejb.Ejb 最早于1997年由IBM提出,旋即被太阳微系统采用并形成标准(EJB1.0和EJB1.1)。在 EJB2.1和以前的版本中,每个EJB都由一个类和两个接口组成。EJB容器负责创建这个类 的实例 接口则供客户端调用 参考 htt/www.ibm.com/developerworks/cn/opensource/os-ag-renegade14/,勿庸置疑,1997 年推出的BM⑧原始EJB规范是Java技术领域最重要的开发成果之一。EJB和包含 EJB的J2EE应用服务器迅速地应用于企业开发。然而,对EJB的批评之声也正如J2EE 的采用一样快速涌至。在这些批评之中,最主要的抱怨是EJB难于理解且开发起来繁琐乏 EJB是一种服务器的组件体系结构,它简化了用java开发企业级的分布式组件应用程 2 刘长炯著
MyEclipse 6 Java 开发中文教程 2 刘长炯著 16.6.2 JMS编程模型 ......................................................................................... 86 16.6.3 JMS点对点模式编程............................................................................... 87 16.6.4 JMS 发布订阅模式编程 ......................................................................... 96 16.6.5 MDB简介及MDB编程............................................................................. 99 16.7 可嵌入式的EJB引擎 ...................................................................................... 103 16.8 小结................................................................................................................ 104 16.9 参考资料........................................................................................................ 106 16.10 术语表 .......................................................................................................... 107 16.1 介绍 注意:本章将会出现大量术语(英文缩写等),请您参考本章末尾的术语表。 16.1.1 概述 本章将会简要介绍 JNDI,EJB 及其开发。随着轻量级框架的流行,EJB 的开发相对不 如以前那样受到大家的重视,不过在某些场合,以及大公司和大企业例如银行,电信等机构 中,它的使用还是非常的广泛的。尤其在一些需要多台服务器集群的时候,还是离不开的。 这是因为 Spring 等轻量级框架不提供对于分布式服务的支持。那么什么是分布式服务呢? 我们来举一个简单的例子,例如你承包了一片地,需要找人来开发。第一种办法呢,是你自 己去开发,来盖房子,当然这种方式呢会有问题,比如说你不是建筑方面的专家,没有学习 过相关的技术不会盖房子那怎么办呢?这时候呢,一般来说我们可以去委托给一些建筑队或 者是建筑公司,让他们来进行这些房子的设计和开发,并且根据实际情况,如果工程量比较 大,或者是进度要求比较快,我们呢,还可以联系多家建筑公司一块儿来进行开发。这些相 当于我们是客户端,而一个建筑公司呢是服务器,虽然有多家建筑公司,但是他们提供的服 务是标准化的服务,也就是都能够进行合乎标准的建筑服务,这样呢他们就相当于所谓的服 务器集群,我们作为客户端需要的就是提出建筑的具体要求(所谓的业务逻辑),其他的功 能由他们来提供。同时,因为他们提供保证符合标准前提下,又带有特色的服务,所以呢, 可以方便的在工程的中间阶段根据情况更换服务公司,这相当于更换服务器。 简单回顾一下EJB的历史。EJB 1.0 出现于 1997 年,那时候中国人还没几个做 Java 的,只可惜搞的太重量级了,开发比较困难,后来才有了轻量级的 Hibernate和Spring。在 Hibernate 之前还有好多其它的轻量级 ORM 框架,不过那也是在 EJB 推广之后的事情 了。有意思的发现 EJB 最早是 IBM 的发明,参考: http://zh.wikipedia.org/wiki/EJB。EJB 最早于 1997 年由IBM提出,旋即被太阳微系统采用并形成标准(EJB 1.0 和EJB 1.1)。在 EJB 2.1 和以前的版本中,每个EJB都由一个类和两个接口组成。EJB容器负责创建这个类 的实例,接口则供客户端调用。 参考: http://www.ibm.com/developerworks/cn/opensource/os-ag-renegade14/ ,勿庸置疑,1997 年推出的 IBM® 原始 EJB 规范是 Java 技术领域最重要的开发成果之一。EJB 和包含 EJB 的 J2EE 应用服务器迅速地应用于企业开发。然而,对 EJB 的批评之声也正如 J2EE 的采用一样快速涌至。在这些批评之中,最主要的抱怨是 EJB 难于理解且开发起来繁琐乏 味。 EJB 是一种服务器的组件体系结构,它简化了用 java 开发企业级的分布式组件应用程
MyEclipse6Java开发中文教程 序的过程。通过EJB,我们能写出可扩展的、健壮的和安全的应用程序,而不用自己去写 复杂的分布式组件框架。EJB用于快速开发服务器端应用程序,通过利用由业界提供的 些事先写好的基础结构,我们可以快速而轻松的利用Java构建服务器端组件。EJB被设计 为支持应用程序的可移植性和八这些特性是适用于任何厂商的企业中间件服务的。应用服务 器一般是指这种提供EJB,JMS,安全,事务等多种服务的服务器,而其中一种属于EJB 容器;而 Servlet容器则一般只是提供JsP和 Servlet的功能,例如 Tomcat。图16.1列出 了传统的 Java ee应用的结构,包括客户机, Java ee服务器和数据库服务器。当然,没 有人规定必须将所有的技术都用上才算是一个 Java eE应用,目前基于轻量级开发的SSH 应用,其实也是一种基于Web容器的解决方案,离开了Web容器, Struts是运行不了的 Java EE Application 1 Java EE Application 2 Client lient Tiel Application Dynamic HTML Pages SP Pages Web Tier Java EE Server Enterprise Beans Enterprise BeansBusiness Tier EIS Tier Database Database Database 图161传统 Java ee应用的结构 然而,实际上的应用服务器提供了多种技术,包括:JND,LDAP, Javamail,JAF, JMS, JTA, Web H& % JAXB, JAXP, JAXR, JCA, JAX-WS, SAAJ, RMI-IIOP, EJB, JsP, Servlet,JAAs,JsF,JsTL, Portal,SoA,JPA,加密解密等等全套技术,而且 般会提供热发布,集群,管理控制台,性能监控,远程管理,各种各样的池(数据库连接 池,线程池,对象池)等服务。就目前市场上的 Java ee服务器来说,主流的仍然是国外 厂商的商业服务器(即收费版本,一般都是单cPU多少万的卖,比 MyEclipse这样的软件 要贵的多,如果你的公司用了盗版的,那么千万要小心),这些服务器有 BEA WebLogic ( WebLogic Express只提供Web层的服务), IBM WebSphere Application Server, Oracle Application Server等等。有人说开源的 JBoss也不错,实际上 JBoss提供付费版本,里面 的组件和免费版大不一样,安装包也大很多(商业版 JBoss安装包大概200多MB),而且 最要命的是 JBoss服务器的文档是收费的(开源版本没有带文档的)!不过目前Sun主导的 开源 Java EE服务器 GlassFish呼声很高,据说性能比较好(全部使用NO等技术实现)。 Web层的服务器,坦白说 Tomcat是性能比较低下的一个,即使开源的 Resin也比同样条 刘长炯著
MyEclipse 6 Java 开发中文教程 3 刘长炯著 序的过程。通过 EJB,我们能写出可扩展的、健壮的和安全的应用程序,而不用自己去写 复杂的分布式组件框架。EJB 用于快速开发服务器端应用程序,通过利用由业界提供的一 些事先写好的基础结构,我们可以快速而轻松的利用 Java 构建服务器端组件。EJB 被设计 为支持应用程序的可移植性和八这些特性是适用于任何厂商的企业中间件服务的。应用服务 器一般是指这种提供 EJB,JMS,安全,事务等多种服务的服务器,而其中一种属于 EJB 容器;而 Servlet 容器则一般只是提供 JSP 和 Servlet 的功能,例如 Tomcat。图 16.1 列出 了传统的 Java EE 应用的结构,包括客户机,Java EE 服务器和数据库服务器。当然,没 有人规定必须将所有的技术都用上才算是一个 Java EE 应用,目前基于轻量级开发的 SSH 应用,其实也是一种基于 Web 容器的解决方案,离开了 Web 容器,Struts 是运行不了的。 图 16.1 传统 Java EE 应用的结构 然而,实际上的应用服务器提供了多种技术,包括:JNDI,LDAP,JavaMail,JAF, JMS,JTA,Web 服务,JAXB,JAXP,JAXR,JCA,JAX-WS,SAAJ,RMI-IIOP,EJB, JSP,Servlet, JAAS,JSF,JSTL,Portal,SOA,JPA,加密解密等等全套技术,而且 一般会提供热发布,集群,管理控制台,性能监控,远程管理,各种各样的池(数据库连接 池,线程池,对象池)等服务。就目前市场上的 Java EE 服务器来说,主流的仍然是国外 厂商的商业服务器(即收费版本,一般都是单 CPU 多少万的卖,比 MyEclipse 这样的软件 要贵的多,如果你的公司用了盗版的,那么千万要小心),这些服务器有 BEA WebLogic (WebLogic Express 只提供 Web 层的服务),IBM WebSphere Application Server,Oracle Application Server 等等。有人说开源的 JBoss 也不错,实际上 JBoss 提供付费版本,里面 的组件和免费版大不一样,安装包也大很多(商业版 JBoss 安装包大概 200 多 MB),而且 最要命的是 JBoss 服务器的文档是收费的(开源版本没有带文档的)!不过目前 Sun 主导的 开源 Java EE 服务器 GlassFish 呼声很高,据说性能比较好(全部使用 NIO 等技术实现)。 Web 层的服务器,坦白说 Tomcat 是性能比较低下的一个,即使开源的 Resin 也比同样条
MyEclipse6Java开发中文教程 件下的 Tomcat允许速度要快得多(当然 Resin还有商业版,同时还支持EJB开发)。所以 在这里我不是想说开源的坏话,总的来说,开源的软件,总是有这样那样的问题,俗话说多 少钱,多少货,这个是的确不假的。另外,国产的软件,到现在也还是主要停留在应用层面 服务器级别的和国外的还是竞争不过的。其它开源的应用服务器还有 Apache Geronimo等 等,|BM的免费服务器版本 WebSphere Application Server Community Edition就是基于它 二次开发的。而JMs这个关键技术,做的比较好的也大多是商业的例如 BEA Tuxedo websphere MQ,开源的则有 Apache ActiveMQ,免费的有 Sun Java System Message Queue等。图162列出了 Java ee5技术架构图,图163列出了目前支持 Java ee5规 范的服务器列表,包括国产的金蝶服务器。 Http Web Contain EJB Conta Servlet EJB Applet J2SE Application Client J2SE J2SE Client 112 Database New in Java EE 5 图162 Java ee5技术架构图(灰蓝色部分为新增内容) Chea GERONIMO e Apache Geronimo-2. WebLogic Server v10.0 IBM WASCE 2.0 Kingdee ORACLE Apusic Application Oracle Application SAP NetWeaver 7.1 Server (v5.0) Server 11 ◆Smm max Soft Sun Java System Application Tmax Soft JEUS 6 GlassFish Application Server Server Platform Edition 9 图163支持 Java ee5规范的服务器 这样一来呢,进行 Java ee开发就有了两套解决方案。一套是商业的,包括用商业操 作系统十商业服务器硬件+商业服务器软件+商业数据库软件(典型的例如 Oracle,DB2 SQL Server),这套系统的特点是昂贵,不过,不管你是否承认,的确有效,尤其是对开发 刘长炯著
MyEclipse 6 Java 开发中文教程 4 刘长炯著 件下的 Tomcat 允许速度要快得多(当然 Resin 还有商业版,同时还支持 EJB 开发)。所以 在这里我不是想说开源的坏话,总的来说,开源的软件,总是有这样那样的问题,俗话说多 少钱,多少货,这个是的确不假的。另外,国产的软件,到现在也还是主要停留在应用层面, 服务器级别的和国外的还是竞争不过的。其它开源的应用服务器还有 Apache Geronimo 等 等,IBM 的免费服务器版本 WebSphere Application Server Community Edition 就是基于它 二次开发的。而 JMS 这个关键技术,做的比较好的也大多是商业的例如 BEA Tuxedo, Websphere MQ,开源的则有 Apache ActiveMQ,免费的有 Sun Java System Message Queue 等。图 16.2 列出了 Java EE 5 技术架构图,图 16.3 列出了目前支持 Java EE 5 规 范的服务器列表,包括国产的金蝶服务器。 图 16.2 Java EE 5 技术架构图(灰蓝色部分为新增内容) 图 16.3 支持 Java EE 5 规范的服务器 这样一来呢,进行 Java EE 开发就有了两套解决方案。一套是商业的,包括用商业操 作系统+商业服务器硬件+商业服务器软件+商业数据库软件(典型的例如 Oracle,DB2, SQL Server),这套系统的特点是昂贵,不过,不管你是否承认,的确有效,尤其是对开发
MyEclipse6Java开发中文教程 人员要求不高,国内的大企业,例如电信,银行,政府部门等(说实话,Java不能用于实 时操作的领域,这也是Sun的JDK下载里面说的很清楚的,所以一般都是提供外围接口服 务的部分,例如服务网站,内部网等等),总之是有钱的大客户,大多数会采用这种方案。 另一套是开源架构的,全部采用开源,不过问题也有,例如开源的SSH组合,往往一个地 方配置出错,整个应用都会坏掉,甚至还有因为开源包之间互相冲突造成问题,也不支持集 群,调优等功能,开发过程也比较缓慢。相对来说,JSF十JPA的开发效率要稍高于SSH 当然对于读者来说,到底用什么技术,是不能纯粹出于自己的喜好的,更多的是看单位的情 况和要求。总而言之,本书的内容个个章节都是按照参考资料的方式提供的,读者可以根据 项目需要来阅读。 由于 Java ee领域的技术点是如此之多,因此如果要全面的介绍,那么光是技术点的 内容就可以写一本千页的大书,例如我以前买过一本《J2EE编程指南13版》。所以在本书 中,我们不可能覆盖方方面面,本章,也主要集中于EJB3的内容上。EJB21的内容,读 者可以参考附录部分的 Mastering Enterprise JavaBeans Third Edition这本书(中文出版名 为《精通EJB》),那本书是EJB2的经典书籍,如果你看了那本书,就会发现仅仅是EJB 就可以讲述那么多的内容。当然,对于我们开发人员来说,主要目的就是写例子,发布,运 行即可。 1612 Java ee5技术简介 接下来我们对 Java ee技术进行简单的介绍 为何推出 Java ee5? Suts, Spring, Webwork, Hibernate等等开源框架的冲击 传统的EJB21及相关应用开发难度太大 开源ORM及 JBoss等服务器的冲击 开源框架缺乏稳定性和商业支持 简化ORM开发人员负担(多种ORM框架互不兼容) Java ee5有哪些新特性? 标注取代部署描述符 简化的EJB软件开发 使用依赖关系注入来访问资源 Java持久性AP1模型 Web服务 Java ee5大量采用标注简化开发,这种趋势已经影响到了很多开源框架例如 Struts2 ( Struts2也支持标注方式的 Action开发,并在开发完全无配置文件的版本)以及 Spring ( Spring25大力增强了对标注方式的开发支持)。标注取代部署描述符,可以用来进行: 定义和使用Web服务 开发EJB软件应用程序 将Java技术类映射到XML 将Java技术类映射到数据库 将方法映射到操作 指定外部依赖关系 指定部署信息,其中包括安全属性 标注格式 标注使用@字符来标记,例如下面的代码片段定义了一个无状态的会话Bean 刘长炯著
MyEclipse 6 Java 开发中文教程 5 刘长炯著 人员要求不高,国内的大企业,例如电信,银行,政府部门等(说实话,Java 不能用于实 时操作的领域,这也是 Sun 的 JDK 下载里面说的很清楚的,所以一般都是提供外围接口服 务的部分,例如服务网站,内部网等等),总之是有钱的大客户,大多数会采用这种方案。 另一套是开源架构的,全部采用开源,不过问题也有,例如开源的 SSH 组合,往往一个地 方配置出错,整个应用都会坏掉,甚至还有因为开源包之间互相冲突造成问题,也不支持集 群,调优等功能,开发过程也比较缓慢。相对来说,JSF+JPA 的开发效率要稍高于 SSH。 当然对于读者来说,到底用什么技术,是不能纯粹出于自己的喜好的,更多的是看单位的情 况和要求。总而言之,本书的内容个个章节都是按照参考资料的方式提供的,读者可以根据 项目需要来阅读。 由于 Java EE 领域的技术点是如此之多,因此如果要全面的介绍,那么光是技术点的 内容就可以写一本千页的大书,例如我以前买过一本《J2EE 编程指南 1.3 版》。所以在本书 中,我们不可能覆盖方方面面,本章,也主要集中于 EJB 3 的内容上。EJB 2.1 的内容,读 者可以参考附录部分的 Mastering Enterprise JavaBeans Third Edition 这本书(中文出版名 为《精通 EJB》),那本书是 EJB 2 的经典书籍,如果你看了那本书,就会发现仅仅是 EJB 就可以讲述那么多的内容。当然,对于我们开发人员来说,主要目的就是写例子,发布,运 行即可。 16.1.2 Java EE 5 技术简介 接下来我们对 Java EE 技术进行简单的介绍。 为何推出 Java EE 5? Struts, Spring, Webwork, Hibernate 等等开源框架的冲击 传统的 EJB 2.1 及相关应用开发难度太大 开源 ORM 及 JBoss 等服务器的冲击 开源框架缺乏稳定性和商业支持 简化 ORM 开发人员负担(多种 ORM 框架互不兼容) Java EE 5 有哪些新特性? 标注取代部署描述符 简化的 EJB 软件开发 使用依赖关系注入来访问资源 Java 持久性 API 模型 Web 服务 Java EE 5 大量采用标注简化开发,这种趋势已经影响到了很多开源框架例如 Struts 2 (Struts 2 也支持标注方式的 Action 开发,并在开发完全无配置文件的版本)以及 Spring (Spring 2.5 大力增强了对标注方式的开发支持)。标注取代部署描述符,可以用来进行: 定义和使用 Web 服务 开发 EJB 软件应用程序 将 Java 技术类映射到 XML 将 Java 技术类映射到数据库 将方法映射到操作 指定外部依赖关系 指定部署信息,其中包括安全属性 标注格式: 标注使用 @ 字符来标记,例如下面的代码片段定义了一个无状态的会话 Bean: