城改春景花园户型图:EJB 笔记 -Chapter02 EJB开发流程

来源:百度文库 编辑:偶看新闻 时间:2024/05/11 01:14:32

Chapter02 EJB开发流程

一、开发EJB的步骤

第一大步:开发编译业务接口和Bean类

(1) 编写业务接口和Bean类

(2) 编译

第二大步:打包部署到JNDI服务器

(3) 提供部署描述文件

(4) 打包(编译后的字节码文件和部署描述文件)成ejb-jar

(5) 部署ejb-jar到容器

第三大步:测试

(6) 检测部署是否成功(看容器是否发现)

(7) 识别客户端程序来调用EJB

业务接口(Business Interface):

(1) 对客户端暴露可以调用的方法,它是一个普通的Java接口,POJO类,或POJI。

(2) 业务接口可以划分为两类:A、远程业务接口

              B、本地业务接口

如果客户端和EJB运行在同一个JVM中,我们应该用本地接口,否则只能用远程业务接口。

二、EJB的编程模型和编程涉及的标注

Bean类(The Bean Class):

(1) Bean类也是一个POJO,实现了业务接口中的方法

(2) 在Bean类中一般带有标注(Annotation),用于代替传统的部署描述文件

 @stateless 无状态(标注该类是一个无状态的会话Bean)

 @Remote(XXX.class)(标注该Bean类的业务接口是XXX.class)

(3) Bean类要有缺省的构造方法

(4) Bean类可以不实现业务接口(因为标注已经说明),不过建议实现

(5) ejb-jar.xml(Optional)标准的部署描述文件

  我们可以用EJB3.0中的标注来代替对描述文件的编写。

EJB3.0使用了JAVA SE 5.0 中的注释新特性,只要在方法上写EJB规范的注释,就可以不用来写标准的部署表述,ejb-jar.xml这个要放到jar文件的mate-inf文件夹里。

 

 

   HelloBean

   HelloBean

   test.HelloRemote

   test.HelloBean

   Stateless

   Container

   

       

   

 

 

EJB Client(客户端):

  (1)EJB不能够被客户端直接访问,客户端必须通过业务接口来调用EJB

  (2)EJB客户端分为两类:

    A、EJB客户端与EJB运行在同一个容器中→本地业务接口

    B、EJB客户端与EJB运行在不同的JVM中→远程业务接口

 

EJB 容器(EJB Container):

  (1)EJB容器是一个运行在JVM上的程序

  (2)EJB容器为EJB提供中间件服务。

 

EJB客户端的编程步骤:

1、运行客户端前要加上在SUN的服务器文件夹中的lib下的javaee.jar和appserv-rt.jar

Tips:Java Runtime相关的包:javaee.jar(Java EE),appserw-rt.jar(Java 运行时) ,appserv-ws.jar appserv-jwsacc.jar(Web Service)

2、配置系统的JNDI的环境(客户端所依赖的Object和Sun运行环境)

3、写测试类,注意在测试类中也要有业务接口

  Step1:设置JNDI服务器入口信息( system.setProperty)

  Step2:初始化上下文

  Step3:查找JNDI服务器的Stub

  Step4:调用对象

EJB调用过程:

  (1)EJB容器将Stub绑定到JNDI服务器上,JNDI上使用的绑定(默认情况下)是远程业务接口的全限定名。

  (2)客户端通过上下文(Context)的方法来查找JNDI服务器上绑定的Stub。

 

在厂商的部署描述中可以配置EJB的实例池,可以一次创建多个EJB的实例。

注意:EJB一定要先部署到服务器,EJB需要部署环境才能运行

EJB客户端

public class Cilent {

   public static void main(String[] args) throws NamingException {

 

       System.setProperty("jndi.factory","com.sun.jndi.cosnaming.CNCtxFactory");

       System.setProperty("jndi.provider.url","corbaloc::localhost:3007/NameSpace");

       Context ctx=new InitialContext();

       HelloRemote hello=(HelloRemote)ctx.lookup("test.HelloRemote");

       System.out.println(hello.hello());

       System.out.println(hello.helloword("lichen"));

    }

   

}

 

注意:在写客户端时,要引入javaee.jar和appser-rt.jar还要引入已经编译好的EJB的jar文件。