选择显示字体大小

关于ejb的基本概念和例子

ejb概論
來源:凌群電腦 cww整理

enterprise javabean(ejb)是一種元件的架構,用來開發及配置分散式物件導向的企業應用系統。
而且它是放在支援ejb平台的伺服器上,一些rmi、concurrency, transaction, security等等問題,可
交由伺服器來管理,使用者可以著重於企業流程的開發。(就如activex之於mts一般)

ejb可分成 session bean與entity bean,它們卻有不一樣的用途.

session bean代表工作流程.所謂工作流程是完成特定任務所需採行的步驟,例如門診掛號或證券
下單都是一種工作流程,也就是我們常稱的business logic.session bean可以呼叫其他的ejb,藉
由彼此的分工合作完成特定任務.在一般狀況下,session bean是不會用來連結資料庫[註1]

entity bean代表資料庫中的資料.它將資料物件化,一個entity bean的instance代表資料庫內資料表
中的一筆資料.每一筆資料的欄位值會對應到entity bean所宣告的變數,應用程式透過存取entity bean的變數,達到同步存取資料庫中的資料的目的.

註1:在ejb的架構中,entity bean是被設計經由jdbc來存取關聯式資料庫.如ms-sql,informix,oracle,
sybase等等.若是要連接非關聯式資料庫,如mainframe上的資料庫,就無法使用entity bean,這時就必
須撰寫session bean來模擬entity bean.

session bean又可分成stateless/stateful

stateless session bean


        當所要撰寫的ejb是屬於一般用途或是需要重複使用,這時會選擇用stateless session bean.statelesssession bean的生命週期很短,client端呼叫它時它被建立,當client呼叫完畢,它會被ejb container丟到pool中,等待其他人來使用,直到ap server shutdown.

        因為stateless session bean不保留任何狀態 (state),呼叫它的client端必須負責維護自己的狀態,
所以它很節省系統資源,也可被重複使用,少數幾個stateless session bean便可以為許多client端來提
供服務,我們可以把它當作procedure使用,它會根據傳入的參數來進行運算並傳回結果.舉例來說,像公斤轉換磅的計算程式就非常適合寫成stateless session bean.
stateless session bean整個生命週期中,並不會保留client端傳入的state,所以可以被任何一個client端
重複呼叫使用.以weblogic server為例,它建立了一個“free pool”的機制,並且在裡面放了一些stateless session bean的instance.當client端呼叫某個stateless session bean時,wls會到free pool找一找,看看有沒有沒事做的instance,如果有就把它傳給client使用,沒有才建立新的instance.當client端用完instance了,ejb container便會將client端與instance解除關係,並將instance放回free pool供其他client端使用。如果client再度要求做事,則不一定會以哪一個instance來做回應,可能是方才那個,也可能不是。

stateful session bean
        stateful session bean在整個生命週期中保留client端呼叫時所傳入的狀態(state),它只能為一個特定的client端提供服務(一對一),無法由不同的client端輪流使用,也不會放在instance pool中,所以stateful session bean內的變數可以client端在執行其內含之method的過程中保存用戶端的相關資料,因此先前執行的method對stateful session bean的狀態資料造成更動,會影響之後執行的method的執行結果。例如,amazon上的“購物車”就十分適合寫成stateful session bean,我們將放入購物車的書籍資料記錄在stateful session bean的state中,當客戶要結帳時,就可以直接根據state的內容直接計算出應付金額。因為每個client端都會擁有自己專屬的stateful session bean instance,而每一個stateful session beaninstance都會在ap server上佔據一塊記憶體,保存client端所傳入的狀態資料,這樣的做法會使得ap server loading加大,為了節省系統資源,ejb container會將存在記憶體中超過閒置時間的stateful session bean instance自動鈍化 ( passivated ),並依照java object serialization規則將狀態儲存至磁碟,然後再將stateful session bean instance從記憶體中移出,當該stateful session bean再被叫用時ejb container自動活化 ( activated ) 此stateful session bean instance並載入之前儲存的狀態。不過java中有一稱為transient field的變數,它不會隨序列化而儲存其狀態,處理它時,要特別注意。

        stateful session bean的運作方式則和stateless session bean截然不同.stateful session bean在
整個生命週期中只服務一個client端(一對一),所以每次client端一呼叫stateful session bean,ejb
container就必須建立一個新的instance.stateful session bean可以保留client所傳入的狀態,直到被
ejb container消滅為止.

ejb禁止同時使用bean instance,在client端呼叫某個method時,若該method未執行完畢,是沒有人可以用該bean instance,這解決了concurrency的問題,而這個功能是由ap server負責的。另外session bean也被設定成不可重覆進入,意思是client呼叫ejb-a做事,ebj-a又呼叫ejb-b做事,而ejb-b又呼叫ejb-a做事,若真有這事發生,會產生remoteexception的例外。ejb-a呼叫ejb-b做事時,和client呼叫ejb-b做事的方式相同,不會因為ejb-a與ebj-b在相同的ap server上而有所不同。


開發ejb時一般需要為它定義兩個介面與兩個類別:
remote interface:
          繼承自javax.ejb.ejbobject,該介面提供了外界使用bean的method
home interface:
          繼承自javax.ejb.ejbhome,提供建立、移除、尋找bean的method
bean class:
           bean的主體,所有的bussiness logic都寫在這裡
primary key class:
             只有entity bean才會用上它,用來指向database的某筆record

 

ejb object的觀念
   bean class是整個程式的主體,但是client端並不是和bean class做溝通,而是和ejb object做溝
通。我們想像一下,只是單純的寫這些remote interface/home interface/bean class等,而沒有寫任
何網路的程式,我們的client如何叫server(bean)做事,又如何把執行的結果傳回client?其實client
沒有和bean class溝通,當然不用有這些網路相關的程式,而client與server間的網路溝通是由ejb
object來做的。client端產生ejb object的remote reference(stub),而server端是ejb object,而ejb object又封裝了bean instance,所以我們便可以想像ejb object有bean class的功能又有javax.ejb.ejbobject定義的功能,而ejb object是由ap server(weblogic)依據我們對enterprise javabean的定義而自動產生。

 

 


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons