Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>EJB技术>>ejb入门
ejb入门
2005-06-08   来源:未知  作者:sailorsy
一.Enterprise Beans
在EJB(Enterprise Java Beans)中定义了两种不同类别的Enterprise Bean :
        *会话 Bean (Session Bean)
        *实体Bean (Entity Bean)
1. 会话 Bean (Session Bean)
会话 Bean 是调用它的客户端代码要完成的工作。当客户端与服务器建立联系,那么一个会话 Bean 就建立起来了。根据会话 Bean 的状态不同有分为:
A. 状态会话 Bean (Stateful Session Bean)
B. 无状态会话 Bean (Stateless Session Bean)
1.1 状态会话 Bean (Stateful Session Bean)
   当客户机和服务器建立连接之后,状态会话 Bean (Stateful Session Bean) 将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话 Bean (Stateful Session Bean) 也就被销毁。
1.2无状态会话 Bean (Stateless Session Bean)
   当客户机和服务器建立连接之后,无状态会话 Bean (Stateless Session Bean)处理单一的用户请求或商务过程。无状态会话 Bean (Stateless Session Bean)不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话 Bean (Stateless Session Bean) 也宣告结束。
2. 实体Bean (Entity Bean)
    实体Bean (Entity Bean)只是数据模型,它不包括商务逻辑。实体Bean (Entity Bean)可以将关系/对象数据库的数据映射到内存中供其它组件使用。实体Bean (Entity Bean)是一直存在的,而且具有很高的容错性能。实体Bean (Entity Bean)能供允许多用户同时访问。
二. 会话 Bean (Session Bean)
Ejb的执行过程是被放在一个EJB容器中进行的,所以客户端不会直接调用我们写好的Enterprise Bean ,而是调用EJB容器生成的一个EJBObject (EJB对象)来实现。那么,我们在编写服务器端的Enterprise Bean 时,就要考虑这点。既然客户端不能直接访问,就由EJBObject来代劳,所以在编写服务器端时,就要编写服务器端的一个接口(Remote)用来与客户机联系,实力化EJBObject。要生成EJBObject 就要调有Home 接口,来建立这个实力。






                                   图一
以下是会话 Bean 的代码分析:
A.Enterprise Bean 类:sailorsy.class
1.setSessionContext(SessionContext ctx)方法
它是EJB容器和Enterprise Bean互相作用的关口。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx){
this.ctx=ctx;
}//setSessionContext
}//class sailorsy
2.ejbCreate(…)方法
   它可以初始化Enterprise Bean ,可以定义不同的ejbCreate(…)方法,每个方法所带的参数不同。但是,必许要存在至少一种。
  import java.rmi.*;
  import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx){
this.ctx=ctx;
}//setSessionContext
        public void ejbCreate() {
        }//ejbCreate
}//class sailorsy
3.ejbPassivate()方法
 如果初始化的Enterprise Bean 过多,EJB容器将其中的一些挂起(passivate),释放他们所占用的空间。
  import java.rmi.*;
  import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;

public voic setSessionContext(SessionContext ctx){
this.ctx=ctx;
}//setSessionContext

        public void ejbCreate() {
        }//ejbCreate
        public void ejbPassivate() {
        }//ejbPassivate

}//class sailorsy
4.ejbActivate()方法
和ejbPassivate正好相反,它将被挂起的Bean从新调回。
import java.rmi.*;
  import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;

public voic setSessionContext(SessionContext ctx){
this.ctx=ctx;
}//setSessionContext

        public void ejbCreate() {
        }//ejbCreate
        public void ejbPassivate() {
        }//ejbPassivate
        
        public void ejbActivate() {
        }//ejbActivate

}//class sailorsy
5.ejbRemove()方法
它可以清除EJB容器中的Bean。
  import java.rmi.*;
  import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;

public voic setSessionContext(SessionContext ctx){
this.ctx=ctx;
}//setSessionContext

        public void ejbCreate() {
        }//ejbCreate

        public void ejbPassivate() {
        }//ejbPassivate
        
        public void ejbActivate() {
        }//ejbActivate

        public void ejbRemove() {
        }//ejbRemove
       
         public String showname(){
          return "Hello,my name is sailorsy";
        }//自己的商务方法
}//class sailorsy
以上这些是EJB必需的回调方法,我们可以在里面加入自己的方法,加入自己的商务逻辑。
B.Home 接口: sailorsyHome
   import java.rmi.*;
import javax.ejb.*;

public interface sailorsyHome extends EJBHome {
  public sailorsyRemote create() throws RemoteException, CreateException;
}
C. Remote接口:sailorsyRemote
import java.rmi.*;
import javax.ejb.*;

public interface sailorsyRemote extends EJBObject {
  public java.lang.String showname() throws RemoteException;
}
三.调用会话 Bean:sailorsyTestClient1 
        import javax.naming.*;
import javax.ejb.*;
import javax.rmi.PortableRemoteObject;
import java.rmi.*;

public class sailorsyTestClient1 {
  private sailorsyHome sailorsyHomeObject = null;

  //Construct the EJB test client
  public sailorsyTestClient1() {
    try {
      //以下是客户端使用JNDI定位Home对象。
      Context ctx = new InitialContext();

      //look up jndi name
      Object ref = ctx.lookup("sailorsy");

      //cast to Home interface
      sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class);

    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  //----------------------------------------------------------------------------
  // Utility Methods
  //----------------------------------------------------------------------------

  public sailorsyHome getHome() {
    return sailorsyHomeObject;
  }
  //Main method

  public static void main(String[] args) throws Exception{
    sailorsyTestClient1 client = new sailorsyTestClient1();
    sailorsyRemote sr=client.getHome() .create() ;
    String s=sr.showname() ;
    System.out.print(s);
    // Use the getHome() method of the client object to call Home interface
    // methods that will return a Remote interface reference.  Then
    // use that Remote interface reference to access the EJB.
  }
}
以上的EJB在win2000+jbuilder5/jbuilder6+BAS4.5经过测试。













                                          图二
以下是整个EJB的执行过程:
1. 客户端通过JNDI检索Home对象的引用;
2. JNDI返回Home对象的引用;
3. 请求创建一个新的EJB对象;
4. 创建EJB对象;
5. 返回EJB对象;
6. 调用商务方法;
7. 调用Enterprise Bean.
  --相关文章--
· 配置WebLogic Server集群二(组图) (2007-04-17)
· 配置WebLogic Server集群一(组图) (2007-04-17)
· 程序员应用EJB 3.0必要的准备 (2007-04-17)
· 用EJB 3.0开发企业级Bean组件初体验 (2007-04-17)
· 漫谈EJB在Java中的应用 (2007-04-17)
· 深入探究EJB应用技术的体系结构 (2007-04-17)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接