亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Enterprise JavaBeans導論7

2019-11-18 12:36:48
字體:
來源:轉載
供稿:網友

  自治理的事務
  假如聲明一個bean的事務控制為TX_BEAN_MANAGED,則這個bean可以訪問事務服務。當事務控制應用于單個的方法時這個控制只能應用于整個的bean. bean訪問事務服務的能力不能只對某個方法起作用。
  因此一個方法聲明事務控制為TX_BEAN_MANAGED,而另一個方法聲明為其它不同的事務控制是錯誤的。廠商的安裝工具應該能檢測到并報告這個錯誤。
  Bean分別通過初始化時setsessionContext()或setEntityContext()方法的參數SessionContext或EntityContext來訪問事務服務。這些接口都是EJBContext的子類。EJBContext的定義如下:
  
  Public interface javax.ejb.EJBContext {
  public Identity getCallerIdentity();
  public boolean isCallerInRole(Identity other);
  public EJBHome getEJBHome();
  public PRoperties getEnvironment();
  public UserTransaction getUserTransaction() throwsIllegalStateException;
  public boolean getRollbackOnly();
  public void set RollbackOnly();
  }
  
  一旦bean獲得了一個UserTransaction的引用,就可以用這個引用治理自己的事務。
  有狀態的會話bean的方法可以創建一個事務,而且不用終止事務就可以返回。假如還有線程調用bean的方法,容器檢測是否有bean創建的活動的事務,假如被調用的事務是同一個事務,容器會答應該線程重新進入這個bean.假如bean在事務中且執行不同事務上下文的線程試圖進入bean,容器會阻塞這個線程直到bean的事務終止。假如線程試圖進入事務時bean不在事務中,線程會執行一個自己的事務,容器會掛起線程當前的事務以答應線程進入。一旦線程離開方法就會恢復線程以前的事務,容器不會終止任何方法創建的事務。
  對于無狀態會話bean和實體bean,當事務活動時bean的方法不答應返回。容器會為此拋出一個例外。 Leaving a tranaction active across method calls is stateful,and is not allowed for stateless session beans.Fro similar reasons,entity beans are also not allowed to maintain an open transaction state across method calls when the bean has declared the TX_BEAN_MANAGED transaction control.
  
  會話同步接口
  有狀態和無狀態的會話bean都可以訪問數據庫,并且參與一個事務。為了讓bean在事務中執行它的任務,bean開發者可以實現在bean中實現javax.ejb.SessionSynchronization接口。容器能自動檢測這個接口,容器會使用這個接口中的方法以使bean得到事務的狀態信息。實體bean不支持這個接口。因為實體bean are implicitly transaction aware,所以容器使用不同的方法控制一個事務中的實體bean.
  
  SessionSynchronization接口定義如下:
  public interface javax.ejb.SessionSynchronization {
  public void afterBegin() throws RemoteException;
  public void beforeCompletion() throws RemoteException;
  public void afterCompletion(boolean yn) throws RemoteException;
  }
  
  實際上一個事務不屬于一個非凡的bean的實例。一個客戶端或容器中執行的線程創建一個事務,在執行bean中的代碼時執行該事務。假如一個有事務上下文的線程將要進入一個會話bean,容器首先調用它的afterBegin()方法。Bean可以記錄所有的商業方法運行在事務中,隨后執行事務操作。假如一個操作的內部標志顯示這個線程在事務外運行,則會拒絕執行事務操作的請求。直到調用afterCompletion()方法,bean會繼續認為商業方法的調用都在事務中執行。Bean將推斷性地清除內部標志,以表示隨后到來的事務請求將被拒絕。
  
  假如一個事務上下文的線程試圖進入一個已經是另一個事務的一部分的Bean時,.Container將封鎖入口,直到前一個事務提交或回滾,并且afterCompletion()方法被調用,此時,答應Bean 恢復它的狀態。Container負責提供這些行為。當Container發現它將要提交一個事務時,將在這個事務的所有的session Bean上調用beforeCompletion()方法。這就給Bean足夠的機會來結束事務的操作,如在提交前將數據寫入數據庫。反之,當Container 發現,將要回滾一個事務撕,BeforeCompletion()方法將不會被調用,因為將一個將被回滾的事務所產生的數據寫入數據庫是沒有意義的。
  AfterCompletion()是在一個事務即將提交或回滾時被調用,來通知Bean事務操作的最終結果。Bean可以用這個信息來修正自己的內部狀態,但它不能用這個信息來維持任何它將要保存的事務。盡管session Bean可以創建,提交和回滾它自己的事務,但通常不推薦這樣做。SessionSynchronization接口不提供整合外部和內部事務的能力。假如一個session bean實現了這個接口,則意味著它在方法調用之間要保持事務的狀態。非凡地,這也暗示在afterBegin()和afterCompletion()調用之間bean是處于一個事務中。這樣,假如一個bean實現了SessionSynchronization接口并且在裝配符中聲明是無狀態的就是一個錯誤。廠商提供的安裝工具應該可以捕捉到并報告這個錯誤。
  
  無狀態的session bean可以加入一個事務,但它們不能實現這個接口。事務可以是TX_BEAN_MANAGED,或者container可以在方法入口和從方法的返回上來開始和提交這個事務。Container不可答應在一個現存的事務中有一個線程進入方法,因為無狀態的Bean的方法將無法知道正在運行的線程是否正在一個事務中。
  
  解決這個問題的一個方法是使container掛起現存的事務,強迫方法總是認為線程沒有在一個事務性的上下文中運行。有狀態的Bran可以不實現這個接口而介入事務。但是,裝配符必須要認真地配置以使得商務方法總能在正確的事務狀態中運行。Bean自己沒有通過這個接口來獲得自己的事務的狀態的權利。
  
  加入事務
  EJBContext接口在前面的一節中已經介紹了。其中有兩個方法:
  public boolean getRollbackOnly();
  public void setRoolbackOnly();
  這些方法可以有任何bean來使用,而不僅僅是那些聲明了其事務控制為bean-managed的bean。事實上,那些處理自己的事務的bean將不會用到這些方法,因為這些方法不是用來和外界的事務治理器進行交流事務狀態的。
  當一個bean調用了setRollBackOnly()方法時,它是在向事務治理器詢問何時結束將要回滾的當前事務。它將給它所參與的事務的結果一個選票。這些方法還存在于UserTransaction接口中,但由于大多數的bean都不訪問這個接口,這些方法必須直接地在EJBContext中提供給bean。注重這個方法并不引發回滾操作,它只是簡單地設置標志,表示事務在結束時應該回滾。
  不象JavaBan屬性設置方法,這個方法不以boolean值作為參數。這個方法是特意設計成這樣,以使得一個bean不能夠改變另一個bean的回滾請求。
  一個bean也許希望使用getRoolBackOnly()方法,來檢查當前的事務的狀態。假如另一個bean已經標志這個事務為rollback,則正在調用的bean可以推測到并決定不能執行那些在、強制性達到操作,如數據庫更新,而這些操作很有可能在事務結束時被反轉過來。
  
  客戶劃分的事務
  盡管一個JEB廠商所必須的,大服務器廠商也許決定提供一個類,使得用戶可以直接訪問事務治理器。當需要在同一個上下文中在兩個不同的服務器上調用bean時,用戶也許會希望這樣做。當然,每個bean的裝配符可以答應這樣的行為。用戶可以創建一個事務,然后在兩個不同server上的兩個不同的bean上調用商務方法,而將事務的上下文也作為調用的一部分進行傳遞。一旦調用結束,用戶將推測地結束事務。有container廠商產生的stub和skeleton將支持事務上下文的隱式傳遞。
  這里是一個可能的例子:
  
  Current current = new Current();
  Current.setServiceProvider(txMgrURL);
  Current.create();
  Current.begin();
  Current.doSomeWork();
  RemRef1.doSomeWork();
  RemRef2.doMoreWork();
  Current.commit();
  
  數據庫操作的事務治理
  bean當然希望使用JDBC來建立到數據庫的連接,并在其上進行操作。但是,為了符合EJB這種container治理事務的模式,連接不能使用自動提交特性,并且不應該在連接上試圖提交或回滾。
  Container的角色是決定在這個事務中執行的所有行為應該提交還是回滾。這里提這樣一個問題很好:container如何看到并治理由bean方法內部創建的數據庫連接。盡管在規范中沒有明確地提到,EJB將只能使用JDBC驅動,而JDBC也正是用來和EJB配合使用的。在數據庫連接的創建時,驅動程序透明地將連接注冊到正在執行的線程的當前事務中。之后當container決定結束事務時,數據庫連接將自動地結束它。
  用OTS的術語說,數據庫連接是不可恢復的資源,有事務服務在container的協助下,隱式地治理。盡管可以在這種情況下使用非事務感知的JDBC Driver,但開發者必須清楚任何在數據庫連接上所做的操作都不屬于bean的事務,開發者還必須確保在從方法返回之前結束數據庫連接事務。試圖使用SessionSynchronization接口來合并數據庫連接事務和bean本身的事務是不可靠的,是不應該作的。
  
  分布事務的支持
  一個分布事務在下面的情況下是需要的:
  . 一個用戶使用用戶劃分的在多個server上的多個bean中創建和調用方法的事務。
  . 一個在其他的server上調用其他EJB的方法的bean的方法。
  對于這些工作廠商必須為EJBObject生成stub和skeleton來隱式地獲得當前事務的上下文,同時將其通過方法調用傳到遠程bean。當將商務方法調用委派給bean時,遠程bean的EJBObject的skeleton必須請求這個事務的上下文

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕日韩精品在线观看| 国产精品狼人色视频一区| 欧美成人精品h版在线观看| 国产一区二区欧美日韩| 2020欧美日韩在线视频| 亚洲精品美女在线| 国产精品亚洲аv天堂网| 久久伊人色综合| 九九九热精品免费视频观看网站| 91夜夜未满十八勿入爽爽影院| 97在线视频国产| 国产精品稀缺呦系列在线| 久久久免费精品| 性欧美办公室18xxxxhd| 国产精品一区二区三区久久久| 久久香蕉频线观| 国产精品第2页| 成人97在线观看视频| 欧美人在线观看| 国内成人精品视频| 日韩免费观看在线观看| 亚洲精品福利在线观看| 亚洲在线观看视频| 国产主播在线一区| 国产精品黄页免费高清在线观看| 17婷婷久久www| 国内偷自视频区视频综合| 国产精品久久久久久久天堂| 视频在线观看一区二区| 亚洲电影免费观看高清完整版在线| 欧美日韩中国免费专区在线看| 性欧美视频videos6一9| 久久91亚洲人成电影网站| 欧美乱妇40p| 国产丝袜一区二区三区免费视频| 欧美激情va永久在线播放| 成人av电影天堂| 日韩电影中文字幕av| 成人精品久久久| 亚洲人成在线免费观看| 欧美一区二区三区精品电影| 国产精品老牛影院在线观看| 91在线观看免费网站| 国产精品美乳一区二区免费| 久久夜色精品亚洲噜噜国产mv| 亚洲成色777777女色窝| 亚洲精品国产精品国自产观看浪潮| 欧美成年人视频| 精品五月天久久| 国产精品观看在线亚洲人成网| 欧美成人免费大片| 欧美电影在线观看高清| 福利一区福利二区微拍刺激| 国产精品久久久久一区二区| 国产噜噜噜噜噜久久久久久久久| 日韩欧美国产视频| 欧美视频免费在线观看| 欧美激情一级二级| 国产精品扒开腿做爽爽爽视频| 91精品国产高清久久久久久91| 亚洲成人久久一区| 欧美夫妻性生活xx| 亚洲国产成人精品一区二区| 亚洲电影在线观看| 久久久久免费视频| 国产精品久久9| 少妇精69xxtheporn| 日韩免费中文字幕| 久久手机精品视频| 精品国产91乱高清在线观看| 久久久久在线观看| 国产精品老牛影院在线观看| 国产精品一区二区三区久久久| 欧美性猛交xxxxx免费看| 国产日韩在线看| 亚洲色图第一页| 国产精品久久久久久久av电影| 午夜免费日韩视频| 奇门遁甲1982国语版免费观看高清| 国产精品久久99久久| 2019国产精品自在线拍国产不卡| 97香蕉久久夜色精品国产| 亚洲老头同性xxxxx| 欧美富婆性猛交| 欧美日产国产成人免费图片| 色老头一区二区三区在线观看| 国产精品黄视频| 欧美日韩国产在线| 亚洲va欧美va国产综合久久| 国产精品视频网站| 色偷偷偷综合中文字幕;dd| 中文精品99久久国产香蕉| 隔壁老王国产在线精品| 成人精品网站在线观看| 欧美成人精品三级在线观看| 国产精品精品久久久| 7m第一福利500精品视频| 一区二区福利视频| 国产欧美精品一区二区三区-老狼| 亚洲国产精品久久91精品| 日韩av不卡在线| 中文字幕日韩av电影| 亚洲人成电影网| 精品亚洲一区二区| 美女国内精品自产拍在线播放| 国产精品自产拍在线观看| 九九热这里只有精品免费看| 久久在线精品视频| 欧美激情啊啊啊| 久久九九有精品国产23| 一区二区在线视频| 国产午夜精品一区二区三区| 伊人久久免费视频| 日韩激情视频在线| 日韩免费精品视频| 亚洲人成网在线播放| 成人在线中文字幕| 欧美性xxxx在线播放| 国产精品视频一区二区三区四| 久久久精品影院| 欧美日韩国产综合新一区| 亚洲а∨天堂久久精品喷水| 亚洲国产精品一区二区久| 久久精品视频网站| 亚洲无线码在线一区观看| 久久久久久国产精品久久| 国产精品视频一区二区三区四| 亚洲图片在区色| 欧美电影免费观看网站| 精品日本高清在线播放| 国产精品美女www| 亚洲国产欧美精品| 国产精品揄拍一区二区| 尤物九九久久国产精品的特点| www.亚洲免费视频| 国产成人精品电影久久久| 国产视频在线一区二区| 亚洲人精品午夜在线观看| 日本午夜在线亚洲.国产| 国产日韩欧美在线| 亚洲精品乱码久久久久久按摩观| 亚洲人成77777在线观看网| 国产99久久久欧美黑人| 国产伦精品免费视频| 国产福利视频一区| 日韩成人激情在线| 九九久久综合网站| 亚洲3p在线观看| 91精品久久久久久久久青青| 亚洲精品国产精品国产自| 中文字幕亚洲无线码在线一区| 久久久日本电影| 国产精品久久久久影院日本| 日本午夜在线亚洲.国产| 性欧美xxxx视频在线观看| 欧洲成人免费aa| 国产精品对白刺激| 亚洲第一中文字幕在线观看| 日韩中文字幕不卡视频| 欧美中文在线免费| 国产精品女主播| 国产日韩欧美在线看| 中文字幕不卡av| 亚洲性生活视频|