• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

        EJB內(nèi)部資參3

        EJB內(nèi)部資參3

        更新時(shí)間:2022-04-27 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        EJB開發(fā)概述
        1、EJB的開發(fā)
        先泛泛而論,講一講EJB的開發(fā)步驟。

        1.1 SessionBean的開發(fā)
        第一步, 寫遠(yuǎn)程接口(remote interface),
        繼承EJBObject接口,把需要調(diào)用的public方法寫在里面(這些方法將在SessionB
        ean中實(shí)現(xiàn)),注意要聲明throws java.rmi.RemoteException。
        例如:

        package jsper.ejb;



        import java.rmi.*;

        import javax.ejb.*;

        public interface MyEJB extends EJBObject
        {

        public String sayHello() throws java.rmi.RemoteException;

        }

        第二步, 寫Home接口(生成EJBObject引用的factory)
        至少生成一個(gè)create方法, 注意要聲明throws java.rmi.RemoteException和jav
        ax.ejb.CreateException。
        比如:



        package jsper.ejb;

        import java.rmi.*;
        import javax.ejb.*;


        public interface MyEJBHome extends EJBHome
        {



        MyEJB create() throws java.rmi.RemoteException, javax.ejb.CreateExcept
        ion;

        }

        第三步, 寫真正的Session Bean的實(shí)現(xiàn)(實(shí)現(xiàn)定義在遠(yuǎn)程接口中的方法), 需要
        實(shí)現(xiàn)javax.ejb.SessionBean接口
        注意:不能用implents MyEJB的方式直接實(shí)現(xiàn)遠(yuǎn)程接口,此處不用拋出RemoteExc
        eption
        package jsper.ejb;

        import java.rmi.RemoteException;
        import javax.ejb.*;
        public class MyEJBClass implements SessionBean {

         
         public MyEJBClass() {
         }
         //定義在SessionBean 中的方法
         public void ejbCreate() throws RemoteException, CreateException {
         }

         public void ejbActivate() throws RemoteException {
         }

         public void ejbPassivate() throws RemoteException {
         }

         public void ejbRemove() throws RemoteException {
         }

        public void setSessionContext(SessionContext ctx)
        throws RemoteException {

         }

         //此處是具體的實(shí)現(xiàn)

         public String sayHello()

         {

          System.out.println("Hello");
         }
        }
        第四步,寫一個(gè)發(fā)布用的配置文件ejb-jar.xml
        需要提供的信息:
        Bean Home name -- The nickname that clients use to lookup your bean's
        home object.
        Enterprise bean class name -- The fully qualified name of the enterpri
        se bean class.
          Home interface class name
          Remote interface class name
        Re-entrant -- Whether the enterprise bean allow re-entrant calls. This
        setting must be false for session beans(it applies to entity beans on
        ly)
          stateful or stateless
          Session timeout -- The length of time (in seconds) before a client
        should time out when calling methods on your bean.
        最后你還可以提供屬于自己的配置信息供自己控制EJB的工作方式。

        例子:





          
           
        helloEjb
        com.jsper.ejb.MyEJBHome
        com.jsper.ejb.MyEJB
        com.jsper.ejb.MyEJBClass
        Stateless
        Container
           
          
          
         

        第五步,將你的所有文件用jar工具生成jar文件

        ejb-jar.xml須在頂級(jí)的META-INF子目錄
        這句話比較咬嘴, 舉個(gè)例子

        mylib----META-INF--*.XML
        |
        |com--coucouniu--ejb---EJBClass
           |-EJBHome
           |-EJB
           
        在生成.jar文件時(shí)

        sh>cd mylib  //注意此處所在目錄
        sh>jar cv0f myejb.jar *

        請(qǐng)注意: 到這一步我們做出的東西都是和和特定的EJB Server是無(wú)關(guān)的, 只是
        和遵循EJB的標(biāo)準(zhǔn)有關(guān)



        第六步,使用特定平臺(tái)的發(fā)布工具生成發(fā)布使用的jar文件。
        不同的中間件產(chǎn)品此步驟非常不同, 產(chǎn)生的結(jié)果都是生成只有自己的EJB Serve
        r能理解的遠(yuǎn)程接口和Home接口實(shí)現(xiàn)等等東西,打包在一個(gè)jar文件中
        一般是很簡(jiǎn)單的
        第七步,把.jar文件發(fā)布到EJB Server

        根據(jù)不同的中間件產(chǎn)品此步驟非常不同, 可以分為啟動(dòng)時(shí)發(fā)布和運(yùn)行時(shí)發(fā)布兩種
        ,一般是很簡(jiǎn)單的, 以weblogic為例:
        1、在weblogic.properties 文件中配置使weblogic 啟動(dòng)時(shí)自動(dòng)裝載。
        添加一個(gè)條目比如:
        weblogic.ejb.deploy=C:/weblogic510/myserver/ejb_basic_beanManaged.jar,
        \
          C:/weblogic510/myserver/ejb_basic_test.jar
          
        2、使用deploy或DeployerTool動(dòng)態(tài)裝載/卸載/更新

        第八步,寫客戶端的程序(我迄今為止的理解)
        在我們使用發(fā)布工具把EJB發(fā)布到EJB Container的過(guò)程中,會(huì)綁定一個(gè)名字到Co
        ntainer的目錄服務(wù)中,現(xiàn)在我們要調(diào)用時(shí)從這個(gè)目錄服務(wù)中把EJBHome對(duì)象取出
        , 這里分為從本地和外部?jī)煞N情況:
        一種是客戶端本地調(diào)用EJB。 比如和EJB引擎和Servlet引擎是整合在同一個(gè)Appl
        ication Server中, 這時(shí)當(dāng)一個(gè)Servlet要調(diào)用EJB時(shí)無(wú)須驗(yàn)證,即可得到EJBHo
        me接口的實(shí)現(xiàn)
         Context ic = new InitialContext();
           System.out.println("Looking for the EJB published as 'hello'");

           com.jsper.ejb.MyEJBHome homeInterface = (com.jsper.ejb.MyEJBHome
        ) ic.lookup(“hello”); //發(fā)布時(shí)綁定的名字是hello
         這樣就可從目錄服務(wù)中得到Home接口的實(shí)現(xiàn), 也是我們最常用的方式, 可移
        植性很好

        外部調(diào)用的話首先要經(jīng)過(guò)身份驗(yàn)證,
        比如Oracle8i :

        String ejbUrl = "sess_iiop://localhost:2481:ORCL/test/MyEJB";
          String username = "scott";
          String password = "tiger";

          // Setup the environment
          Hashtable environment = new Hashtable();
          // Tell JNDI to speak sess_iiop
          environment.put(javax.naming.Context.URL_PKG_PREFIXES, "oracle.aur
        ora.jndi");
          // Tell sess_iiop who the user is
          environment.put(Context.SECURITY_PRINCIPAL, username);
          // Tell sess_iiop what the password is
          environment.put(Context.SECURITY_CREDENTIALS, password);
          // Tell sess_iiop to use credential authentication
        environment.put(Context.SECURITY_AUTHENTICATION, ServiceCtx.NON_SSL_LO
        GIN);
        // Lookup the URL
          com.jsper.ejb.MyEJBHome homeInterface = null;
          try {
           System.out.println("Creating an initial context");
           Context ic = new InitialContext(environment);
           System.out.println("Looking for the EJB published as 'test/MyEJB
        '");
           homeInterface = (com.jsper.ejb.MyEJBHome) ic.lookup(ejbUrl);
          }
          catch (ActivationException e) {
           System.out.println("Unable to activate : " + e.getMessage());
           e.printStackTrace();
           System.exit(1);
          }
        再比如weblogic的調(diào)用方式:
        try
        {
          // Get an InitialContext
          String url="t3://localhost:7001";
          Properties h = new Properties();
          h.put(Context.INITIAL_CONTEXT_FACTORY,
        "weblogic.jndi.WLInitialContextFactory");
          h.put(Context.PROVIDER_URL, url);

        Context ctx = new InitialContext(h);

          System.out.println("Getting the EJBHome object...");
           com.jsper.ejb.EJBHome tmp= (com.jsper.ejb.EJBHome)ctx.lookup("he
        llo");

        //create three element array of COUNT object
          EJB ejb =tmp.create();
          System.out.println(ejb.sayHello());
        }
        catch(Exception e)
        {
        e.printStackTrace();
        }
        由于和具體的目錄服務(wù)、協(xié)議相關(guān),為了達(dá)到可移植的目的,只好多做一些工作
        ,幸好一般不需要做這些工作。






        附圖

        EJB的調(diào)用模型


        Passivation of stateful session bean

        Activation of stateful session bean


        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 免费观看一区二区三区| 亚洲欧洲日产国产最新| 国产精品高清视亚洲一区二区| 免费人成在线观看视频高潮| 久久亚洲国产午夜精品理论片| 亚洲无人区午夜福利码高清完整版| 久久亚洲高清观看| 国产一级淫片a免费播放口| 国产成人A在线观看视频免费 | 久久青草免费91线频观看站街| 中文字幕亚洲日韩无线码| XXX2高清在线观看免费视频| 最近免费中文在线视频| 亚洲精品美女在线观看| 2021免费日韩视频网| 亚洲婷婷国产精品电影人久久| 久久精品国产精品亚洲毛片| 亚洲av综合日韩| 95免费观看体验区视频| 亚洲一级特黄无码片| 日韩电影免费在线观看网站| 亚洲视频在线观看免费| 无码专区永久免费AV网站| 亚洲成av人片天堂网| 中国人xxxxx69免费视频| 亚洲乱妇熟女爽到高潮的片| 亚洲国产a级视频| 国产成人精品免费久久久久| 亚洲六月丁香婷婷综合| 午夜免费啪视频在线观看| 亚洲a视频在线观看| 男人的天堂亚洲一区二区三区 | 性色av无码免费一区二区三区| 亚洲AV无码男人的天堂| 91麻豆国产自产在线观看亚洲| 99热精品在线免费观看| 色婷婷六月亚洲综合香蕉| 亚洲日韩精品无码一区二区三区 | 国产猛烈高潮尖叫视频免费| 一级毛片a免费播放王色 | 67194在线午夜亚洲|