Session Bean 編寫規則


以 下是到目前所談及的主題為止,一些Session Bean撰寫程式碼時,所要知道的瑣瑣碎碎規則:
  • 必須為定義服務介面,由Session Bean實作
  • 一個Session Bean可以實作多個服務介面
  • 定義服務介面時...
    • 所有方法必須是public、非static、非final
    • 不可以使用ejb作為方法名稱開頭
    • 若標示為@Remote,則所有的參數或傳回值必須實作 java.io.Serializable介面
    • 不能讓一個介面同時是@Remote又是@Local,必須分開定義,可參考 @Remote 與 @Local 的內容
  • @Stateless、@Stateful...
    • name屬性用來指定Bean名稱,有 的容器會將name屬性與JNDI名稱綁定在一起
    • Glassfish上,單獨指定name屬性,則您要用Bean的服務介面之全名 (Full-qualified name)方可取得Bean
    • mappedName屬性是廠商特定屬性,有的容器(像Classfish)會將mappedName 屬性與JNDI名稱綁定在一起
  • Session Bean實作....
    • 一定是具體類別,不能是 final或abstract
    • 必須有無參數建構子
    • 可以是某個POJO的子類別
    • 可以是某個Session Bean的子類別,但繼 承自某個Session Bean時,@Stateless、@Stateful會被忽略,所以在子類別中,必須再次標註Bean為@Stateless 或@Stateful
  • 生命週期回呼方法...
    • 繼承Session Bean時,生命週期回呼方法會被繼承下來,所以這些回呼方法可以事先定義在父類別中
    • 不可以丟出Ckecked Exception,不可以有傳入參數,沒有傳回值…
    • 可以是public、protected、private、package-protected
  • Session Bean注入...
    • Stateless Session Bean中可注 入Stateless Session Bean,但不可注入Stateful Session Bean
    • Stateful Session Bean中可注入Stateless Session Bean,或其他Stateful Session Bean
    • 注意若Stateful Session Bean被銷毀了,被注入的Stateful Session Bean也會被銷毀
  • Stateful Session Bean...
    • 用來持有狀態的成員,必須是基本資料型態,或是實作 java.io.Serializable介面
    • 建議一定要定義@Remove方法,並在不使用Stateful Session Bean時明確呼叫