從制造到創造
          軟件工程師成長之路
          posts - 292,  comments - 96,  trackbacks - 0

          1、安裝Weblogic:
                使用的EJB服務是BEA的weblogic8.1,下載BEA的weblogic8.1,然后安裝。安裝步驟省略?! ?br /> 2、定義EJB遠程接口(Remote Interface):
                 任何一個EJB都是通過Remote Interface被調用,EJB開發者首先要在Remote Interface中定義這個EJB可以被外界調用的所有方法。執行Remote Interface的類由EJB生成工具生成。
            以下是HelloBean的Remote Inteface程序:
          package com.leo;
          import java.rmi.RemoteException;
          import java.rmi.Remote;
          import javax.ejb.*;
          public interface Hello extends EJBObject, Remote {
          //this method just get "Hello EJB" from HelloEJB.
          public String getHello() throws RemoteException;
          }
          3、定義Home Interface
          EJB容器通過EJB的Home Interface來創建EJB實例,和Remote Interface一樣,執行Home Interface的類由EJB生成工具生成。以下是HelloEJB 的Home Interface程序:
          package com.leo;
          import javax.ejb.*;
          import java.rmi.Remote;
          import java.rmi.RemoteException;
          import java.util.*;
          /**
          * This interface is extremely simple it declares only
          * one create method.
          */
          public interface HelloHome extends EJBHome {
          public Hello create() throws CreateException,
          RemoteException;
          }
          4、寫EJB類
          在EJB類中,編程者必須給出在Remote Interface中定義的遠程方法的具體實現。EJB類中還包括一些 EJB規范中定義的必須實現的方法,這些方法都有比較統一的實現模版,編程者只需花費精力在具體業務方法的實現上。
          以下是HelloEJB的代碼:
          package com.leo;
          import javax.ejb.*;
          public class HelloEJB implements SessionBean{
              public void ejbCreate(){}
              public void ejbRemove(){}
              public void ejbActivate(){}
              public void ejbPassivate(){}
              public void setSessionContext(SessionContext ctx){}
              public String getHello() {
                   return new String("Hello,EJB");
              }
          }
          5、創建ejb-jar.xml文件
            ejb-jar.xml文件是EJB的部署描述文件,包含EJB的各種配置信息,如是有狀態Bean(Stateful Bean) 還是無狀態Bean(Stateless Bean),交易類型等。ejb-jar.xml文件的詳細信息請參閱EJB規范。以下是HelloBean的配置文件:
          <?xml version="1.0"?>
          <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.2//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_2.dtd">
          <ejb-jar>
          <enterprise-beans>
          <session>
          <ejb-name>Hello</ejb-name>
          <home>com.leo.HelloHome</home>
          <remote>com.leo.Hello</remote>
          <ejb-class>com.leo.HelloEJB</ejb-class>
          <session-type>Stateless</session-type>
          <transaction-type>Container</transaction-type>
          </session>
          </enterprise-beans>
          </ejb-jar>
           

          6、創建weblogic-ejb-jar.xml
           <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
          <weblogic-ejb-jar>
           <description><![CDATA[Generated by XDoclet]]></description>
             <weblogic-enterprise-bean>
                <ejb-name>Hello</ejb-name>
                <stateless-session-descriptor>
                </stateless-session-descriptor>
                <reference-descriptor>
                </reference-descriptor>
                <jndi-name>Hello</jndi-name>
                <local-jndi-name>HelloLocal</local-jndi-name>
             </weblogic-enterprise-bean>
          </weblogic-ejb-jar>
          7、部署和編譯
                    EJB的jar包是由class文件和描述文件組成,對于weblogic服務器來說還要增加weblogic-ejb-jar.xml描述文件。編譯Java源文并將編譯后class和ejb-jar.xml、weblogic-ejb-jar.xml打包到Hello.jar
          7.1:創建目錄build。
          7.2:在build下新建目錄META-INF,把文件ejb-jar.xml、weblogic-ejb-jar.xml拷到META-INF下。
          7.3:把編譯好的class文件拷到build目錄下(此時為com/leo/Hello.class,HelloEJB.class,HelloHome.class)。
          7.4:打包成jar文件: jar -cvf hello.jar *.* 。
          7.5:再將hello.jar文件部署到weblogic服務器中。
          8、寫客戶端調用程序
          您可以從Java Client,JSP,Servlet或別的EJB調用HelloBean。
          調用EJB有以下幾個步驟:
          通過JNDI(Java Naming Directory Interface)得到EJB Home Interface
          通過EJB Home Interface 創建EJB對象,并得到其Remote Interface
          通過Remote Interface調用EJB方法
          以下是一個從Java Client中調用HelloBean的例子:
          package ejb.hello;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import java.util.Hashtable;
          import javax.ejb.*;
          import java.rmi.RmoteException;
          /**
          * @author Copyright (c) 2000 by Apusic, Inc. All Rights Reserved.
          */
          public class HelloClient {
              public static void main(String args[]){
                  String url = "rmi://localhost:7100";
                    Context initCtx = null;
                    HelloHome hellohome = null;
                    try {
                            Hashtable env = new Hashtable();
                            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.apusic.jndi.InitialContextFactory");
                            env.put(Context.PROVIDER_URL, url);
                            initCtx = new InitialContext(env);
                    } catch(Exception e){
                            System.out.println("Cannot get initial context: " + e.getMessage());
                            System.exit(1);
                    }
                    try {
                            Object obj=ctx.lookup("Hello");
                            HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
                            Hello hello = hellohome.create();
                            String s = hello.getHello();
                            System.out.println(s);
                   }catch(Exception e){
                            System.out.println(e.getMessage());
                            System.exit(1);
                  }
              }
          }
            運行HelloClient,可得到以下輸出:
            Hello EJB

          posted on 2007-11-28 13:44 CoderDream 閱讀(2173) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(9)

          我參與的團隊

          隨筆分類(245)

          隨筆檔案(239)

          文章分類(3)

          文章檔案(3)

          收藏夾(576)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 458389
          • 排名 - 114

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 承德市| 辛集市| 肇东市| 四平市| 察隅县| 碌曲县| 建德市| 红河县| 万荣县| 盐山县| 林口县| 开化县| 温州市| 都昌县| 灌云县| 桐柏县| 乌海市| 深泽县| 武定县| 获嘉县| 凤城市| 固原市| 钟祥市| 斗六市| 乐山市| 梨树县| 威海市| 莎车县| 湘阴县| 金平| 什邡市| 玉环县| 攀枝花市| 陵川县| 平南县| 绵竹市| 麻栗坡县| 松桃| 敦煌市| 观塘区| 赫章县|