麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

一個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;
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片午夜 | 国产99久久久久久免费看 | 免费视频www在线观看 | 伊人成人免费视频 | 久久99综合 | 国产精品久久久久久久久久免 | 男女无套免费视频 | 精品国产一区二区久久 | 一级国产精品一级国产精品片 | 麻豆传传媒久久久爱 | 久久成人精品视频 | 国产999精品久久久久 | 欧美一级美片在线观看免费 | 国产精品视频一区二区三区四区国 | 欧美乱淫| 欧美成人免费 | 久久精品中文字幕一区 | 91精品观看91久久久久久国产 | 成人福利在线播放 | 国产美女爽到喷白浆的 | 亚洲国产精品一 | 久久久久久中文字幕 | 在线播放污 | 99精品视频在线免费观看 | 日日噜噜噜夜夜狠狠久久蜜桃 | 国产999精品久久久久 | 国产中文一区 | 神马福利电影 | 天堂福利电影 | 国产91一区二区三区 | 国产九九热 | 少妇一级淫片免费放4p | 天天看天天摸天天操 | 久久精品日产高清版的功能介绍 | 色视频在线观看 | 国产成人高清成人av片在线看 | 久久午夜免费视频 | 久久久久久久久淑女av国产精品 | 中文字幕精品在线视频 | 午色影院| 一级成人欧美一区在线观看 |