跟我学EJB 分布式编程技术——利用J2eeSdk13实现EJB编程和部署
- 格式:pdf
- 大小:902.35 KB
- 文档页数:33
ejb技术的工作原理EJB(Enterprise Java Beans)是一种用于构建分布式企业级应用程序的Java技术。
它是一种服务器端组件模型,用于在Java应用程序中实现业务逻辑和持久化数据。
EJB的工作原理可以分为以下几个步骤:1. 定义EJB接口:首先,开发人员需要定义EJB接口,该接口定义了EJB的方法和行为。
这些接口通常使用Java接口来定义,其中包含了业务逻辑的方法。
2. 实现EJB:接下来,开发人员需要实现EJB接口。
实现类通常称为EJB Bean,它包含了实际的业务逻辑和数据访问代码。
EJB Bean可以是无状态(Stateless)或有状态(Stateful)的。
3. 配置EJB容器:在将EJB部署到应用服务器之前,需要对EJB进行配置。
配置包括指定EJB的访问权限、事务管理、安全性等方面的设置。
这些配置信息通常包含在EJB的部署描述符文件中,如ejb-jar.xml。
4. 部署EJB:一旦EJB被配置好,就可以将其部署到应用服务器上。
应用服务器会负责管理EJB的生命周期,包括创建、激活、销毁等操作。
5. 客户端访问EJB:一旦EJB被部署到应用服务器上,客户端可以通过远程调用或本地调用的方式访问EJB。
远程调用使用RMI (Remote Method Invocation)或Web服务技术,而本地调用则直接在同一个JVM中进行。
6. EJB容器处理请求:当客户端调用EJB的方法时,请求会被EJB容器接收并处理。
EJB容器负责管理EJB的生命周期、事务管理、安全性等方面的功能。
它会根据配置信息执行相应的操作,并确保EJB的正确运行。
7. 返回结果给客户端:一旦EJB方法执行完毕,容器会将结果返回给客户端。
结果可以是一个返回值、一个对象或者一个异常。
总结起来,EJB的工作原理是通过定义EJB接口、实现EJB、配置EJB容器、部署EJB、客户端访问EJB、EJB容器处理请求和返回结果给客户端等步骤来实现分布式企业级应用程序的开发和运行。
J2EE——J2EE的⼗三种技术引⾔J2EE的⼗三种技术在⽹上⼀搜多的是,⽐如附录中的那篇⽂档就已经涵盖的很全了,但是作为应⽤级开发者并不⼀定要对这⼗三种技术都掌握,⽽且这⼗三种技术中哪些重要哪些不重要也存在⼀定的区别,所以我对⼀些重要的技术提炼出来放在概要⾥,⽅便读者快速掌握,⽽且学习也好有偏重概要这个也可以作为学习Java的路线,其实Java主要的技术包括Java基础部分,也就是⾯向对象,集合,界⾯,线程,⽂件以及⽹络;以及往⽹页⽅⾯⾛的JSP,Servlet,JS,其实如果读者接触过JSP和Servlet,就知道他们俩其实是⼀个东西,jsp其实最终也是会翻译成servlet,⼀个jsp会对应⼀个class;与数据库打交道的JDBC,Oracle;最后可以加上⼀个SSH,三⼤框架,⽤的还⽐较多除了上⾯说的常⽤的之后还有⼀些不常⽤的,⽐如JNDI,Java命名和⽬录接⼝,这个我们实际上⼀般只是⽤它,往往都不会⾃⼰去开发,感觉并不算重点另外EJB,企业级Java Bean,跟Hibernate很像,但有逐渐被Hibernate淘汰的趋势,其实这些技术都是存在⼀个演化过程,在原有的技术基础上改良⽽得,后⾯的SSH框架以及其他框架都是如此,针对某⼀⽅⾯的改良。
Java事务这块的技术,JTA和JTS,JTA是事务体系,JTS是事务服务,这个也是很底层的东西,应⽤级开发⽤的⽐较少,应⽤开发者⼀般只管⽤就⾏了附录J2EE的⼗三种技术(规范)Java数据库连接(JDBC) JDBC API以⼀个统⼀的⽅式访问各种数据库。
与ODBC类似,JDBC将开发者和私有数据库之间的问题隔离开来。
由于它建⽴在Java上,因此JDBC可以提供平台⽆关的数据库访问。
JDBC定义了4种不同的驱动,具体来说,包括有: 类型1:JDBC-ODBC桥 在JDBC刚产⽣时,JDBC-ODBC桥是⾮常有⽤的。
通过它,开发者可以使⽤JDBC来访问⼀个ODBC数据源。
菜鸟学EJB(⼀)——第⼀个实例EJB⽤了那么长时间了,从来没写过关于它的东西,挺对不住它的。
今天先写⼀个简单的⼩实例,虽然⼩但是却能体现出EJB的核⼼——分布式。
我们可以将业务逻辑的接⼝跟实现部署到⼀台机器上,将调⽤它们的客户端部署到另⼀台机器上。
⾄于为什么要⽤分布式,今天不做讨论,以后再细说。
先来看接⼝:package com.tjb.ejb;public interface MyEjb {String helloEjb ();}接下来是对接⼝的具体实现:package com.tjb.ejb;import javax.ejb.Remote;import javax.ejb.Stateless;import javax.jws.WebMethod;import javax.jws.WebService;@Stateless@Remote@WebServicepublic class MyEjbBean implements MyEjb {public String helloEjb() {return "Hello EJB";}}然后编写⼀个客户端来通过接⼝调⽤我们的实现:package com.tgb.ejb;import javax.naming.InitialContext;import javax.naming.NamingException;import com.tjb.ejb.MyEjb;public class MyEjbClient {public static void main(String[] args) throws NamingException {InitialContext ctx = new InitialContext();MyEjb ejb = (MyEjb) ctx.lookup("MyEjbBean/remote");String hello = ejb.helloEjb();System.out.println(hello);}}客户端实例化⼀个上下⽂对象,然后通过其lookup⽅法查找远程实现,最后调⽤具体的⽅法。
Ejb技术1、weblogic的热发布将ear、jar、war拷到C:\bea\user_projects\domains\mydomain\applications 目录weblogic会自动发布通过jbuilder将ear或jar或war部署到服务器上。
2、在ejb中实现one-to-many1、在many中的将外键字段属性删除2、在删除many中的值时要将Collection转化为ArrayList,并反向遍历ArrayList,先删除ArrayList中值,根据ArrayList删除反回的对象转化为many的远程接口,通过远程接口将many删除3、ejb所用的技术:Jndi:java naming directory inferfaceRmi:remote method invoke4、实现ejb几个接口,几个类?两个接口一个类extends EJBHome通过jndi得到home接口create方法调用服务端的ejbCreate方法,在服务端产生一个EntityBean或SessionBean实例,向客户端返回一个远程接口。
通过find方法在从服务端找到一个EntityBean实例,向客户端返回一个远程接口。
extends EJBObject在客户端通过rmi调用远程服务端方法。
通过remove方法调用服务端的ejbRemove方法,将EnityBean删除implements SessionBean在服务端实现真正的处理,实现核心业务5、实现ejb相关的配置文件是什么?ejb-jar.xml:说明ejb的两个接口一个类的。
weblogic-ejb-jar.xml:说明ejb的JNDI名weblogic-rdbms-ejb.xml:o-rMapping实现数据库表、字段与ejb属性对应的关系。
ejb2.0的开发1、用jbuilder集成环境2、可以用eclipse开发,用源代码注释说明,用ant执行xdoclet,xdoclet通过源代码注释自动生相关的配置、两个接口一个类。
EJB3.0开发平台安装 and开发原理(1). 《EJB3.0开发平台配置》第一步:开发平台的搭建1、下载与安装JDK2、下载与安装Eclipse3、下载与安装JBoss第二步:运行Eclipse,新建一个普通的Java项目:4、菜单操作路径:File-New-Projcet;5、进入新建项目向导窗口,选择Java-Java Project;6、点击next,输入Project name:HelloStudy(名字可以任意取),再按Finish;7、在项目名称上面按右建选择Properties;8、单击左窗格中的Java Build Path;文件,再点击打开;择javaee.jar,再点击打开,再点击OK;11、菜单操作路径:File-New-Class12、分别输入package:com.foshanshop.ejb3,以及Name:HelloWorld后,点击Finish;的HelloWorld.java,打开该文件,按照书上的内容输入代码;14、菜单操作路径:File-New-Class15、分别输入package:com.foshanshop.ejb3.impl,以及Name:HelloWorldBean后,点击Finish;16、双击左侧框HelloStudy项目下的com.foshanshop.ejb3.impl,再双击com.foshanshop.ejb3.impl下面的HelloWorldBean.java,打开该文件,按照书上的内容输入代码;17、在HelloStudy项目上右击,选择Export,在弹出的Export对话框中选择JAR file;18、单击Next按钮,在弹出的JAR Export对话框的select the resources to export(选择要导出的资源)列表框中展开你的项目并选择需要打包的文件。
然后选择一个存放目录及文件夹名,单击Finish按钮结束打包;第七步:当项目打包成jar文件后,将它发布到Jboss:19、发布前先检查JBoss是否已经启动,如果没有启动,打开DOS命令符窗口,进入“JBoss安装目录/bin”,运行run.bat启动JBoss。
J2EE EJB入门一、状态(Session)EJB的应用1、状态EJB的分类状态EJB分为非会话状态EJB和会话状态两种(1)非会话状态EJB,不保存用户状态,不为用户建立独立的线程.(2)会话状态EJB,保存用户状态,为用户建立独立的线程.会话状态EJB与非会话状态EJB的互相转换很简单,在Jbuilder的EJB设计器中将Session Type设为Stateless或者Stateful便可.2、状态EJB的生命周期(1)非会话状态EJB的生命周期当客户端访问非会话状态EJB时,非会话状态EJB的setSessionContext()方法和ejbCreate()方法被激活,然后非会话状态EJB保留在EJB容器内,等待用户的访问。
EJB一但被用户创建便保留在服务器内,它的生命周期一直到服务器发出关闭指令才结束。
(2)会话状态EJB生命周期当一个客户端的程序EJB时,EJB的生命开始,SetSessionContex方法和ejbjCreate方法被激活,会话状态EJB的方法可以被事务处理方法和非事务处理方法访问,当客户端结束运行时,该EJB也结束运行。
会话状态EJB比非会话状态EJB多了一个状态,EJB可以处在不激活状态,并且会话状态EJB使用ejbPassivate方法和ejbActivate方法3、两种状态EJB的比较非会话状态EJB不会为客户创建独立的进程,它一旦创建便保留在服务器内,每个客户都是使用一个EJB对象;会话状态EJB为客户创建独立的进程,每个客户使用不同的EJB对象,需要使用remove方法删除服务器上的EJB对象.在实际项目中利用不同状态EJB实现不同的效果,如电子商城的公布板的信息对每个用户都是相同的,可以使用非会话状态EJB;如电子商城的购物车对每个用户是不同的,可以使用会话状态EJB。
我们也可以将一些耗时的处理过程放入非会话状态EJB共享。
二、全局(Entity)EJB的应用1、全居EJB的作用(1)可以和数据库的数据结合操作,全局EJB提供各种数据操作的方法。
目录1.1通过代码示例跟我学J2EE JSP组件技术及应用实例(第1部分) (2)1.1.1构建本实例的开发环境——安装JDK和Tomcat服务器 (2)1.1.2构建本实例的开发环境——安装MyEclipse开发工具 (8)1.1通过代码示例跟我学J2EE JSP组件技术及应用实例(第1部分)1.1.1构建本实例的开发环境——安装JDK和Tomcat服务器1、安装JDK和配置JDK——如果已经安装过,则不再需要重复。
2、安装Tomcat服务器和熟悉了解Tomcat的各种工作目录Tomcat是一款开源免费的JSP服务器,可以在 / 下载并安装Tomcat 6 或者7。
建议下载压缩包版本而不是Windows Service Installer 的EXE 安装文件。
解压缩到磁盘目录, 并记下安装的目录路径。
(1)安装Tomcat服务器(2)bin目录进入Tomcat 安装目录下的bin 子目录,可以看到startup.bat 和shutdown.bat。
(3)webapps(4)work目录3、配置Tomcat服务器对于设置Windows的系统环境变量,可以打开控制面板中的“系统”程序;在“系统环境变量”中增加两个环境变量项目JAVA_HOME(最好为大写)指向JDK的目录和TOMCAT_HOME (最好为大写)指向所安装的tomcat的目录。
(1)JAVA_HOME值注意不要以“;”结束。
(2)TOMCAT_HOME(或者:CATALINA_HOME)值注意不要以“;”结束。
(3)Path路径的设置4、启动Tomcat服务器(1)启动Tomcat服务器:执行在Bin目录下的名为startup.bat的脚本文件可以启动Tomcat 服务器现在可以运行TOMCAT并作为一个独立的Servlet容器。
当看到出现信息: Server startup in XXXX ms 的输出后,Tomcat 就启动完毕了。
EJB学习⽂档1.Enterprice JavaBeans是⼀个⽤于分布式业务运⽤的标准服务端组件模型。
采⽤EnterpriceJavaBeans架构编写的运⽤是可伸展的,事务性的,多⽤户安全的。
采⽤ejb编写的这些运⽤,可以部署在任何⽀持Enterprice JavaBeans规范的服务器平台,如果Jboss,weblogic 等。
2.EJB是⽤来⼲什么的?EJB实际上是⽤于编写业务层代码。
3.EJB的分布式特点:运⽤1,如⽹上商城4.如果启动jbass时出现这样的错误:”findstr不是内部或外部命令,也不是可运⾏的程序或批处理⽂件”。
那么应该在系统变量path中追加”%SystemRoot%\system32;%SystemRoot%”5.EJB中的三种bean①会话bean(session bean):分为⽆状态会话bean和有状态会话bean负责与客户端交互,是编写业务逻辑的地⽅,在会话bean中可以通过jdbc直接操作数据库,但⼤多数情况下都是通过实体bean来完成对数据库的操作。
⽆状态会话bean:⼀个bean实例可供多个⽤户使⽤,⽆法正确保存某个⽤户设置的值。
有状态会话bean:⼀个bean实例只能供⼀个⽤户使⽤,⽤户设置的值是不会被修改,可以正确保存⽤户设置的值,因此是有状态。
不过开销⽐较⼤。
②实体bean(entity bean)它实际上属于java持久化规范(简称JPA)⾥的技术,JPA的出现主要是为了简化现有的持久化开发⼯作和整合ORM技术,结束现在Hibernate,Toplink等ORM架构各⾃为营的局⾯。
③消息驱动bean(message-driven bean)它是专门⽤于异步处理java消息的组件,具有处理⼤量并发消息的能⼒。
6.开发EJB依赖的jar⽂件:可以在jboss安装路径下的client⽬录下找到,通常会把client⽬录下的所有jar⽂件添加到项⽬的类路径下。
J2EE体系介绍一、J2EE定义J2EE(Java 2 Platform, Enterprise Edition)是Java技术的一个扩展,它为构建企业级应用程序提供了一套完整的开发框架。
这个框架为应用程序的开发、部署和管理提供了丰富的服务,使开发人员能够更快速、更有效地构建企业级应用程序。
J2EE的出现,使得基于Java技术的企业级应用程序的开发更加标准化和规范化。
二、J2EE组件J2EE组件是构成企业级应用程序的基本单元,它们可以一起工作,为企业级应用程序提供强大的功能。
以下是一些主要的J2EE组件:1.应用程序客户端组件:这些组件是运行在客户端机器上的Java应用程序,它们通常用于与服务器交互以获取或提交数据。
2.Web组件:Web组件包括Java Server Pages (JSP) 和Servlet,它们用于创建动态Web内容。
3.EJB(Enterprise JavaBeans)组件:EJB是运行在J2EE服务器上的Java对象,它们代表了企业级应用程序的核心业务逻辑。
EJB可以分为Session Beans、Message-driven Beans和Entity Beans。
4.消息传递组件:这些组件用于实现异步通信,使应用程序能够处理基于消息的通信协议,如Java Message Service (JMS)。
5.事务管理组件:这些组件用于管理事务,确保数据的完整性和一致性。
6.安全和认证组件:这些组件用于提供安全性和认证功能,保护应用程序免受恶意攻击和数据泄露。
7.管理和监视组件:这些组件用于监视和管理应用程序的性能和安全性。
三、J2EE服务J2EE提供了以下服务来支持企业级应用程序的开发和部署:1.事务管理服务:事务管理服务确保数据的一致性和完整性。
在J2EE中,可以使用分布式事务管理服务来控制和管理分布式事务。
2.安全服务:J2EE提供了安全服务,以确保应用程序的安全性。
这些服务包括用户身份验证、授权和访问控制等功能。
J2EE开发技术什么是J2EE开发技术J2EE(Java Enterprise Edition)是一种基于Java语言的用于开发企业级应用程序的技术平台。
它提供了一组标准规范和API,用于开发和部署分布式、可移植、可扩展和安全的企业应用。
J2EE的组成部分J2EE平台由多个组件组成,每个组件都有自己的功能和职责,它们一起构成了一个完整的企业应用程序。
以下是J2EE平台的主要组件:ServletsServlets是运行在Web服务器上的Java类,它们用于处理HTTP请求和响应。
Servlets可以用于生成动态的Web页面,处理表单数据,访问数据库,实现用户认证等功能。
JavaServer Pages (JSP)JSP是一种用于创建动态Web页面的技术。
它允许Java代码与HTML标记混合在一起,以实现动态内容。
JSP文件在服务器上被编译为Servlets,然后由Web服务器执行。
Enterprise JavaBeans (EJB)EJB是一种用于开发分布式企业应用程序的组件模型。
它提供了一种面向对象的方式来编写服务器端的业务逻辑。
EJB可以管理事务处理、安全性、并发性和持久性等方面的细节。
Java Message Service (JMS)JMS是一种用于在分布式应用程序之间发送消息的API。
它提供了一种可靠和异步的通信机制,可以用于构建高可用性和可扩展性的分布式系统。
Java Database Connectivity (JDBC)JDBC是Java编程语言使用关系型数据库的标准API。
它提供了一组类和接口,用于执行数据库查询、插入、更新和删除操作等。
Java Naming and Directory Interface (JNDI)JNDI是一种用于在分布式系统中查找和访问对象的API。
它提供了一种统一的方式来管理分布式应用程序中的资源,如数据库连接池、消息队列等。
J2EE开发工具和框架为了加快开发过程并提高代码质量,开发人员通常会使用各种工具和框架来支持J2EE开发。
EJB是什么呢?EJB是一个J2EE体系中的组件.再简单的说它是一个能够远程调用的javaBean.它同普通的javaBean有两点不同.第一点,就是远程调用.第二点,就是事务的功能,我们在EJB中声明的事务会通过容器帮助我们来处理.回过来我们继续说这个EJB的原理.它是分布式的.这个的意思其实很简单不需要想太复杂.就是我们把事情不是交给一个人去处理.而是把事情划分一下交给多个人处理,而多个人处理之后我们让这个分配的人来把最后得到的结合处理.EJB我们首先要明确它是放在服务器端的组件.一共有三种EJB1,SessionBean 复杂处理业务逻辑的.2,EntityBean 处理数据3,MessageBean 消息Bean异步,耦合的处理.那么谁能调用EJB呢?也或者说EJB被谁调用呢?我们说它就是放在server的一个能够远程调用的javaBean.所以它可以被Java的语言调用servlet,jsp等都ok的说.而且它还可以被C++语言调用.很强大吧.EJB的最基本的出发点就是推动Java在服务器端的编程能力.所以呢它的功能就我个人来看太强悍了..= =这个远程调用是通过什么呢.Java是通过RMI-JRMP(java远程方法调用)协议来调用.EJB就是通过这个来实现的.C++是通过Corba-iiop协议来调用的.这个协议支持两端不同语言的调用.Corba是公共对象请求代理服务iiop是网络内部对象协议.下面我们来简单说一下这个分布式的调用。
客户端发送一个请求给服务器首先是传给stub代理类它发送参数给skeleton委托类然后这个类调用我们的实现类取得结果再远路返回。
这样一个分布处理就结束了。
后面会具体的结合代码分析。
先记住这个大致的结构就好。
我们写一个EJB需要做那些工作呢?1,写一个接口继承EJBObject 这个类作为远程接口2,写一个接口继承EJBHome 这个类里有一个方法是create()它返回接口类型。
Java最初是在浏览器和客户端机器中粉墨登场的。
当时,很多人质疑它是否适合做服务器端的开发。
现在,随着对Java2平台企业版(J2EE)第三方支持的增多,Java被广泛接纳为开发企业级服务器端解决方案的首选平台之一。
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。
在本文中我将解释支撑J2EE的13种核心技术:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS,JTA, JavaMail 和JAF,同时还将描述在何时、何处需要使用这些技术。
当然,我还要介绍这些不同的技术之间是如何交互的。
此外,为了让您更好地感受J2EE的真实应用,我将在WebLogic应用服务器―来自BEA Systems公司的一种广为应用的产品―环境下来介绍这些技术。
不论对于WebLogic应用服务器和J2EE的新手,还是那些想了解J2EE能带来什么好处的项目管理者和系统分析员,相信本文一定很有参考价值。
宏观印象: 分布式结构和J2EE过去,二层化应用-- 通常被称为client/server应用-- 是大家谈论的最多的。
图1刻画了典型的二层化结构。
在很多情况下,服务器提供的唯一服务就是数据库服务。
在这种解决方案中,客户端程序负责数据访问、实现业务逻辑、用合适的样式显示结果、弹出预设的用户界面、接受用户输入等。
client/server结构通常在第一次部署的时候比较容易,但难于升级或改进,而且经常基于某种专有的协议―通常是某种数据库协议。
它使得重用业务逻辑和界面逻辑非常困难。
更重要的是,在Web时代,二层化应用通常不能体现出很好的伸缩性,因而很难适应Internet的要求。
图1. 二层化应用结构Sun设计J2EE的部分起因就是想解决二层化结构的缺陷。
于是,J2EE定义了一套标准来简化N层企业级应用的开发。
J2EE核心技术(13种)在企业级应用中,都有一些通用企业需求模块,如数据库连接,邮件服务,事务处理等.既然很多企业级应用都需要这些模块,一些大公司便开发了自己的通用模块服务,即中间件.这样一来,就避免了重复开发,开发周期长和代码可靠性差等问题.但是,各公司的中间件不兼容的问题就出现了,用户无法将它们组装在一起为自己服务.于是,"标准"就应运而生了.J2EE就是基于Java技术的一系列标准.J2EE是Java2平台企业版(Java 2Platform Enterprise Edition),核心是一组技术规范与指南,其中所包含的各类组件,服务架构和技术层次,都有共同的标准及规格,让各种依云J2EE架构的不同平台之间,存在良好的兼容性.1.JDBC(JavaDatabase Connectivity)JDBC是以统一方式访问数据库的API.它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracle数据库专门写一个程序,为访问Sybase数据库又专门写一个程序等等,只需要用JDBC API写一个程序就够了,它可以向相应数据库发送SQL调用.JDBC是Java应用程序与各种不同数据库之间进行对话的方法的机制.简单地说,它做了三件事:与数据库建立连接--发送操作数据库的语句--处理结果.2.JNDI(JavaName and Directory Interface)JNDI是一组在Java应用中访问命名和目录服务的API.(命名服务将名称和对象联系起来,我们即可用名称访问对象.JNDI允许把名称同Java对象或资源关联起来,建立逻辑关联,而不必知道对象或资源的物理ID.)JNDI为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口,可访问的目录及服务如下表:利用JNDI的命名与服务功能可满足企业级API对命名与服务的访问,诸如EJB,JMS,JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务.JNDI和JDBC类似,都是构建在抽象层上.因为:它提供了标准的独立于命名系统的API,这些API构建在命名系统之上.这一层有助于将应用与实际数据源分离,因此不管是访问的LDAP,RMI还是DNS.也就是说,JNDI独立于目录服务的具体实现,只要有目录的服务提供接口或驱动,就可以使用目录.3.EJB(EnterpriseJavaBean)J2EE将业务逻辑从客户端软件中抽取出来,封装在一个组件中。
目录1.1利用J2sdkee1.3进行EJB的开发 (2)1.1.1EJB开发过程概述 (2)1.1.2打包生成*.ear文件的准备工作 (11)1.1.3设计和编写EJB部署文件 (22)1.1.4发布部署示例项目中相关的*.ear文件 (25)1.1.5执行EJB的客户程序 (27)1.1.6如何取消所部署的EJB组件 (30)1.1.7如何打开或者关闭J2EEApp应用程序 (31)1.1利用J2sdkee1.3进行EJB的开发1.1.1EJB开发过程概述1、EJB开发过程EJB开发基本上都遵循如下的六个步骤:1)编写构成Bean的各个类与接口的.java文件。
2)将.java文件编译为.class文件。
3)编写部署描述文件。
4)用Jar工具生成Ejb-jar(或者ear)文件。
5)配置EJB服务器,并启动EJB容器。
将Ejb-jar文件部署到容器中。
6)编程客户端的测试程序代码以访问EJB组件中所提供的业务方法每个步骤使用的工具不同,都会生成相应的阶段产品。
关于对开发过程的理解和掌握,大家会随着后面讨论的深入而逐渐加深。
2、启动Sun J2EE服务器:如果在前面已经启动了则不需要(1)设置环境变量set J2EE_HOME=C:\j2sdkee1.3;set JAVA_HOME=C:\j2sdk1.4.0;(2)启动J2EE 服务器J2ee -verbose 重定向所有日志输出到当前命令窗口J2ee -version 显示版本号J2ee -stop 停止j2ee服务器3、编程各个java文件并在JCreator中进行编译它们(1)为了能够在JCreate中能够编译EJB 组件的Java程序,应该首先在JCreator中引用j2sdkee1.3\lib下j2ee.jar包文件到JCreator的classpath设置中,这样才能够在JCreator中对EJB的各个接口和类的程序进行编译。
(2)分别编程EJB组件的各个类程序:下面以一个“美元”和“人民币”相互转换的实例来说明●编程设计REMOTE接口REMOTE接口主要负责定制商业方法(或者业务逻辑方法),并且必须从EJBObject 接口进行继承,在该接口中声明出各个业务方法,这些商业方法是由服务器端的企业组件实现的。
客户端通过该接口与EJB对象相互作用,EJB容器供应商实现该接口(由EJB容器生成的、实现了Remote接口的EJB对象将包含javax.ejb. EJBObject接口定义的所有方法)。
根据 Java接口的特性,在REMOTE接口中定义了的业务方法,则必须在BEAN的实现类中都实现它们。
//本接口需要引入的类或接口import javax.ejb.EJBObject;import java.rmi.RemoteException;public interface Converter extends EJBObject //(1)必须继承EJBObject { //(2)以下为定义业务逻辑方法,每种方法都应该声明RemoteException的异常抛出public double dollarToYen(double dollars) throws RemoteException;public double yenToEuro(double yen) throws RemoteException;}●编程设计Home接口HOME接口主要是用来规范容器相关的操作方法,它定义了允许远程客户创建、查找和删除EJB对象的各种方法(HOME接口对象是制造EJB对象的工厂),其中最主要的是定义创建方法(create())并且必须从EJBHome接口进行继承。
HOME接口允许客户端进行如下操作。
·创建一个EJB对象·删除一个EJB对象·为EJB Bean获取javax.ejb.EJBMetaData接口HOME主接口定义一个或多个初始化功能的create(...)方法,每个方法定义了一种创建会话对象的方式,并且与Bean的实现类中的ejbCreate ()方法右对应的关系(参数列表相同,但create ()方法返回为void,而在Home接口中的ejbCreate ()方法则返回为Remote接口类型的对象)。
create方法的参数用来初始化创建的会话对象的状态。
对于带参数的create方法主要是用来初始化创建的会话对象的状态,一般适用于有状态的会话Bean。
对于无状态的会话Bean,它本身不需维持自身的状态,所以不需要个性化的创建方法,即create方法是不带有参数的。
另外,无状态的SessionBean不能声明实例变量,每个方法只能操作方法传来的参数,如果需要在引用期间维持一些数据状态,以在其它方法中可以引用,则可以把Bean设计成有状态会话Bean。
//本接口需要引入的类或接口import java.io.Serializable;import java.rmi.RemoteException;import javax.ejb.CreateException;import javax.ejb.EJBHome;//(1)只需要开发人员给出一个主接口的定义,接口中方法的实现由容器来完成。
一般情况下,习惯将主接口的命名规则规定为<BeanName>Homepublic interface ConverterHome extends EJBHome{//(2)定义一个create()方法,用来获得一个实例Bean的引用,返回的对象类型是组件接口类Converter create() throws RemoteException, CreateException;}编程设计该EJB的Bean 程序:本例为一个Session Bean并且为无状态类型。
一个Session Bean代表了与客户的一个对话, 一旦服务器或客户崩溃, Session Beans 就不存在了。
在该Session Bean中实现自己的业务逻辑方法,并且必须实现SessionBean 接口。
//本类需要引入的类或接口import java.rmi.RemoteException;import javax.ejb.SessionBean;import javax.ejb.SessionContext;public class ConverterBean implements SessionBean //(1)必须实现SessionBean 接口{private SessionContext sessionContext; //由于是个会话EJB,因此声明会话上下文//(2)以下为供客户端调用的业务逻辑方法public double dollarToYen(double dollars){return dollars * 121.6000;}public double yenToEuro(double yen){return yen * 0.0077;}public ConverterBean(){}//(3)以下为接口SessionBean中定义的各个生命周期方法,在本程序中必须实现public void ejbCreate() // HOME中声明的create方法的影射实现{}public void ejbRemove(){}public void ejbActivate(){ejbActivate()方法不适用于无状态会话Bean,因此,这个方法是空的。
}public void ejbPassivate(){ejbPassivate()方法不适用于无状态会话Bean,因此,这个方法是空的。
}public void setSessionContext(SessionContext sc){ sessionContext =sc;//保存上下文环境,以便与容器进行交互。
EJB容器将所有的状态信息存放在一个对象中,这个对象称为//EJB Context对象。
容器通过调用setSessionContext将Bean和Context关联。
}}(3)编程使用该EJB组件的客户端程序,其主要步骤为:●定位本地接口Context initial = new InitialContext(); //创建JNDI命名上下文Object objref = initial.lookup("MyConverter"); //查找与JNDI命名为MyConverter绑定的对象//造型指向ConverterHome对象的引用为目标类型ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objref, ConverterHome.class);●创建企业组件(EJB)客户端通过调用本地接口ConverterHome对象的create方法创建ConverterBean类对象,create 方法返回组件Converter类型的对象。
然后,远程方法定义的在ConverterBean实现的商业方法可以被客户端调用。
当客户端调用create 方法时,EJB容器将实例化ConverterBean对象,然后调用ConverterBean.ejbCreate 方法。
Converter currencyConverter = home.create();●调用商业方法客户调用Converter对象的方法,EJB容器将相应的调用运行在J2EE服务器中的ConverterBean类对象实例中的对应的方法。
double amount = currencyConverter.dollarToYen(100.00);(4)编程使用该EJB组件的客户端程序所应该注意的问题●在下面的客户程序中的InitialContext类的对象主要用来获取当前客户应用程序的上下文环境,而方法lookup从组件池中根据部署组件时的JNDI名来查找一个JNDI对象,并取得一个EJB Home主接口的对象的引用。
然后通过Home主接口对象中的create()方法创建出远程的EJB对象并获得对它的引用。
要注意的是:lookup()方法返回的是一个Object类型的远程主接口对象的存根,为此需要使用javax.rmi.PortableRemoteObject的narrow()方法来获取一个具体的对象引用。
●narrow()方法:第一个参数是lookup()方法返回的对象,第二个参数是要得到的引用类型。
我们通过narrow()方法并经过造型得到了一个具体的对象实例引用,然后再调用create()方法获取一个具体组件接口的实例引用,然后就可以与本地一样去引用这个实例。