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

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

EJB設計模式5

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


  就像我們在設計模式4中看到的, Entity Bean的實現大小被縮減到在ejbCreate(), getData()and setData()方法中的僅僅幾行,不管CMP字段的數目.下一步是建模公司和雇員的Entity Beans,這個有點繁瑣而且建議讀者先對borland公司的<EJB程序員指南>的OR Mapping和高級CMP有所了解.
  對這個關系建模根本不需要對結構的代碼變化,然而Entity Beans實現類需要一點點修改來反映兩個實體間的關系,鑒于此Deployment Descriptor需要有小的修改.
  
  象以前, Entity Bean從結構繼續,下面是公司Entity Bean的代碼片段:
  public class CompanyBean extends CompanyStrUCt
  implements EntityBean {
  EntityContext entityContext;
  // CMP for all fields in the CompanyStruct
  public java.util.Collection employees; //one-to-many
  //rest of the code including getData() and setData()
  public java.util.Collection getEmployees() {
  return employees;
  }
  }
  
  下面是雇員Entity Bean的程序片段:
  public class EmployeeBean extends EmployeeStruct
  implements EntityBean {
  EntityContext entityContext;
  //CMP for all fields in EmployeeStruct EXCEPT
  //the comId
  public Company company;//remote reference to company
  }
  
  在上面的程序片段中,雇員Entity Bean從雇員結構繼續,雇員結構本身有一個字段comId表示雇員和公司之間的的外鍵,在所有的前面的設計模式中,這個字段是CMP的.而在設計模式5中這個字段用在Deployment Descriptor中un-checking的方法從CMP中去掉.而對公司Entity Bean的遠程引用現在是CMP的.現在的問題是怎么在getData()和SetData()方法中更新公司Entity Bean的引用,當這些方法只get和set comId(在設計模式上下文中沒有被CMP)的值.簡單的說,過程的結構沒有變化并且字段comId(不再CMP)在RPC中被拷貝到Entity Bean和從Entity Bean拷貝出來.需要的是對公司Entity Bean的遠程引用在必須被寫入數據庫和從數據庫讀出時更新.我們需要用ejbLoad()和ejbStore()方法在Entity Bean實現類中為我們完成這項工作.
  在雇員Entity Bean中的ejbLoad()方法的代碼片段如下:
  
  public void ejbLoad() {
  try {
  comId=(company ==
  
  
  null)?null:(Integer)company.getPRimaryKey();
  } catch (Exception e) {
  //throw some runtime exception (e.g. EJBException)
  }
  }
  
  
  以上代碼幾乎不需要解釋.當數據被從數據庫中讀出(在事務的開始時候),comId(不是CMP)字段在雇員Entity Bean被set.因此當getData()方法被調用時,返回的結構將包含正確地comId的值.在雇員Entity Bean中的ejbStore()方法如下:
  
  public void ejbStore() {
  try {
  company = (comId ==
  null)?null:beanGlossary.getCompanyHome().findByPrimary
  Key(comId);
  } catch (Exception e) {
  //throw some runtime exception (e.g. EJBException)
  }
  }
  
  
  ejbStore()在事務結束當數據被寫入數據庫時被調用.在這種情況下,comId的值被修改(通過調用setData方法),this必須被寫到數據庫中.在上面方法中的代碼把comId轉化成公司的遠程引用.(究竟comId是公司Entity Bean的主鍵).使用空check的原因是數據庫不能存空值(表之間的弱引用),并且這些同樣需要建模.
  
  任何情況下,用java對基本類型的封裝要比使用基本類型自己好,因為他們能存空值而且易于轉換成其他形式.
  上面的BeanGlossary類的代碼片斷輕易引起一些混淆.這實際上是一個捕捉EJB的lookup的utility類(一個無狀態session bean),
  在entity bean和有狀態session bean的情況下,Home接口的lookup是被緩沖的.在無狀態session bean的情況下,Remote接口是被緩沖的(作為ejb規范1.1的一部分,一個SLSB在Home接口中調用的create()是不被優化的).通過在上面上下文的緩沖,我們意思是第一個請求是被lookup的.隨后的調用是得到已經在對象引用中初始化的home接口或remote接口.
  BeanGlossarySB utility類的代碼片段如下:
  
  public class BeanGlossarySB implements SessionBean {
  private Context context = null;
  public javax.naming.Context getContext() throws
  NamingException {
  if (context == null)
  context = new javax.naming.InitialContext();
  return context;
  }
  // Company
  private CompanyHome companyHome = null;
  public CompanyHome getCompanyHome() throws
  NamingException {
  
  
  companyHome = ((CompanyHome)
  javax.rmi.PortableRemoteObject.narrow(
  getContext().lookup("java:comp/env/ejb/Company"),
  CompanyHome.class));
  return companyHome;
  }
  // rest of the EJBs
  }
  
  在設計模式5中,我們沒有處理Entity Bean的Home接口.在雇員Entity Bean的情況下, 會有一個finder元素在findEmployeesByCompany(Company pCompany)的幾行中,這將會返回雇員遠程引用的集合. 在公司Entity Bean 中的Deployment Descriptor map了在上面定義的finder元素的雇員集合.
  這樣,在公司Entity Bean中的方法getEmployees()在remote接口中的調用返回需要的與那家公司相聯系的遠程引用的雇員的集合.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品在线观看| 国产精品福利久久久| 国产原创欧美精品| 欧美成人精品一区二区| 日韩av一区二区在线| 亚洲精品乱码久久久久久金桔影视| 国产精品美乳在线观看| 亚洲美女av在线| 91精品国产色综合| 久久综合88中文色鬼| 奇米成人av国产一区二区三区| 精品久久久久久久久国产字幕| 精品亚洲一区二区三区四区五区| 国产精品专区第二| 97超级碰碰人国产在线观看| 成人免费淫片aa视频免费| 国产91免费观看| 综合国产在线视频| 亚洲国产精品久久久久久| 日韩av理论片| 亚洲白虎美女被爆操| 欧美一区视频在线| 国产精品va在线| 乱亲女秽乱长久久久| 国产成人综合亚洲| 538国产精品一区二区免费视频| 亚洲欧美在线一区二区| 国产精品扒开腿爽爽爽视频| 国产美女搞久久| 欧美日韩亚洲网| 在线播放国产一区中文字幕剧情欧美| 日韩中文字幕在线看| 精品国模在线视频| 亚洲免费福利视频| 亚洲综合精品伊人久久| 亚洲欧美在线播放| 91chinesevideo永久地址| 中文字幕欧美精品日韩中文字幕| 成人观看高清在线观看免费| 国产精品吹潮在线观看| 亚洲老司机av| 国产日韩欧美日韩| 国产精品久久久久久av福利| 欧美日产国产成人免费图片| 亚洲国产欧美一区二区三区久久| 中文字幕亚洲欧美日韩2019| 日韩大片在线观看视频| 国模吧一区二区三区| 亚洲有声小说3d| 国产欧美精品在线播放| 亚洲影院色在线观看免费| 亚洲欧美综合图区| 91色视频在线观看| 欧美激情网站在线观看| 亚洲欧美在线免费| 国产综合久久久久久| 国产91成人在在线播放| 亚洲精品欧美一区二区三区| 久久久免费高清电视剧观看| 日本精品久久久久影院| 日韩中文字幕在线免费观看| 国产成人亚洲综合| 永久免费毛片在线播放不卡| 亚洲免费精彩视频| 国产精品久久久久免费a∨大胸| 日本韩国欧美精品大片卡二| 最新国产成人av网站网址麻豆| 亚洲精品午夜精品| 日本一区二区三区在线播放| 九九热精品视频国产| 国外日韩电影在线观看| 亚洲欧洲午夜一线一品| 日韩精品视频在线观看免费| 国产精品香蕉av| 亚洲久久久久久久久久| 6080yy精品一区二区三区| 日韩av免费在线看| 亚洲激情在线视频| 精品综合久久久久久97| 日韩欧美国产免费播放| 亚洲一区精品电影| 久久国产精品久久久久久| 久久久久免费精品国产| 精品久久久久久久久国产字幕| 欧美精品九九久久| 8x拔播拔播x8国产精品| 欧美激情xxxx性bbbb| 亚洲国产美女久久久久| 亚洲老头同性xxxxx| 久久99精品久久久久久琪琪| 国产精品女人网站| 精品偷拍一区二区三区在线看| 色婷婷综合久久久久| 国产成人精品在线观看| 91麻豆国产语对白在线观看| 国产精品久久久久久久久| 欧美激情成人在线视频| 一区二区三区国产在线观看| 亚洲直播在线一区| 伊人久久五月天| 一本色道久久综合狠狠躁篇怎么玩| 欧美一区二区视频97| 亚洲国产一区二区三区在线观看| 亚洲国产精品va| 精品色蜜蜜精品视频在线观看| 欧美激情欧美激情在线五月| 国产精品视频资源| 中文字幕亚洲欧美日韩2019| 日本最新高清不卡中文字幕| 深夜福利国产精品| 国产成人啪精品视频免费网| 国产精品一区二区三区毛片淫片| 伦理中文字幕亚洲| 国产精品夜色7777狼人| 亚洲黄色在线观看| 欧美成人一区二区三区电影| 国产精品久久久久久久9999| 国产精品高清免费在线观看| 欧洲亚洲免费视频| 国产精品极品美女在线观看免费| 欧美洲成人男女午夜视频| 91麻豆桃色免费看| 国模精品视频一区二区| 日韩久久精品成人| 亚洲激情小视频| 日韩黄色av网站| 人人做人人澡人人爽欧美| 亚洲成色999久久网站| 亚洲理论在线a中文字幕| 97视频在线播放| 5252色成人免费视频| 国产精品日韩久久久久| 日韩电影免费观看中文字幕| 在线观看精品自拍私拍| 国产精品免费电影| 日韩在线视频免费观看| 国产日韩欧美影视| 亚洲国产精品久久精品怡红院| 亚洲伊人久久大香线蕉av| 国产精品男女猛烈高潮激情| 亚洲午夜性刺激影院| 欧美日韩中文在线观看| 欧美久久精品一级黑人c片| 日本午夜精品理论片a级appf发布| 久久91精品国产91久久久| 亚洲午夜未满十八勿入免费观看全集| 国产精品美女无圣光视频| 久久久久女教师免费一区| 丁香五六月婷婷久久激情| 亚洲网站在线播放| 一区二区三区国产视频| 北条麻妃一区二区在线观看| 亚洲欧美在线x视频| 亚洲免费电影在线观看| xxav国产精品美女主播| 国模极品一区二区三区| 九九热这里只有在线精品视| 欧美国产第一页| 日韩精品中文字幕视频在线| 亚洲国产精品资源| 欧美视频一区二区三区…| 91人成网站www| 亚洲色图在线观看| 欧美激情欧美激情|