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

循速漸進學用Session Bean(四)

編輯:J2EE

Session Bean要求、限制和許可

在EJB規范中,對Session Bean有一些限制和要求。這些限制會指出哪些是bean必須做的,哪些是不能做的,以及bean必須實現的一些方法和接口。也有一些規范指出哪些處理是允許做的,這是為了避免你以為這些處理是被其它限制禁止的。

實現SessionBean接口

session bean必須實現Javax.ejb.SessionBean接口

聲明該類為Public,而不是Final或者Abstract

要記住EJB容器需要創建bean實例,因此該類必須是public,而且不是抽象的。

創建一個Pubic,無參數的構造器

同樣,由於EJB容器必須創建bean的實例。如果構造器是protected或者private,容器就不能創建實例。

不要實現finalize方法

雖然你很少需要定義一個finalize方法,不過EJB規范中還是明文禁止在session和entity bean中定義finalize方法。如果你的bean需要做任何清除的操作,它們應該在ejbRemove或者ejbPassivate方法中進行。

實現create方法和所有的remote方法

一個session bean必須實現Home接口中指定的全部create方法,以及Remote接口中指定的全部方法。在實現這些方法時,有一些額外的要求:

. 這些方法必須是public,而不能是static或者final

. 參數和返回的類型必須是有效的RMI/IIOP返回類型。在通常的情況下,這意味著必須是原有的類型(int, char, double等),可串行化的對象或者Remote接口。

. 方法名不能以ejb開頭(這將令EJB的配置工具感到迷惑,並且可能帶來沖突)

可選擇的實現Remote接口

對於一個bean可以實現Remote接口,這個特性也是挺重要的。在實現類中,其中的方法簽名必須和Reomote接口中的一樣,除了一點,就是實現類中的方法並不拋出RemoteException。也就是說,雖然對於Remote接口的每個方法,在實現類中都必須要有相應的方法對應,而且不需要作如下的聲明:

public class ShoppingCartImpl implements SessionBean, ShoppingCart

實現Remote接口的原因是:在漏掉一個方法時編譯器將會告訴你,也就是說,如果沒有實現Remote接口中的一個方法,編譯器將會產生一個錯誤。否則,你將不知道漏掉了一個方法,直到你運行一個配置工具或者是打包工具為止。越遲發現錯誤,就要花越長的時間來改正它。

在實現Remote接口時,可能會遇到的問題是使用this關鍵字來傳送對象,而不是使用session context中的getEJBObject方法。通常,當使用this而不是getEJBObject時,編譯器將會產生一個錯誤,因為它期待一個實現Remote接口的對象,而實現類卻這樣做。通過實現Remote接口,你通過了編譯,但是你在運行時又碰到了錯誤,這是由於與EJB容器期待的不同,實現類並不是一個到Remote接口的正確引用。

提示

雖然實現Remote接口可以指出在編譯時的錯誤,但是這樣也會導致出現一些直到運行時才會發現的錯誤,令修改起來很費時間。所以你最好不要實現Remote接口,而在配置時發現一些錯誤。

實現SessionSynchronization接口

SessionSynchronization接口可以令一個session bean更好地控制一個事務是如何發生。

在必要時擴展其它類

你的實現類也可以是其它類的子類。實際上,該超類也可以是另一類bean的實現類。

在必要時實現Helper方法

一個實現類可能還有額外的helper方法,這些方法並不是Remote或者Home接口的一部分。對於這些方法的參數類型、返回值類型和可見性(public, protected, private)是沒有限制的。

不要拋出RemoteException

如果需要拋出一個和EJB有關的異常,拋出Javax.ejb.EJBException代替。

Remote和Home接口的限制

除了對實現類有限制外,對於Remote和Home接口也有一些限制。這些限制大部分和實現類類似。

Remote接口必須擴展Javax.ejb.EJBObject

當你使用一些配置工具時,例如WebLogic提供的工具,你將會發現它會自動知道哪個類包含有Remote接口。它尋找EJBObject接口來檢測到Remote接口。還有EJBObject接口包含有每個EJB都必須實現的一些方法。

Home接口必須擴展Javax.ejb.EJBHome

和Remote接口必須擴展EJBObject一樣,EJBHome接口幫助標識Home接口,並且定義了一些你可以在每個Home接口上調用的方法。

參數和返回類型必須符合RMI/IIOP

這意味著它們必須是原始類型、可串行化對象或者Remote接口。

所有的方法必須拋出Java.rmi.RemoteException

由於Home和Remote接口擴展java.rmi.Remote接口,所以接口的全部方法都必須拋出Java.rmi.RemoteException。RMI規范明確規定在Remote接口的所有方法都必須拋出RemoteException。

所有的方法都必須有相應的實現

在一個典型的RMI實現中,這一點是毫無疑問的,這是由於實現類將會實現Remote接口。但是對於EJB,由於實現類並不需要實現Home和Remote接口,對於實現類和Home及Remote接口的關系,編譯器並沒有一個強制的規定。

對於Home接口的每個create方法,在實現類中都必須有一個相應的ejbCreate方法。還有,create方法拋出CreateException。

擴展其它的接口

要支持Enterprise JavaBeans的子類,Home和Remote接口可以擴展其它的接口,只要父接口是擴展EJBObject(對於Remote接口)或者EJBHome(對於Home接口)。


 

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