以 下是到目前所談及的主題為止,一些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時明確呼叫