RSS
热门关键字:  script  ajax  java  测试脚本  浏览器菜单
当前位置 :| 主页>Jsp>

在J2EE平台上开发企业应用

来源:yesky 作者:ilamei 时间:2007-11-10 点击:

在J2EE平台上开发企业应用

2000-10-08 00:00 作者: ilamei 出处: yesky 责任编辑:
p>   在这次的教程中,我们将上次的用会话EJB:Calc换成实体EJB。作为客户的BonusServlet调用实体Bean,将社会保险号和奖金的信息存到数据库中去,在另一个时候,还可以从数据库中把这些信息重新取出来。数据库访问将第四层加到瘦客户端,成为了四层体系机结构的企业应用程序。

  J2EE SDK自带了一个Cloudscape数据库。用我们呆会儿提到的实体Bean例子来访问这个自带的数据库,并不需要我们另外去设定环境变量和参数。甚至在本例子中,并不需要你去写SQL语句和JDBC的代码就可以执行数据库的访问操作。是不是很神奇?其实,这些都是由J2EE的配置工具在配置实体Bean的时候产生了表和SQL代码。

  1. 创建一个实体Bean

  一个实体Bean代表了数据表中一行持久的数据。当创建一个实体Bean的时候,其代表的数据就写到相应的数据表中。产生一个新行。如果实体Bean的数据被更新,数据表中相应的行也要更新。所有这些表的创建和行的创建都不需要客户来写SQL代码。

  即使在服务器崩溃的情况下,实体Bean的数据也能保存下来,这就是所谓的实体Bean数据的持久性。如果在更新实体Bean的数据的时候服务器崩溃,数据库中的数据就是最后一次保存的数据。如果是在一个事务进行的时候服务器崩溃了,事务就必须回滚,免得部分提交导致数据库中数据被破坏。

BonusHome接口:这个Home接口和上个例子的会话Bean的Home接口最大的不同就是这个例子里面增加了findByPrimaryKey这个方法。这个finder方法把主键作为一个参数值。这个例子里面是社会保险号:

  creat方法将奖金值和主键做为参数。当BonusServlet来初始化Home接口并且调用其create方法的时候。容器生成一个BonusBean的实例,并且调用实例的ejbCreate方法。这里,Home接口的create方法和Bean实例的ejbCreate方法必须具有相同的参数。这样,才能够将主键通过容器从Home接口传递到Bean的实例。如果给定的主键在数据表里面有相应的记录,就会触发一个java.rmi.RemoteException异常。

以下是BonusHome的代码:

package Beans;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.EJBHome;
public interface BonusHome extends EJBHome {

public Bonus create(double bonus, String socsec)

throws CreateException, RemoteException;

public Bonus findByPrimaryKey(String socsec)

throws FinderException, RemoteException;

}

Bonus接口:创建了Home接口以后,容器就创建remote接口和实体Bean。Bonus接口里面声明了getBonus方法和getSocSec方法。这样Servlet就可以使用这两个方法从实体Bean中得到数据。

其代码如下:

package Beans;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Bonus extends EJBObject {

public double getBonus()

throws RemoteException;

public String getSocSec()

throws RemoteException;

}

下面用图来说明会话Bean和实体Bean的不同:

BonusBean:

  这是一个容器管理持续性的实体Bean。就是说由容器来处理和数据库打交道的操作以及一些事务处理的操作。不需要由客户编写Bean数据和数据库里的数据进行转换的代码。

  当Servlet调用BonusHome的create方法的时候,容器调用BonusBean的setEntityContext方法。传递给setEntityContext方法的实体上下文EntityContext有一个返回指向它本身的refenrence。也可以得到其对应的主键值。

  然后,容器调用ejbCreate方法,ejbCreate方法把数据值分配给Bean实例的变量。容器将这些数据写到数据库里面去。在ejbCreate方法之后,容器调用ejbPostCreate方法。这个简单的例子没有ejbPostCreate方法。

  另一个空方法是calback方法,由容器调用它来通知Bean,告诉Bean有事件要发生。如果是用的Bean管理持续性的实体Bean,写Bean的人必须要提供这些方法的实现代码。另外,如果你需要提供Bean自己的退出的清除代码和建立时初始化代码。这些清除和初始化的操作就会在Bean的生命周期的某个适当的时候被容器所调用。下面是这些空方法的简单描述。

  • ejbPassivate和ejbActivate方法:在Bean从存贮器调入调出,进行交换的时候,容器调用这两个方法。这个过程和虚拟存贮中页面的调入调出的概念有点相似。
  • ejbRemove方法:在客户调用Home接口的remove方法的时候,由容器调用相应的ejbRemove方法。
  • ejbLoad和ejbStore方法:在Bean的数据和数据库中的数据执行同步的时候,容器调用这两个方法。

  getBonus和getSocSec方法是客户用来从Bean的实例变量中取数据的方法。本例子没有用来往Bean实例变量写数据的set方法。当然,如果有的话,客户用这样的方法来设定Bean实例变量数据值。所有的Bean实例中的变量的值的改动都会使数据库中相应的记录的数据的改动。

package Beans;
import java.rmi.RemoteException;
import javax.ejb.CreateException;

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册