同一個目標,同一個夢想

          One Target,One Dream
          posts - 25, comments - 11, trackbacks - 0, articles - 37

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          專業

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          EJB入門文章

          Posted on 2008-11-01 02:58 J2EE Home工作室 閱讀(122) 評論(0)  編輯  收藏 所屬分類: EJB

          一.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接口:sailorsyRemoteimport 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.

          主站蜘蛛池模板: 从化市| 平果县| 百色市| 黄浦区| 正镶白旗| 丰顺县| 五常市| 永德县| 大兴区| 来宾市| 文化| 金湖县| 招远市| 凌云县| 库尔勒市| 阳城县| 宝山区| 方正县| 化德县| 厦门市| 建瓯市| 广饶县| 凌源市| 芜湖市| 大埔区| 两当县| 子洲县| 博客| 潮安县| 普兰店市| 荃湾区| 綦江县| 获嘉县| 屏东市| 青神县| 进贤县| 东方市| 托里县| 龙口市| 通海县| 托克托县|