程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 循速漸進學用Session Bean(一)

循速漸進學用Session Bean(一)

編輯:關於JAVA

Session Bean的作用

Session Bean代表客戶應用和EJB容器之間的會話。Session Bean通常都是實現商業邏輯並且和entity bean交互以執行具體操作。不過session bean並不一定要使用entity bean。如果需要,它可以直接和數據庫通信。

一個"Hello World"Session Bean

Enterprise JavaBean的結構在開始的時候比較難理解,不過只要你用過一下,EJB也不是太難。幸運的是,你可以無需涉及數據庫連接或者是事務,就可以熟悉基本的EJB結構。要做到這一點,可以由最有名的"Hello World"bean開始。

當你在設計EJB應用的時候,你可能不知道是先由bean開始然後再創建接口,或者先由接口開始然後創建bean。我建議你最好由接口開始。因為如果你不知道客戶如何使用bean,你就無需編寫它。

創建Remote接口

列表6.1展示的是HelloWorldSession接口,它是"Hello World" session bean的Remote接口。

  Listing 6.1 Source Code for HelloWorldSession.java
package usingj2ee.hello;
  import java.rmi.*;
import javax.ejb.*;
  /** Defines the methods you can call on a HelloWorldSession object */
  public interface HelloWorldSession extends EJBObject
{
  /** Returns the session's greeting */
public String getGreeting() throws RemoteException;
  /** Changes the session's greeting */
public void setGreeting(String aGreeting) throws RemoteException;
  }

創建Home接口

一個session bean的Home接口包含有創建新session的方法。對於"Hello World"例子,有兩個不同的create方法,一個沒有參數,而另一個允許你提供自己的歡迎詞。列表6.2展示了HelloWorldSessionHome接口。

  Listing 6.2 Source Code for HelloWorldSessionHome.java
package usingj2ee.hello;
  import java.rmi.*;
import javax.ejb.*;
  /** Defines the methods for creating a HelloWorldSession */
  public interface HelloWorldSessionHome extends EJBHome
{
  /** Creates a HelloWorldSession bean with default settings */
public HelloWorldSession create() throws RemoteException, CreateException;
  /** Creates a HelloWorldSession bean with a specific initial greeting */
public HelloWorldSession create(String aGreeting)
throws RemoteException, CreateException;
  }

創建實現的類

接口是EJB開發中比較簡單的部分,而session bean還需要更多的工作。當你寫一個session bean時,有一些方法你必須包含在bean中以滿足EJB容器的要求。這些額外的方法是setSessionContext, ejbRemove, ejbActivate和 ejbPassivate。此外,當你實現你的create方法時,你需要將它們命名為ejbCreate而不只是create。

注意

要記住的是容器調用這些方法。當使用Home接口的方法來創建一個新的EJB時,容器最終會調用ejbCreate方法。同樣,當刪除一個bean時,容器將會調用ejbRemove方法來告訴bean它已經被移除。

列表6.3是HelloWorldSession和HelloWorldSessionHome接口的實現,你看一下就清楚了。

  Listing 6.3 Source Code for HelloWorldSessionImpl.ava
package usingj2ee.hello;
  import java.rmi.*;
import java.util.*;
import javax.ejb.*;
  /** The implementation class for the HelloWorldSession bean */
  public class HelloWorldSessionImpl implements SessionBean
{
/** Holds the session's greeting */
protected String greeting;
  /** The session context provided by the EJB container. A session bean must
hold on to the context it is given. */
  private SessionContext context;
  /** An EJB must have a public, parameterless constructor */
  public HelloWorldSessionImpl()
{
}
  /** Called by the EJB container to set this session's context */
  public void setSessionContext(SessionContext aContext)
{
context = aContext;
}
  /** Called by the EJB container when a client calls the create() method in
the Home interface */
  public void ejbCreate()
throws CreateException
{
greeting = "Hello World!";
}
  /** Called by the EJB container when a client calls the
create(String) method in the Home interface */
  public void ejbCreate(String aGreeting)
throws CreateException
{
greeting = aGreeting;
}
  /** Called by the EJB container to wake this session bean up after it
has been put to sleep with the ejbPassivate method. */
  public void ejbActivate()
{
}
  /** Called by the EJB container to tell this session bean that it is being
suspended from use (it's being put to sleep). */
  public void ejbPassivate()
{
}
  /** Called by the EJB container to tell this session bean that it has been
removed, either because the client invoked the remove() method or the
container has timed the session out. */
  public void ejbRemove()
{
}
  /** Returns the session's greeting */
  public String getGreeting()
{
return greeting;
}
  /** Changes the session's greeting */
  public void setGreeting(String aGreeting)
{
greeting = aGreeting;
}
}

你想做的全部工作就是建立一個帶有getGreeting和setGreeting方法的bean,你最終會得到兩個Java接口和一個有8個方法的類。Enterprise JavaBeans明顯需要更多的工作,對於小的項目來說,創建EJB的方法所要做的工作,和實現商業邏輯的方法的工作一樣多。不過,當應用增長時,將會發現在EJB上所做的額外工作是值得的,因為只有這樣做,混合對象以實現新的功能時就變得更加簡單。

集成開發環境(IDEs)對創建Enterprise JavaBeans提供一些支持。不幸的是,大多數提供這個功能的工具都是昂貴的"企業版"。Allaire (http://www.allaire.com)企業版本IDE的價格合理並且對EJB有著很好的支持。希望你不久後可找到一些免費的工具來創建EJB。

提示

由於在編寫EJB應用時你最終會產生很多的文件,因此對於產生的類使用一些一致的命名傳統是重要的。Remote和 Home接口都通常命令為XXX和XXXHome,XXX是bean的名字。實現的類通常命令為XXXBean或者XXXImpl。你還可以考慮根據這個bean是一個session bean還是一個entity bean,將實現的類命令為XXXEB或者XXXSB。不管你決定如何命名你的類,它們都必須是一致的,這樣在多人開發時會避免很多麻煩。

注意

這裡使用XXX代表Remote接口,XXXHome代表Home接口,而XXXImp1代表實現。該bean使用Remote接口名。如果Remote接口被稱為ShoppingCart,Home的接口就是ShoppingCartHome,實現就是ShoppingCartImp1,而且該bean被引用為ShoppingCart bean。

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