EJB3 0學習筆記

2021-08-31 02:00:31 字數 3156 閱讀 4965

一.ejb3.0分為會話bean(session bean),mdb(message driver bean)訊息驅動bean,實體bean(entity bean)

1.session bean 又分為有狀態的(stateful)和無狀態的(stateless)

stateful session bean 就相當於一次會話,每個客戶端得到的是乙個不同的session bean,ejb通過乙個bean工廠生成不的session bean,

並且由乙個bena 容器進行統一管理,每生成的乙個session bean 都由這個bean容器管理.客戶端與session bean 之間是一一對應的.

stateless session bean 在ejb內部是一種單例模式,每個客戶端得到的始終都是同乙個session bean.

就效能上來說,stateless session bean 優於 stateful session bena ,因為stateless session bean 較stateful session bean 占用更少

的少的系統資源.但就ejb本身來說,它是一種提供分布式呼叫的元件,其效能肯定不是很理想,所以在開發ejb時要考慮到程式的粗粒細度

用來完成同一件事的邏輯最好寫在同乙個方法中,不要像我們平時寫程式那樣把完成一件事的邏輯分得很細.

2.ejb3.0有兩種呼叫方式:@remote 遠端呼叫,@local 本地呼叫.

remote 採用傳參的形式傳送資料, local 採用傳址的方式傳送資料,remote 是執行在不同的jvm上,而local是執行在同乙個上jvm的

3.ejb3.0注釋

@stateless //無狀態會話ejb

@remote () //遠端介面

@local () //本地介面

當乙個類實現多個介面時,我們必須申明哪個介面是用來作遠端呼叫的,哪個介面是用來做本地呼叫的.

@suppresswarnings("serial")   //遮蔽缺少serialversionuid 定義的警告

@stateful //有狀態會話ejb

@remote ()

@remotebinding (jndibinding="foshanshop/remoteoperation") //重新梆定jndi

@local ()

@localbinding (jndibinding="foshanshop/localoperation")  //重新梆定jndi

@postconstruct:當bean物件完成例項化後,使用了這個注釋的方法會被立即呼叫。這個注釋同時適用於有狀態和無狀態的會話bean。

@predestroy:使用這個注釋的方法會在容器從它的物件池中銷毀乙個無用的或者過期的bean 例項之前呼叫。這個注釋同時適用於有狀態和無狀態的會話bean。

@prepassivate:當乙個有狀態的session bean例項空閒過長的時間,容器將會鈍化(passivate)它,並把它的狀態儲存在快取當中。使用這個注釋的方法會在容器鈍化bean例項之前呼叫。這個注釋適用於有狀態的會話bean。當鈍化後,又經過一段時間該bean 仍然沒有被操作,容器將會把它從儲存介質中刪除。以後,任何針對該bean方法的呼叫容器都會丟擲例外。

@postactivate:當客戶端再次使用已經被鈍化的有狀態session bean時,新的例項被建立,狀態被恢復。

使用此注釋的session bean會在bean的啟用完成時呼叫。這個注釋只適用於有狀態的會話bean。

@init:這個注釋指定了有狀態session bean初始化的方法。它區別於@postconstruct注釋在於:多個@init

注釋方法可以同時存在於有狀態session bean 中,但每個bean例項只會有乙個@init注釋的方法會被呼叫。這取

決於bean是如何建立的(細節請看ejb 3.0規範)。@postconstruct在@init之後被呼叫。

@remove //移除ejb

@interceptors 注釋指定乙個或多個在外部類中定義的***。上面***hellointerceptor 對hellochinabean中的所有方法進行監聽

@aroundinvoke 注釋指定了要用作***的方法。用@aroundinvoke注釋指定的方法必須遵守以下格式:public object ***(invocationcontext ctx) throws exception

*** 代表方法名可以任意。

訊息驅動ejb

@messagedriven(activationconfig = //指明這是乙個訊息驅動bean

) //指定訊息路徑,訊息驅動bean在發布時,如果路徑不存在,容器會自動建立該路徑,當容器關閉時該路徑會自動被刪除

實體ejb

@entity

@table(name = "person")

@entity注釋指明這是乙個實體bean,每個實體bean類對映資料庫中的乙個表

@table注釋的name屬性指定對映的資料表名稱

@column注釋定義了對映到列的所有屬性,如列名是否唯一,是否允許為空,是否允許更新等,他的屬性介紹如

下:·name: 對映的列名。如:對映person表的personname列,可以在name屬性的getname 方法上面加入

@column(name = "personname"),如果不指定對映列名,容器將屬性名稱作為預設的對映列名。

·unique: 是否唯一

·nullable: 是否允許為空

·length: 對於字元型列,length屬性指定列的最大字元長度

·insertable: 是否允許插入

·updatable: 是否允許更新

·columndefinition: 定義建表時建立此列的ddl

·secondarytable: 從表名。如果此列不建在主表上(預設建在主表),該屬性定義該列所在從表的名字。

@id 注釋指定personid屬性為表的主鍵,它可以有多種生成方式:

·table:容器指定用底層的資料表確保唯一。

·sequence:使用資料庫的sequence 列來保證唯一

·identity:使用資料庫的indentit列來保證唯一

·auto:由容器挑選乙個合適的方式來保證唯一

·none:容器不負責主鍵的生成,由呼叫程式來完成。

@generatedvalue注釋定義了標識欄位的生成方式,本例personid的值由mysql資料庫自動生成。

EJB 3 0 學習筆記 準備工作

將jboss ejb 3.0 rc5 pfd中lib目錄下的 1 ejb3.deployer 2 ejb3 clustered sfsbcache service.xml 3 ejb3 interceptors aop.xml 4 jboss aop jdk50.deployer 拷貝到jboss ...

EJB 3 0 學習筆記 準備工作

將jboss ejb 3.0 rc5 pfd中lib目錄下的 1 ejb3.deployer 2 ejb3 clustered sfsbcache service.xml 3 ejb3 interceptors aop.xml 4 jboss aop jdk50.deployer 拷貝到jboss ...

EJB3 0 註解列表

color red 會話bean與訊息驅動bean。color 1,會話bean。有狀態bean sataeful 無狀態bean sataeless 業務方法是有狀態會話bean的刪除方法 remove 使poji成為會話bean遠端業務介面 remote 使poji成為會話bean本地業務介面 ...