⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 2 页
字号:
      ejbCreate 方法插入到数据库中的,但Entity Bean 同样能通过客户端程序定位这条数据。</FONT></P>
      <P class=line><FONT color=#386490>  <B>ejbPostCreate 
      方法</B><BR>  对于每一个ejbCreate 方法,开发人员必须在Entity Bean中写一个ejbPostCreate 方法,EJB 
      容器在调用完ejbCreate 以后,就立即调用ejbPostCreate ,和 ejbCreate 方法不一样,ejbPostCreate 
      方法可以调用 getPrimaryKey 等方法,通常ejbPostCreate 方法是空的。</FONT></P>
      <P class=line><FONT color=#386490>  <B>ejbRemove 方法</B><BR>  当客户端通过调用 
      remove 方法来删除一个 Entity Bean 的状态数据时,EJB 容器调用 ejbRemove 方法,ejbRemove 
      方法从数据库中删除一个Entity Bean 状态数据。代码如下:<BR>  public void ejbRemove() 
      {<BR>    try {<BR>      deleteRow(id);<BR>    } catch (Exception 
      ex){<BR>      throw new EJBException 
      ex("ejbRemove:"+exgetmessage());<BR>    }<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  如果ejbRemove 
      方法遇到系统级错误,将执行javax.ejb.EJBException. 
      如果遇到应用级错误,将执行javax.ejb.RemoveException。<BR>  entity bean 的状态数据也可以通过数据库的 
      delete 语句直接删除数据。</FONT></P>
      <P class=line><FONT color=#386490>  <B>EjbLoad 方法和 ejbStore 
      方法</B><BR>  EJB 容器需要维持 Entity Bean 的实例变量与数据库中相应值的同步,这需要调用 ejbLaod 
      方法和ejbStore 方法。ejbLoad 方法用数据库中的数据刷新变量的值,ejbStore 
      方法把变量的值写入到数据库中。客户端不能调用  <BR>ejbLoad 方法和ejbStore 
      方法。<BR>  如果业务处理的方法关系到事物处理,EJB 容器要在业务处理方法调用之前调用 ejbLoad 
      方法刷新数据,业务处理方法执行之后,EJB 容器又立即调用 ejbStore 方法把数据存储到数据库中。因为 EJB 
      容器调用ejbLoad方法和ejbStore 方法,开发人员在业务处理方法中不必刷新和存储实例变量的值。<BR>  如果ejbLoad 
      方法和ejbStore 方法不能在低层数据库中定位 Entity Bean,将执行 
      javax.ejb.NoSuchEntityException。<BR>  在 AccountEJB 类中,ejbLoad 方法调用 loadRow 
      方法,loadRow 则发出一个 select 语句从数据库提取数据分配给实例变量;ejbStore 方法调用 storeRow 
      方法,storeRow 方法则用 update 语句把实例变量的值存储到数据库。代码如下:</FONT></P>
      <P class=line><FONT color=#386490>  public void 
      ejbLoad(){<BR>    try{<BR>      loadRow();<BR>    }catch (Exception 
      ex){<BR>      throw new EJBException 
      ("ejbLoad:"+ex.getMessage());<BR>    }<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  public void 
      ejbStore(){<BR>    try{<BR>      storeRow();<BR>    }catch (Exception 
      ex){<BR>      throw new EJBException 
      ("ejbStore:"+ex.getMessage());<BR>    }<BR>  }</FONT></P>
      <P class=line><FONT color=#386490> <B> Finder 方法 :</B><BR>  Finder 
      方法允许客户端查找 entity bean ,AccountClient 中有三种方法查找entity bean:<BR>    Account 
      jones = home.findByPrimaryKey("836");<BR>    Collection c 
      home.findByLastName("Smith");<BR>    Collection c 
      home.findInRange(20.00,99.00);<BR>  Entity bean 类必须实现相应的方法,并且文件名以ejbFind 
      前缀开始,如:AccountEJB 类实现 ejbFindByLastName 的方法如下:<BR>  public Collection 
      ejbFinfBylastName(String lastName)<BR>    throw FinderException 
      {<BR>    Collection result;<BR>    Try {<BR>      Result = 
      selectByLastName(lastName);<BR>    } catch (Exception ex) {<BR>      throw 
      new EJBException("ejbFindByLastName" + 
      ex.getMessage());<BR>    }<BR>    if (result.isEmpty()){<BR>      throw 
      new ObjectNotFoundException("No row found.");<BR>    }<BR>    else 
      {<BR>      return result;<BR>    }<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  应用系统中特定的 finder ,如 ejbFindByLastName 
      和ejbFindInRange,是可选的,但是必须含有 ejbFindByPrimaryKey 方法,ejbFindByPrimaryKey 
      方法用主键作参数,用来定位一个 entity bean 的状态数据,下面是 ejbFindByPrimaryKey 
      方法的代码:<BR>  public String ejbFindByPrimaryKey(String 
      primaryKey)<BR>    throws FinderException {<BR>    boolean 
      result;</FONT></P>
      <P class=line><FONT color=#386490>    try {<BR>      result = 
      selectByPrimaryKey(primaryKey);<BR>    } catch (Exception ex) 
      {<BR>      throw new EJBException("ejbFindByPrimaryKey: " + 
      ex.getMessage());<BR>    }</FONT></P>
      <P class=line><FONT color=#386490>    if (result) {<BR>      return 
      primaryKey;<BR>    }<BR>    else {<BR>      throw new 
      ObjectNotFoundException ("Row for id " + primaryKey + " not 
      found.");<BR>    }<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  ejbFindByPrimaryKey 方法以 primaryKey 
      作为参数并返回它的值。<BR>注意:1.只有 EJB 容器可以调用ejbFindByPrimaryKey,而客户端不能直接调用 
      ejbFindByPrimaryKey 方法,客户端只能调用在 home 接口中定义的 findByPrimaryKey。<BR>   2.在 
      entity bean 类中开发人员必须实现ejbFindByPrimaryKey 方法。<BR>   3.一个 finder 方法的名字必须以 
      ejbFind 作为前缀。<BR>   4.返回值必须是主键或者是一个主键的集合。</FONT></P>
      <P class=line><FONT color=#386490>  throw 子句可以包含 
      javax.ejb.FinderException,和其他别的例外处理例程。如果一个finder 
      方法只要求返回唯一一个主键,如果主键不存在,则应该执行 
      javax.ejb.ObjectNotFoundException,ObjectNotFoundException 
      是FoundException的一个子类;如果 finder 方法要求返回的是一个主键的集合,则应该执行 FinderException 
      来处理。</FONT></P>
      <P class=line><FONT color=#386490> <B> 业务处理方法</B><BR><BR>  业务处理方法包含想在 
      Entity Bean 中实现的业务处理逻辑。通常业务处理方法不存取数据库,这允许开发人员可以把业务处理逻辑从数据库存取中独立出来。<BR>  在 
      AccountEJB entity bean 中包含下面的业务处理方法:<BR>  public void debit(double 
      amount)<BR>    throw InsufficientBalanceException {<BR>    if (balance - 
      amount &lt;0){<BR>      throw new 
      InsufficientBalanceException();<BR>    }<BR>    balance -= 
      amount;<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  public void credit (double amount) 
      {<BR>    balance += amount;<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  public String getFirstName() 
      {<BR>    return firstName;<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  public String getLastName() 
      {<BR>    return lastName;<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  public double getBalance() 
      {<BR>    return balance;<BR>  }</FONT></P>
      <P class=line><FONT color=#386490>  AccountClient 
      程序中调用业务处理方法:<BR>    Account duke = 
      home.create("123","Duke","Earl",0.00);<BR>    Duke.credit(88.50);<BR>    Duke.debit(20.25);<BR>    Double 
      balance = duke.getBalance();<BR>注意:1、业务处理方法的名称不能和 EJB 体系中定义的方法的名称冲突,其他的要求和 
      entity bean 和 sesson bean 中其它方法的要求相同。<BR>   2、可以在throw 
      子句中包含应用程序定义的例外处理例程,如 debit 
      方法执行InsufficientBalanceException。为了识别系统级错误,业务处理逻辑应该调用 
      javax.ejb.EJBException。</FONT></P>
      <P class=line><FONT color=#386490>下面是对 AccountEJB 类中存取数据库的总结:<BR><IMG 
      height=186 src="ejb2.gif" tppabs="http://www.chinajavaworld.com/doc/ejb/images/ejb2.gif" width=570> 
      <BR><BR>  因为业务处理方法中不需要存取数据库,所以在 AccountEJB 类中的业务处理方法没有存取数据库。但业务处理方法可以通过 
      EJB 容器调用 ejbStore 来修改实例变量。当然开发人员也可以在 AccountEJB 
      类的业务处理方法中存取数据库,这依赖于应用程序的具体要求,在存取数据库之前必须连接数据库。<BR><BR>  <B>Home 
      接口(Interface)</B><BR>  <BR>  在home 接口中定义让客户端创建和查找 entity bean 的方法。Account 
      Home 接口如下:<BR>  import java.util.Collection;<BR>  import 
      java.rmi.RemoteException;<BR>  import javax.ejb.*;</FONT></P>
      <P class=line><FONT color=#386490>  public interface AccountHome extends 
      EJBHome {<BR>    public Account create(String id, String firstName, String 
      lastName, double balance)<BR>      throws RemoteException, 
      CreateException;<BR> <BR>    public Account findByPrimaryKey(String id) 
      <BR>      throws FinderException, RemoteException;<BR>  <BR>    public 
      Collection findByLastName(String lastName)<BR>      throws 
      FinderException, RemoteException;</FONT></P>
      <P class=line><FONT color=#386490>    public Collection findInRange(double 
      low, double high)<BR>      throws FinderException, 
      RemoteException;<BR>  }<BR>  在Home 接口中,每一种finder 方法必须和 entity bean 类中的 
      finder 方法对应;finder 方法的名称必须以 find 开始,就象 entity bean 类中的 finder 方法必须以 
      ejbFind 一样,例如:AccountHome 类中定义的findByLastName 方法和AccountEJB 类中实现的 
      ejbFindByLastName 方法。</FONT></P>
      <P class=line><FONT color=#386490>  <B>Remote 接口</B><BR>  <BR>  Remote 
      接口定义客户端可以调用的业务处理方法,Account remote 接口的代码如下:</FONT></P>
      <P class=line><FONT color=#386490>  import 
      javax.ejb.EJBObject;<BR>  import java.rmi.RemoteException;</FONT></P>
      <P class=line><FONT color=#386490>  public interface Account extends 
      EJBObject {<BR>    public void debit(double amount)<BR>      throws 
      InsufficientBalanceException, RemoteException;<BR>    public void 
      credit(double amount)<BR>      throws RemoteException;</FONT></P>
      <P class=line><FONT color=#386490>    public String 
      getFirstName()<BR>      throws RemoteException;</FONT></P>
      <P class=line><FONT color=#386490>    public String 
      getLastName()<BR>      throws RemoteException;</FONT></P>
      <P><SPAN class=line><FONT color=#386490>    public double 
      getBalance()<BR>      throws 
      RemoteException;<BR>  }<BR><BR></FONT></SPAN></P>
      <P></P>
        </td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -