程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 建立你的第一個無狀態會話Bean--HelloWorld之一

建立你的第一個無狀態會話Bean--HelloWorld之一

編輯:J2EE

企業JavaBeansTM學習指南:
建立你的第一個無狀態(stateless)會話Bean


  • 關於本學習指南

  • 關於示例

    • 步驟1: 安裝企業JavaBeans 服務器
    • 步驟2: 指定企業JavaBeans 遠程界面
    • 步驟3: 指定宿主界面
    • 步驟4: 編寫企業JavaBean 類
    • 步驟5: 創建ejb-jar 文件
    • 步驟6: 配置DemoBean企業JavaBeans
    • 步驟7: 編寫企業JavaBean 客戶程序
    • 步驟8: 運行客戶程序


3. 如何建立你的第一個無狀態(stateless)會話Bean



步驟 1: 安裝企業 JavaBeans服務器

企業JavaBeans 組件在企業JavaBeans 容器內運行,後者是由企業JavaBeans 服務器廠商提供的。下面的說明將有助於你下載並安裝一個BEA Weblogic Tengah 服務器,HelloWord Bean 將運行在該服務器上。

注意:以下的安裝步驟是為 Sun Solaris 提供的, 但它與在 Windows NT 上的安裝過程類似。

1)從 BEA WebLogic 的網址下載 BEA WebLogic's Tengah 服務器: http://www.weblogic.com/download.Html

2)使用 jar 或 unzip 解壓縮。在本書中,假定 Tengah 被安裝在 /export 目錄下, 例如, /export/weblogic.

3)從Java Development Kit for SolarisTM 的網址下載最新版Java開發工具包JDKTM : http://www.sun.com/solaris/Java

4)在服務器主機上設置你的類路徑(CLASSPATH):
添加 weblogic/classes 和 weblogic/lib/weblogicaux.jar到Java CLASSPATH上。確認 "." 或當前目錄也在CLASSPATH上。 在LD_LIBRARY_PATH 上添加weblogic/lib/solaris http://www.sun.com/solaris/Java 5)編輯 BEA WebLogic 的屬性文件 weblogic.propertIEs 設置系統口令, weblogic.passWord.system

6)用startTengah.sh 腳本啟動 Tengah 服務器.
在建立並配置示例 bean 之後, 要檢查企業 JavaBeans 的 bean 是否已被正確配置, 可通過服務器命令行窗口來檢查,或通過打開控制台以檢查在"分布式對象"下的"Enterprise JavaBeans Transaction Server",你將看到 DemoBean 已被配置,也可以監測它的活動。

步驟2: 指定企業JavaBeansTM 遠程界面

在這一部分,你將創建企業JavaBeans 遠程界面。
  • 請閱讀下面的解釋;
  • 將代碼樣本存儲到指定的文件裡。

遠程界面是企業 JavaBeans 的客戶端視圖,企業JavaBeans 開發人員的任務是:

用 JavaTM RMI 語法聲明該界面。生成該界面的代碼是企業JavaBeans的容器工具供應商的責任。

注意: 在這個界面中,對所能夠指定的內容有一定的限制。完整的限制清單,請參見Enterprise JavaBeans Specification(企業JavaBean規范)第16節。重要的一點是,所有使用的對象、參數、返回值和異常在"Java to IDL Mapping Specification(Java對IDL的映射規范)"中都應該是有效的類型。 為簡單的DemoBean編寫的遠程界面源程序如下:

 /**

  * Demo -- this is the "remote" interface of

  * our enterprise JavaBean, it

  * defines only one simple method called

  * demoSelect(). As this is meant to be

  * the simplest of examples demoSelect()

  * never goes to a database, it just

  * returns a string

  *

  * Note: The implementation of this interface is

  * provided by the container tools

  * but the demoSelect() method and any

  * other methods in this interface

  * will need to have equivalent

  * implementations in the demobean.java

  * which is supplIEd by the bean writer

  * ..i.e., you!

  */

  

  package ejb.demo;

  

  import java.rmi.RemoteException;

  import java.rmi.Remote;

  import Javax.ejb.*;

  

  public interface Demo extends EJBObject, Remote {

  

   // NB this simple example does not even do a

   // lookup in the database

  public String demoSelect() throws RemoteException;

  

  }

步驟3: 指定宿主界面 (Home Interface)

一個會話 bean 的宿主界面提供了一種機制,用這種機制,容器可以代表客戶端創建新的會話 bean。就象遠程界面一樣,宿主界面是由 bean 的開發人員用RMI語法聲明的,並同樣由容器供應商所提供的工具來實現。它基本上不需要程序員進行編碼----所要作的僅是聲明性的工作。

1) 閱讀如下宿主界面的有關描述並注意在代碼片段中的注釋。
2) 將示例源代碼存儲到指定文件,並進行下一步。

這裡是DemoBean EJB的源代碼:
  /**

   * DemoHome.java - This is the Home interface it must

   * extend javax.ejb.EJBHome and define one or more

   * create() methods for the bean.

   *

   * Note: The implementation of this interface is 

   * generated by the container tools. 

   */ 



   package ejb.demo;



   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 DemoHome extends EJBHome {



    public Demo create() throws CreateException, 

                                RemoteException;

   

   }

步驟4: 編寫企業JavaBeanTM

這一步將向你演示如何編寫應用程序代碼(事務邏輯)。到現在為止,你已經聲明了容器工具將為其生成代碼的界面,但是,這裡演示的是JavaBean的功能是如何編碼的。

關於此bean的實現值得注意的一點是,幾乎沒有什麼代碼需要你來編寫。大部分代碼都簡單地通過企業JavaBeans 規范來實現。很容易想見這裡有許多模板和工具,它們為你完成大部分實現工作。這與GUI beans 環境中所使用的工具的演變過程是相似的。

1)閱讀如下 DemoBean 代碼的描述並注意在示例代碼中的注釋,特別是那些在標題"Business Logic"下面的注釋。

2)將示例源代碼存儲到指定文件,並轉向下一步。

這裡是 DemoBean 企業JavaBeans DemoBean.Java 的源代碼:
    /**

    * DemoBean -- This is implemented by the EnterPrise

    * Bean author This class must extend

    * javax.ejb.SessionBean and implement

    * the methods in this interface as well as providing

    * the implementation of the business methods.

    *

    */

    package ejb.demo;

  

    import javax.ejb.*;

    import java.io.Serializable;

    import java.util.*;

    import java.rmi.*;

  

    public class DemoBean implements SessionBean {

     static final boolean verbose = true;

  

     private transient SessionContext ctx;

     private transient PropertIEs props;

  

     // Implement the methods in the SessionBean

     // interface

     public void ejbActivate() {

     if (verbose)

     System.out.println("ejbActivate called");

     }

  

     public void ejbRemove() {

     if (verbose)

     System.out.println("ejbRemove called");

     }

  

     public void ejbPassivate() {

     if (verbose)

     System.out.println("ejbPassivate called");

     }

  

    /**

     * Sets the session context.

     *

     * @param SessionContext

     */

     public void setSessionContext(SessionContext ctx) {    

     if (verbose)

     System.out.println("setSessionContext called");

     this.ctx = ctx;

     props = ctx.getEnvironment();

     }

    

     /**

     * This method corresponds to the create method in

     * the home interface DemoHome.Java. 

     * The parameter sets of the two methods are 

     * identical. When the clIEnt calls 

     * DemoHome.create(), the container allocates an 

     * instance of the EJBean and calls ejbCreate(). 

     */ 

     public void ejbCreate () {

     if (verbose)

     System.out.println("ejbCreate called");

     }

  

    /**

     * **** HERE IS THE BUSINESS LOGIC *****

     * Do the demoSelect() but don't even go to

     * the database in this eg but instead just

     * return a String.

     * The really BIG thing to notice here is that

     * this is the only code we have invented at all

     * the rest of the code has been declarations

     * or simply implementing methods which are

     * part of the EJB interfaces and in this example

     * are not even used.

     */

     public String demoSelect()

     throws RemoteException

     {

     return("hello world");

     }

  

}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved