【新炬網路名師大講堂】weblogic整合ejb
EJB是一個可重用的,可移植的J2EE元件。 EJB由封裝了業務邏輯的多個方法組成。例如,一個EJB可以有包括一個更新客戶資料庫中資料的方法的業務邏輯。多個遠端和本地客戶端可以呼叫這個方法。另外,EJB執行在一個容器裡,允許開發者只關注與bean中的業務邏輯而不用考慮象事務支援,安全性和遠端物件訪問等複雜和容易出錯的事情。EJB以POJO或者普通舊的Java物件形式開發,開發者可以用後設資料註釋來定義容器如何管理這些Bean。
下面詳細介紹ejb的 基礎知識,為下一步的開發做好充分準備。
1、ejb 基礎知識
(1) 無狀態會話bean
不儲存客戶機的會話狀態
好處:使用小量的例項即可滿足大量的客戶。每個例項都沒有標識,相互之間是等價的。
等冪的無狀態會話bean: 多次和一次呼叫的結果和效應相同。
在叢集中能負載均衡 a 機器失敗,能在b機器上重試
非等冪的無狀態會話bean: 如:計數器
不能自動因故障而進行轉換。
(2) 有狀態會話bean
儲存客戶機的會話狀態
特點: 在有會話狀態會話的bean例子中,出納員的數量等於活動的顧客的數量,這能簡化程式設計模式
weblogic 透過記憶體複製技術 在叢集中進行負載均衡
記憶體複製技術: 每個有會話狀態的bean例項都將儲存在兩個伺服器的記憶體中,一個伺服器作為主伺服器,另一個作為輔助伺服器。
如果主失敗,輔助變為主,然後自動選擇別的可用的伺服器作為輔助。
遺憾: 非常難在Servlet 和JSP中用好有狀態會話bean。可能會發生並發現象,產生RemoteException
weblogic 的
同步: 能有選擇地實現 Javax.ejb.SessionSynchronization介面
afeterBegin() //進入事務時
beforeCompletion() //提交事務前,用於提交前把快取的資料寫到資料庫中.
afterCompletion() //提交事務後,用於釋放共享資源或更新事務提交和終止方面的統計資訊.
會話bean透過其 SessionContext 物件中的 getUserTransaction() 方法,取得對UserTransaction的應用
通常 SessionContext 被存放在成員變數中
** 記住是在呼叫ejb.create()方法前呼叫 setUserTransaction() 方法
利用對 UserTransaction 的引用會話能使用 begin() 、commit()、rollback() 方法界定一個事務.
(3) 實體 bean:
他有一個主健作為唯一的識別符號
組成部分: 由本地介面、遠端介面、bean類、主健類和設定描述器組成。
本地介面:
擴充套件了javax.ejb.EJBHome介面,包括create()、remove()、finder 和home等方法
1)create()方法呼叫bean類中的ejbCreate()方法。相當於資料的insert 方法。
2)remove()方法相當於資料庫的delete操作。
3)finder()方法,使客戶能夠查詢和接收滿足查詢條件的實體bean的引用。每個實體bean的本地介面中都必須
有一個findByPrimaryKey() 方法
4)home 方法,類似於無狀態會話bean。
主健類:
實體bean必須包括一個主健類,主健類用於標識實體bean例項,而且實體bean資料型別必須是唯一的。
主健類能是java的基本型別String Integer 也能是使用者自定義的。
也能是多個欄位的主健的複合主健。
bean 類和bean的上下文環境:
實現javax.ejb.EJBObject 介面,其中包含業務方法的語法格式定義.
bean 類實現了javax.ejb.EntityBean介面,同javax.ejb.SessionBean介面相同,EntityBean 介面包含了EJB
容器呼叫bean例項的語法格式.
在bean的構造器執行之後,即時呼叫setEntityContext() 方法,同時把bean例項的EntityContext 傳遞給他.
bean類實現了home方法和遠端介面中的業務方法,home方法是針對匿名例項的方法不應使用有關的主健值.
分為:
容器管理永續性(Container-Managerd Persistence)CMP
特點: EJB 容器自動生成,用於把實體bean的資料寫入到資料庫中。
好處: bean作者能避免編寫實體bean和關聯式資料庫資料訪問方面的程式碼。cmp將自動處理這一過程。
個性: 每一個cmp 實體bean 都有一組容器管理的欄位,這些欄位儲存在資料庫,並可從中載入.通常,每個容器管理的欄位都對應於
關聯式資料庫中的一個列.
容器管理的每個欄位必須在ejb-jar.XML中定義,這使容器能夠把容器管理的欄位和bean類中的set和get方法進行匹配比較.
另外,bean作者能增加另外一個cmp設定描述檔案 weblogic-cmp-rdbms.xml,其中包含資料庫表名和每個容器管理的字
段和相應的資料列的對映.
bean管理永續性(Bean-Managerd Persistence ) BMP
特點: 在bmp實體中,bean作者需要自己編寫資料庫訪問程式碼,也就是編寫JDBC程式碼,插入、刪除和查詢資料庫中的實體bean資料。
好處: 能讓bean的作者完全靈活的處理實體bean的永續性資料,因為作者需要寫資料訪問的程式碼,他幾乎能使用所有永續性存
儲方式ejb2.0 cmp提供實體bean之間的標準關係對映,使容器能自動管理業務物件之間的互動。
cmp擁有更多的訪問控制,因此cmp比bmp有較好的效能。
(4) 訊息 bean
把JMS 和EJB 成功結合在一起,整合的結果
特點:客戶機不必呼叫訊息bean 相反: 客戶機只需要發一個訊息給jMS目的。
在訊息到達以後,訊息bean的onmessage()方法將被呼叫,以處理這個訊息。
訊息bean用於在伺服器中執行非同步操作。
2。EJB 組成
(1)遠端介面
public interface HelloWord extents EJBObject
{
//EJBObject 介面方法
EJBHome getEJBHome() throws RemoteException;
Object getPrimaryKey() throws RemoteException;
void remove() throws RemoteException, RemoveException;
Handle getHandle() throws RemoteException;
boolean isIdentical(EJBObject ejbObject) throws RemoteException;
}
(2)本地介面
本地介面是ejb工廠,客戶機能使用本地介面建立、找出和刪除ejb例項。只需寫本地介面中的方法的語法呼叫格式
public class HelloWorldHome extends EJBHome
{
//EJBHome 介面方法
void remove(Handle handle) throws RemoteException, RemoveException;
void remove(Object o) throws RemoteException, RemoveException;
EJBMetaData getEJBMetaData() throws RemoteException;
HomeHandle getHomeHandle() throws RemoteException;
// Home
public HelloWorld create() throws CreateException, RemoteException;
}
(3)bean 類
public class HelloWorldBean implements SessionBean
{
// SessionBean 中的方法
public void setSessionContext(SessionContext sessionContext)
/**呼叫次方法會話結束*/
public void ejbRemove()
//ejb透過待命和活動的機制,管理一組正在工作的有狀態會話bean例項
/**活動*/
public void ejbActivate()
/**待命*/
public void ejbPassivate()
// bean類
// 每個home 的create 方法對應一個ejbCreate()方法
// 有會話狀態有非常多不同版本的create()方法。而create 方法必須有ejbCreate()方法和之一一對應
public void ejbCreate()
}
不要在ejb類中類中實現遠端介面
3. EJB 設定描述器
(1)ejb-jar.xml
、Supports、Mandatory、Required、RequiredNew)
(2)weblogic-ejb-jar.xml (註釋)
4 . 建立ejb 檔案檔案
com/dhc/helloworld/(package)
com/dhc/helloworld/HelloWorld(遠端介面)
com/dhc/helloworld/HelloWorldHome(本地介面)
com/dhc/helloworld/HelloWorldBean(bean類)
META-INF
META-INF/ejb-jar.xml(設定描述器)
META-INF/weblogic-ejb-jar.xml(weblogic伺服器設定描述器)
說明: META-INF 必須為大寫
5 . 容器管理的事務
Nerver : 不參和事務,如果參和產生RemoteException
NotSupported: 不能參和
Supports: 如果呼叫者正在參和事務,相應的EJB呼叫也能參和事務,否則不能
Mandatory 如果呼叫者有一個事務,相應的EJB能參和事務,否則,TransactionRequiredException
Required 如果呼叫者有一個事務,相應的EJB能參和事務,否則,容器將在呼叫相應的EJB之前,開始一個事務.
當方法呼叫完成以後,即提交該事務.
RequiresNew 在呼叫相應的EJB之前,開始一個新的事務,當方法呼叫返回時,即提交這個事務.
6、ejb 引用
在ejb-jar.xml
在 weblogic-ejb-jar.xml
程式
Content ctx = new InitialContent();
Object h = ctx.lookup(“java:/comp/env/ejb”); //環境變數是隻讀的,而且是當前ejb的本地變數.
WidgetHome home = (WidgetHome)PortableRemoteObject.narrow(h,WidgeHome.class);
7. 資源管理器的引用
定義資源管理的引用
例子: 建立 jdbc、DBPool和JDBC資料來源的對映
在ejb-jar.xml
在 weblogic-ejb-jar.xml
config.xml
name=”DBPool”
Targets=”myserver”
JDDIName=”DBPool” (jndi名稱)
PoolName =”DevelopmentPool”
/>
引用的好處
我們用大量的對映和設定,才建立了資源管理器的引用,不過還是非常值得的。
以為便於部署人員重新設定應用而不必修改實際的bean類程式碼。甚至也不必修改ejb的設定描述器
java bean 程式碼
Content ctx = new InitialContent();
DataSource dataSource = (DataSource)ctx.lookup(“java:/comp/env/jdbc/DBPool”);
8 . 控制程式碼: 作為一個序列化的物件,控制程式碼中封裝了足夠的資訊,以便重建對EJBObject的引用。
控制程式碼可用於在兩個相互合作的程式中傳遞EJBObject的引用。接受程式即可從控制程式碼中取得EJBObject的引用。
為了取得控制程式碼,能呼叫EJBObject介面的getHandle()方法,返回一個Handle例項
為了重建EJBObject 引用。能使用Handle 介面的getEJBObject()方法。
例子:
HelloWorld hw = home.create();
javax.ejb.Handle handle = hw.getHandle();
HelloWorld helloworld = (HelloWorld)PortableRemoteObject.narrow(handle.getEJBObject(),HelloWorld.class);
HomeHandle:
類似handle ,但不能用於引用EJBObject
HomeHandle 包含足夠的資訊,能重建EJBHome()的引用。
差異:
是呼叫 getHomeHandle()方法 和getEJBHome()方法
例子片斷:
Content ctx = new InitialContext();
Object h = ctx.lookup(“HelloWorldEJB”);
HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(h,HelloWorldHome.class);
HomeHandle homehandle = home.getHomeHandle();
Object nh = homehandle.getEJBHome();
HelloWorldHome newHomeReference = (HelloWorldHome)PortableRemoteObject.narrow(nh,HelloWorldHome.class);
好處:
他們能自動的儲存重建引用所需的資訊
9.使用事務的技巧:
(1) 一個事務不要涉及太多的操作.
(2) 容器管理和bean管理的事務
事務既耗費應用伺服器中的資源,又耗費資料庫資源,所以事務越短越好.
儘量使用容器管理事務而不要採用bean管理事務的方式.
(3) ejb遇見錯誤,需要強制事務回滾. 使用EJBObject.setRollbackOnly();
(4) 不能讓事務涉及web層和表示邏輯
(5) 企業應用中不應當選用supports 事務屬性,因為只有呼叫者開始一個事務後,ejb才能在事務中執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29960155/viewspace-1368316/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 運維大師講堂,7天從入門到進階運維
- 安全大講堂|海南金融行業網路安全知識講座成功舉辦行業
- PostgreSQL技術大講堂 - 第31講:SQL調優技巧SQL
- ejb
- PostgreSQL技術大講堂 - 第34講:調優工具pgBagder部署SQL
- PostgreSQL技術大講堂 - 第46講:poc-tpch測試SQL
- PostgreSQL技術大講堂 - 第45講:poc-tpcc測試SQL
- PostgreSQL技術大講堂 - 第33講:並行查詢管理SQL並行
- [網路名詞]域名伺服器伺服器
- OneAPM大講堂 | Metrics, Tracing 和 Logging 的關係
- win10怎麼更改有線網路名稱_win10修改網路名稱的方法Win10
- [網路名詞]匿名FTP伺服器FTP伺服器
- 新炬網路亮相Gdevops峰會,助力傳統企業DevOps實施落地dev
- win10怎樣更改專用網路名稱_win10如何修改專用網路名稱Win10
- PostgreSQL技術大講堂 - 第32講:資料庫引數調整SQL資料庫
- 新炬網路與GBASE開啟戰略合作助力資料庫國產化資料庫
- PG技術大講堂 - 第13講:PostgreSQL Full-Page Writes 全頁寫SQL
- 今天開講,6 大演講主題、5 位技術大咖!龍蜥大講堂 5 月精彩直播預告搶先看
- PG技術大講堂 - Part 10:PostgreSQL資料庫管理SQL資料庫
- PostgreSQL技術大講堂 - Part 9:pg_hba.conf配置SQL
- PG技術大講堂 - Part 4:PostgreSQL例項結構SQL
- PG技術大講堂 - Part 3:PostgreSQL建庫與使用SQL
- PostgreSQL技術大講堂 - Part 2:PostgreSQL原始碼安裝SQL原始碼
- PostgreSQL技術大講堂 - 第72講:索引與SQL調優之禁忌之戀SQL索引
- ① EJB無狀態的bean(建立EJB的基礎教程)Bean
- 慕課網招聘golang講師Golang
- 直播預告丨先睹為快!Oracle 20c新特性解析 - 2020雲和恩墨大講堂Oracle
- 煥新啟航,「龍蜥大講堂」2023 年度招募來了!13 場技術分享先睹為快
- 風控大講堂:做汽車金融風控有前途嗎?
- OneAPM大講堂 | Java 異常日誌記錄最佳實踐Java
- PostgreSQL技術大講堂 - Part 8:PG物件許可權管理SQL物件
- EJB簡單理解
- 新零售講堂之關於新零售,或許你理解錯了?
- Vbox 未指定XXX網路名稱 找不到網路卡問題
- 指定的網路名不可用怎麼解決_win10指定網路名不可用的解決方法Win10
- PostgreSQL技術大講堂 - Part 6:PG使用者與角色管理SQL
- 美顏SDK小講堂——影像特徵特徵
- 劃重點,QYT-X1S應用場景原理大講堂
- PostgreSQL技術大講堂 - Part 7:PG使用者schema相互關係SQL