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

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

一個CMP的例子(一)

2019-11-18 13:17:24
字體:
來源:轉載
供稿:網友

  Container-Managed Persistence Examples一個container-managed的實體bean帶給開發人員很多好處。
  首先,EJB容器治理所有數據庫的存儲與同步指令;其次容器治理實體bean之間的關系。
  由于這些服務的存在,你不用去編寫數據庫邏輯,你所要做的只是在配置描述里面描述這些信息,這樣不僅可以節約時間而且使得bean可以在多種數據庫服務器使用。
  
  這章我們的實例是一個container-managed的實體bean。這個應用的名字叫RosterApp。
  
  RosterApp總攬:
  這個RosterApp應用程序維持在一些體育運動聯盟的球員的名單以及球隊的名單。這個應用程序有5個組件。RosterAppClient組件是一個客戶端組件,
  他通過RosterEJB會話bean的romote接口訪問RosterEJB。
  RosterEJB訪問3個實體bean-PlayerEJB, TeamEJB, and LeagueEJB,這些訪問是通過3個實體bean的local接口。
  
  這些實體bean采用CMP方式,TeamEJB和PlayerEJB的關系是多對多的雙向的,LeagueEJB和TeamEJB的關系也是雙向的,但是是一對多的關系。
  
  編寫PlayerEJB
  這個實體bean代表一個存儲在數據庫的球員,像所有的CMP實體bean,PlayEJB需要如下的代碼:
  1 Entity bean class (PlayerBean)
  2 Local home interface (LocalPlayerHome)
  3 Local interface (LocalPlayer)
  
  Entity bean class
  為了實現CMP,這個實體bean的類必須是public和abstract的。同時也必須實現以下的條件:
  1 EntityBean interface
  2 0個或者多個ejbCreate和ejbPostCreate方法
  3 get和set抽象方法。
  4 一些抽象的select方法
  5 home方法
  6 商業方法
  這個bean不能實現的方法:
  1 finder方法
  2 finalize方法
  
  access方法
  一個CMP實體bean有persistent和relationship,這些是虛擬的,所以你不用把他們定義為實例變量。
  你所作的只是在配置時描述他。但是你需要定義get和set方法。容器自動治理數據庫的存儲和同步,
  配置中這些persistent需要被容器維持:
  1 playerId (PRimary key)
  2 name
  3 position
  4 salary
  我們需要這些方法訪問這些:
  
  public abstract String getPlayerId();
  public abstract void setPlayerId(String id);
  
  public abstract String getName();
  public abstract void setName(String name);
  
  public abstract String getPosition();
  public abstract void setPosition(String position);
  
  public abstract double getSalary();
  public abstract void setSalary(double salary);
  
  這些方法的名字以get或者set開頭,后面跟著persistent的名字。
  
  這和JeanBean是一樣的。
  
  同時我們需要Access方法訪問Relationship在這個應用程序中,因為一個球員可以在多個球隊效力,所以一個PlayerEJB對象可以和很多TeamEJB相關。我們定義這個Relationship名字為teams,接下來我們需要定義這些Access方法。
  
  public abstract Collection getTeams();
  public abstract void setTeams(Collection teams);
  
  Select方法
  一個Select方法和一個Finder方法類似:
  1 一個Select可以放回一個local或者remote接口(或者一個集合)
  2 一個Select需要一個query連接數據庫
  3 需要自己在配置中定義一個EJB QL
  4 bean類不需要實現這個方法
  但是2者也有不同的地方:
  1 一個select方法可以返回相關聯的bean一個persistent(或者集合),一個finder只能返回local或者remote接口。
  2 由于select方法不在local或者remote接口,一個select方法不能直接被客戶調用,只能被這個bean的內部方法調用。
  通常被一個商業方法調用。這個程序中定義了如下的select方法:
  
  public abstract Collection ejbSelectLeagues(LocalPlayer player)
    throws FinderException;
  public abstract Collection ejbSelectSports(LocalPlayer player)
    throws FinderException;
  
  select方法名必須滿足:
  1 前綴必須是ejbSelect
  2 access控制訪問是public的
  3 abstract
  4 拋出的exception必須包含javax.ejb.FinderException
  
  商業方法由于select方法不能被客戶直接調通,所以將他們包含在商業方法中:
  
  public Collection getLeagues() throws FinderException {
    LocalPlayer player = (team.LocalPlayer)context.getEJBLocalObject();
    return ejbSelectLeagues(player);
  }
  
  public Collection getSports() throws FinderException {
    LocalPlayer player = (team.LocalPlayer)context.getEJBLocalObject();
    return ejbSelectSports(player);
  }
  
  實體bean方法
  由于是CMP,所以bean的生命周期方法基本不用實現
  ejbCreate方法:
  
  public String ejbCreate (String id, String name, String position, double salary) throws CreateException {
    setPlayerId(id);
    setName(name);
    setPosition(position);
    setSalary(salary);
    return null;
  }
  
  注重return null除非debug的需要,ejbRemove方法一般都是空的。當容器調用這個方法后,容器刪除數據庫中的紀錄。
  
  ejbPostCreate方法和ejbCreate方法的參數和返回類型一樣,假如你想建立一個關系,你應該把代碼寫在ejbPostCreate方法中。
  容器會自動治理同步,存儲等數據庫操作,這些通過ejbLoad和ejbStore方法完成。
  
  local home interface:
  這里定義了creat,finder和其他一些home方法。
  
  package team;
  
  import java.util.*;
  import javax.ejb.*;
  
  public interface LocalPlayerHome extends EJBLocalHome {
    
    public LocalPlayer create (String id, String name, String position, double salary)
      throws CreateException;
    
    public LocalPlayer findByPrimaryKey (String id)
      throws FinderException;
    
    public Collection findByPosition(String position)
      throws FinderException;
     ...
    public Collection findByLeague(LocalLeague league)
      throws FinderException;
    ...
   }
  
  loca interface:
  這里定義了一些商業方法,這些方法有bean實現,同時也定義了get和set方法,set方法不應該被暴露出來。
  
  package team;
  
  import java.util.*;
  import javax.ejb.*;
  
  public interface LocalPlayer extends EJBLocalObject {
  
    public String getPlayerId();
    public String getName();
    public String getPosition();
    public double getSalary();
    public Collection getTeams();
  
    public Collection getLeagues() throws FinderException;
    public Collection getSports() throws FinderException;
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品电影网站| 亚洲女在线观看| 中文字幕日韩欧美精品在线观看| 欧美另类极品videosbestfree| 日韩精品视频中文在线观看| 日韩中文字在线| 国产精品va在线播放我和闺蜜| 91精品国产网站| 91黑丝在线观看| 国产欧美日韩亚洲精品| www.久久久久| 97精品在线观看| 国产精品入口日韩视频大尺度| 欧美日韩精品中文字幕| 日韩精品中文字幕在线观看| 亚洲午夜精品久久久久久久久久久久| 国产精品欧美一区二区| 色综合老司机第九色激情| 欧美巨大黑人极品精男| 欧美巨猛xxxx猛交黑人97人| 亚洲天堂久久av| 中文字幕一区电影| 欧美日韩中文字幕| 中文字幕日韩免费视频| 日韩欧美在线观看| 亚洲性视频网址| 亚洲精品网站在线播放gif| 青青久久av北条麻妃海外网| 久久精品久久精品亚洲人| 国产精品中文在线| 97久久精品人搡人人玩| 欧美激情视频一区二区| 在线丨暗呦小u女国产精品| 国产精品福利观看| 成人黄色免费看| 成人久久一区二区三区| 亚洲人成电影网站色…| 国内外成人免费激情在线视频网站| 欧美电影在线观看完整版| 成人免费黄色网| 97香蕉超级碰碰久久免费软件| 成人激情视频在线播放| 国产精品情侣自拍| 欧美日韩国产91| 色一情一乱一区二区| 亚洲2020天天堂在线观看| 97在线日本国产| 一本色道久久综合狠狠躁篇怎么玩| 日韩在线观看免费全集电视剧网站| 美女啪啪无遮挡免费久久网站| 日韩欧美a级成人黄色| 亚洲图片制服诱惑| 欧美人与性动交a欧美精品| 欧美激情aaaa| 日韩av综合网| 久久精品视频一| 国产精品日韩一区| 欧美孕妇性xx| 久久精品久久精品亚洲人| 亚洲中国色老太| 亚洲美女自拍视频| 国内自拍欧美激情| 久久好看免费视频| 国产亚洲一区二区在线| 国产精品国产自产拍高清av水多| 日本亚洲欧洲色α| 欧美午夜www高清视频| 精品国产乱码久久久久久虫虫漫画| 国产色婷婷国产综合在线理论片a| 一区二区三区视频免费| 68精品久久久久久欧美| 中文字幕久久精品| 97人人爽人人喊人人模波多| 国产精品欧美日韩| 欧美中文字幕精品| 欧洲一区二区视频| 91精品国产综合久久香蕉922| 91极品视频在线| 91在线观看免费| 粉嫩av一区二区三区免费野| 亚洲人成网在线播放| 亚洲免费福利视频| 国产精品久久久久99| 久久久久久久久久国产精品| 中文字幕久久久av一区| 中文字幕在线国产精品| 一区二区三区 在线观看视| 欧美激情视频在线免费观看 欧美视频免费一| 国产一区玩具在线观看| 国产欧美日韩精品专区| 国产精品久久久久久久久久久不卡| 欧美在线一区二区视频| 日本电影亚洲天堂| 欧美怡春院一区二区三区| 狠狠色狠狠色综合日日五| 亚洲社区在线观看| 欧美wwwwww| 日韩在线观看免费网站| 黑人精品xxx一区| 精品国产乱码久久久久久天美| 久久九九精品99国产精品| 色与欲影视天天看综合网| 欧美精品www在线观看| 欧美激情一级欧美精品| 中文字幕在线亚洲| 欧美成人午夜剧场免费观看| 国产精品爽爽ⅴa在线观看| 红桃视频成人在线观看| 精品久久中文字幕| 精品视频在线观看日韩| 久久成人国产精品| 日韩成人在线观看| 日韩**中文字幕毛片| 精品亚洲一区二区三区在线播放| 国产精彩精品视频| 久久91亚洲精品中文字幕| 欧美电影免费观看网站| 少妇高潮久久久久久潘金莲| 国产精品 欧美在线| 国产做受高潮69| 国产精品av免费在线观看| 亚洲国产日韩欧美在线动漫| 久久久999国产精品| 91天堂在线观看| 91麻豆国产语对白在线观看| 久久久久久久电影一区| 精品无人区太爽高潮在线播放| 国产欧美一区二区| 5566日本婷婷色中文字幕97| 国产精品高潮呻吟久久av野狼| 国产视频一区在线| 国产精品热视频| 亚洲美腿欧美激情另类| 69视频在线免费观看| 九九热最新视频//这里只有精品| 欧美日韩亚洲视频一区| 久久久亚洲国产天美传媒修理工| 欧美—级a级欧美特级ar全黄| 理论片在线不卡免费观看| 日韩大片在线观看视频| 中文字幕在线视频日韩| 在线观看成人黄色| 上原亚衣av一区二区三区| 欧美日本高清一区| 亚洲国产精品va在线看黑人动漫| 日韩欧美aaa| 欧美国产日韩一区二区在线观看| 国产成人高清激情视频在线观看| 久久露脸国产精品| 另类图片亚洲另类| 97国产suv精品一区二区62| 久久影院资源网| 日韩精品在线影院| 国产69精品久久久久9999| 欧美成人在线影院| 日韩成人中文字幕在线观看| 精品视频偷偷看在线观看| 欧美精品日韩www.p站| 4438全国亚洲精品在线观看视频| 亚洲欧美激情在线视频| 国产精品久久久久久av福利软件| 国产视频精品一区二区三区| 精品久久国产精品| 久久精品亚洲国产|