yanmin

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            16 隨筆 :: 1 文章 :: 9 評論 :: 0 Trackbacks
          最近狂多的面試,發現自己的基礎知識和理論都弱了很多,為了不誤人子弟,開始惡補:

          一.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)//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)//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)//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)//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)//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
             [code]    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)
             }
            
             //----------------------------------------------------------------------------
             // 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.
             }
            }[/code]
            
            以上的EJB在win2000+jbuilder5/jbuilder6+BAS4.5經過測試。
            
            以下是整個EJB的執行過程:
            1. 客戶端通過JNDI檢索Home對象的引用;
            2. JNDI返回Home對象的引用;
            3. 請求創建一個新的EJB對象;
            4. 創建EJB對象;
            5. 返回EJB對象;
            6. 調用商務方法;
            7. 調用Enterprise Bean.
          posted on 2007-10-19 15:57 yanmin 閱讀(189) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 汽车| 上思县| 万载县| 昌吉市| 荃湾区| 道真| 宜城市| 青海省| 九龙县| 抚顺县| 汉沽区| 忻州市| 武隆县| 博白县| 南岸区| 东丽区| 平罗县| 永登县| 洛浦县| 陇川县| 红原县| 临泉县| 哈尔滨市| 杭锦后旗| 景宁| 曲水县| 孙吴县| 白城市| 井研县| 乌兰察布市| 南汇区| 福泉市| 康平县| 孟州市| 布拖县| 乐都县| 沿河| 乌拉特前旗| 那坡县| 白朗县| 昌吉市|