Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

容器管理持续化示例

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]


myRoster.createPlayer(new PlayerDetails("P1", "Phil Jones", 
"goalkeeper", 100.00));

  2、RosterEJB

  RosterEJB这个session bean的createPlayer方法创建了PlayerEJB这个entity bean的一个新的实例。因为对PlayerEJB的访问是在本地进行的,所以create方法是在local home接口LocalPlayerHome中定义的。playerHome对象的类型是LocalPlayerHome。下面是createPlayer方法的源代码:


public void createPlayer(PlayerDetails details) { 
try { 
LocalPlayer player = playerHome.create(details.getId(), 
   details.getName(), details.getPosition(), 
   details.getSalary()); 
} catch (Exception ex) { 
throw new EJBException(ex.getMessage()); 
} 
}

  3、PlayerEJB

  ejbCreate方法通过调用set访问方法将输入参数赋予bean的持续化字段。在调用ejbCreate方法后,容器通过一个SQL INSERT语句将持续化字段存入数据库。下面是ejbCreate方法的代码:


public String ejbCreate (String id, String name, 
String position,double salary) throws CreateException { 
setPlayerId(id); 
setName(name); 
setPosition(position); 
setSalary(salary); 
return id; 
}

  将一个队员加入到一个运动队

  1、RosterClient

  RosterClient调用RosterEJB这个session bean中的名为addPlayer的商业方法。P1和T1参数分别是PlayerEJB实例和TeamEJB实例的主键。


 myRoster.addPlayer("P1", "T1");

  2、RosterEJB

  addPlayer方法分两步执行。首先,它调用findByPrimaryKey以定位PlayerEJB实例和TeamEJB实例。然后,它调用TeamEJB这个entity bean的addPlayer商业方法。下面是RosterEJB这个session bean中addPlayer方法的源代码:


public void addPlayer(String playerId, String teamId) { 
try { 
LocalTeam team = teamHome.findByPrimaryKey(teamId); 
LocalPlayer player = 
playerHome.findByPrimaryKey(playerId); 
team.addPlayer(player); 
} catch (Exception ex) { 
throw new EJBException(ex.getMessage()); 
} 
}

  3、TeamEJB

  TeamEJB这个entity bean有一个名为players的关联字段,这是一个标志队员所属队的Collection。对players关联字段的访问方法如下:


public abstract Collection getPlayers(); 
public abstract void setPlayers(Collection players);

  TeamEJB的addPlayer方法调用getPlayers访问方法以获取关联的LocalPlayer对象的Collection。然后,addPlayer方法调用Collection接口的add方法。下面是addPlayer方法的源代码:


public void addPlayer(LocalPlayer player) { 
try { 
Collection players = getPlayers(); 
players.add(player); 
} catch (Exception ex) { 
throw new EJBException(ex.getMessage()); 
} 
}

  删除一个队员

  1、RosterClient

  要删除一个队员P4,客户端会调用RosterEJB这个session bean中的removePlayer方法:


myRoster.removePlayer("P4");

  2、RosterEJB

  removePlayer方法通过调用findByPrimaryKey定位PlayerEJB实例,然后在这个实例中调用remove方法。这个调用将通知容器在数据库中删除与PlayerEJB实例相应的行。容器同时会从TeamEJB的players关联字段中删除相应项目。通过这个删除,容器自动更新TeamEJB-PlayerEJB关联关系。下面是RosterEJB中的removePlayer方法的源代码:


public void removePlayer(String playerId) { 
try { 
LocalPlayer player = 
playerHome.findByPrimaryKey(playerId); 
player.remove(); 
} catch (Exception ex) { 
throw new EJBException(ex.getMessage()); 
} 
}

  从一个运动队中去除一个队员

  1、RosterClient

  要将队员P2从运动队T1中去除,客户端会调用RosterEJB中的dropPlayer方法:


myRoster.dropPlayer("P2", "T1");

  2、RosterEJB

  dropPlayer方法通过调用PlayerEJB实例和TeamEJB实例的findByPrimaryKey方法获取这两个实例。然后,它调用TeamEJB的dropPlayer商业方法。RosterEJB的dropPlayer方法如下:



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:在GoF模式以外(1)   下一篇:Bean管理持续化实例

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章