麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

JBoss:有狀態會話Bean及其多種調用方法

2019-11-18 13:04:50
字體:
來源:轉載
供稿:網友

  一、有狀態會話 Bean 的開發和部署
  1、基礎知識
  
  在第一節中,我們給出了一個 HelloWorld 無狀態的會話 Bean ,在 EJB2.0 規范中, EJB 包括三種 Bean ,第一種便是會話 Bean(session Bean) ,然后還有實體 Bean(EntityBean) 和消息驅動 Bean 。
  
  會話 Bean 包括無狀態會話 Bean 和有狀態會話 Bean ,二者的主要區別是前者在執行的過程中不保存 Bean 的狀態信息,它沒有狀態域,也就是說:無狀態會話 Bean 就只是一個執行過程,我們調用它完成我們的任務而己,它在容器池中無法保存 Bean 狀態。而后者在容器中執行時會保存 Bean 的執行狀態,相對應的,有狀態會話 Bean 中也對應有狀態域,即會話 Bean 在執行的過程中會將與固定客戶端的會話狀態保存起來以備后用。
  
  然而,有狀態會話 Bean 它沒有主鍵類,客戶端無法查找出它對應的在容器池中的 EJBObject ,那么我們如何重用我們的 EJBObject 呢?在這篇文章中,我們提供了兩種方法,并給出了示例程序:
  
  第一種方法是采用有狀態會話 Bean 的 Handle( 句柄 ) ,為了取得句柄,可以調用 EJBObject 接口的 getHandle ()方法,返回一個 Handle 實例,為了重新構建對同一 EJBObject 的引用,可以使用 Handle 接口的 getEJBObject ()方法,此方法返回一個對應 Handle 的 EJB 對象,利用此對象,我們就可以重構出對應的 EJBObject ,如下示例:
  
  Count count = counthome.create();// 產生 Remote 接口對象
  
  javax.ejb.Handle handle = count.getHandle();// 獲得 Remote 接口的句柄
  
  …
  
  Object obj = handle.getEJBObject();// 得獲得 Handle 對應的在容器池中的 EJBObject 對象
  
  Count recount= (Count)PortableRemoteObject.narrow(obj,Count.class);
  
  // 將此對象重構為遠程接口對象即可重新調用它的方法
  
  第二種方法是采用有狀態會話 Bean 的 HomeHandle ,它類似 handle ,但不能用于引用 EJBObject 。 HomeHandle 包含足夠的信息,可以重建 EJBHome ()的引用。它的做法是調用 getHomeHandle ()方法 和 getEJBHome ()方法,此方法返回一個對應 Handle 的 EJBHome 對象,利用此對象,可以重新生成出對應的 EJBObject 對象,然后調用它的方法。如下示例:
  
  Content ctx = new InitialContext();
  
  Object h = ctx.lookup("CountHome");
  
  CountHome home = (CountHome)PortableRemoteObject.narrow(h, CountHome.class);
  
  HomeHandle homehandle = home.getHomeHandle();// 獲取 HomeHandle
  
  ....
  
  CountHome reHome = (CountHome)homeHandle.getEJBHome();
  
  Count recount = rehome.create();
  
  利用以上兩種方法,我們可以自動的存儲并重建引用所需的會話 Bean 中的 EJB 信息。
  
  好了,了解了以上知識,下面我們就來一個真實的會話 Bean 來看看它的運行方式!
  
  2、一個有狀態會話Bean的開發和部署
  
  開發一個會話 Bean ,基本的應遵守以下步聚,首先開發 Remote 接口,再編寫 Home 接口,然后是 Bean 本身。
  
  同時,為了區別,我們應默認遵守以下命名規則, Remote 接口直接用 xxx 命名, Home 接口用 xxxHome 命名, Bean 本身用 xxxBean 命名。
  
  首先,我們手動建立開發環境,在 C:/JBOSS 目錄(這里指 JBOSS 的安裝目錄,詳見上一節)下新建一個存放我們項目的目錄 myPRoject ,然后再在 myproject 下建一個存放此 Count 會話 Bean 的目錄 CounterStatefullSessionBean ,用來存放我們的這個 Bean 的所有相關文件。然后,再在 CounterStatefullSessionBean 目錄下建三個目錄: ejb 、 jsp 和 src 分別用來存放 ejb 類、 Web 應用文件( jsp 文件及 Servlet 類)和我們的源程序。
  
  接著,再在 EJB 目錄下建一個 client 目錄和一個 counter.jar 目錄分別用來存放 client 端測試程序和服務器端類。然后再在 client 和 counter.jar 目錄下同時各新建一個 counter 目錄, counter 目錄下再建一個 ejb 目錄,這是我們的包名。然后在 counter.jar 目錄下再建一個 META-INF 目錄,用于存放我們的 ejb 配置文件。
  
  接著,再在 jsp 目錄中新建一個 counter.war 目錄用于保存 WEB 發部的程序,再在 counter.war 下新建一個 WEB-INF 目錄,同時在 WEB-INF 目錄中新建一個 classes 目錄,其下面再建包目錄 counter 及 counter 目錄下的 ejb 目錄。
  
  好了,我們的目錄己建立成功,我們的目錄結構見圖 1 所示:
  
 JBoss:有狀態會話Bean及其多種調用方法

  
圖 1

  
  好了,我們利用上面的知識來建一個有狀態會話 Bean 及它的測試程序。我們在這里引入《 Mastering EJB 》 (Second Edition) 中的一個會話 Bean ,即 Count 。這個 Bean 中有一個狀態域命名為 val ,它用來保存相應客戶端調用 EBJ 方法 count 的次數。
  
  我們進入 src 目錄,所有的類源程序我們都在此目錄中編寫和存放。
  
  編寫 Remote 接口,代碼如下:
  
  //Count.java
  
  package counter.ejb;
  import javax.ejb.*;
  import java.rmi.RemoteException;
  public interface Count extends EJBObject{
  public int count() throws RemoteException;
  }
  
  編寫 Home 接口,代碼如下:
  
  //CountHome.java
  package counter.ejb;
  import javax.ejb.*;
  import java.rmi.RemoteException;
  public interface CountHome extends EJBHome{
  Count create(int val) throws RemoteException,CreateException;
  }
  
  編寫 Bean 類,代碼如下:
  
  //CountBean.java
  package counter.ejb;
  import javax.ejb.*;
  
  
  public class CountBean implements SessionBean{
  // 當前的計數值就是對話狀態
  public int val;
  private SessionContext ctx;
  //EJB 方法
  public int count(){
  System.out.println("count()");
  return ++val;
  }
  
  //EJB 必須的方法
  
  public void ejbCreate(int val) throws CreateException{
  this.val=val;
  
  System.out.println("ejbCreate()");
  
  }
  
  public void ejbRemove(){
  
  System.out.println("ejbRemove()");
  
  }
  
  public void ejbActivate(){
  
  System.out.println("ejbActivate()");
  
  }
  
  public void ejbPassivate(){
  
  System.out.println("ejbPassivate()");
  
  }
  
  public void setSessionContext(SessionContext ctx){
  
  this.ctx = ctx;
  
  }
  
  public SessionContext getSessionContext(){
  
  return this.ctx;
  
  }}
  
  好了,我們在 src 目錄中產生了三個 java 文件,這是 EJB 必須的類,下面我們用在第一節中編寫的 com.bat 文件來編譯它們。
  
  進行 src 目錄,熱行: com *.java 即會產生三個 .class 文件。
  
  下面我們部署我們的 EJB 。首先編寫部署描述符,進入:
  
  C : /JBOSS/myproject/CounterStatefullSessionBean/ejb/counter.jar/META-INF 目錄中,新建一個 ejb-jar.xml 文件,內容如下:
  
  <?xml version="1.0" encoding="gb2312"?>
  
  <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
  
  "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
  
  <ejb-jar>
  
  <enterprise-beans>
  
  <session>
  
  <display-name>Count</display-name>
  
  <ejb-name>Count</ejb-name>
  
  <home>counter.ejb.CountHome</home>
  
  <remote>counter.ejb.Count</remote>
  
  <ejb-class>counter.ejb.CountBean</ejb-class>
  
  <session-type>Stateful</session-type>
  
  <transaction-type>Container</transaction-type>
  
  </session>
  
  </enterprise-beans>
  
  </ejb-jar>
  
  此為 EJB 布署描述符文件,它里聲明了此 CountBean 的一些屬性,如聲明了本地接口,遠程接口及 Bean 的類型。其中 <session-type>Stateful</session-type> 一句聲明此 Bean 是有狀態會話 Bean ,假如是無狀態會話 Bean( 見第一節中的 HelloWorld) ,則此處應該是 Stateless 。
  
  然后,我們再在此目錄中新建一個 jboss-service.xml 文件,它是 JBOSS 服務器特有的描述文件,它的內容如下:
  
  <?xml version="1.0" encoding="gb2312"?>
  
  <jboss>
  
  <enterprise-beans>
  
  <session>
  
  <ejb-name>Count</e

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费啪视频在线观看 | 北原夏美av | 久草成人在线观看 | 一级一级一级一级毛片 | 免费观看一区二区三区视频 | 欧产日产国产精品乱噜噜 | 国产精品免费一区二区三区四区 | 久久艳片 | 羞羞视频入口 | av久草| 亚洲成人精品一区二区 | 欧美成人精品欧美一级乱黄 | 国产在线播放一区二区 | 特片网久久 | 国产精品久久久久久久久久久天堂 | 国产成年人网站 | 正在播放91精 | 7777在线视频免费播放 | 日本黄色不卡视频 | 欧美黑大粗硬毛片视频 | 国产精品一区二区三区在线 | 精品亚洲成a人在线观看 | 国产一级毛片高清视频 | 久久久久久久久成人 | 欧美a在线 | 高清在线国产 | 在线a亚洲视频播放在线观看 | 法国性xxx精品hd | 国产精品视频一区二区三区四 | 国产精品免费一区二区三区都可以 | 一级免费在线视频 | 欧美成人精品欧美一级乱黄 | 国产亚洲精品综合一区91555 | 7777奇米成人四色影视 | 日本在线高清 | 视频一区二区三区视频 | 久久久青青草 | 国产精品99久久99久久久二 | 午夜视频国产 | 精品一区二区在线观看 | 毛片视频在线免费观看 |