|
WebLogic Server的EJB容器提供两种不同的实体bean类型:Read-Only 实体beans 和Read-Write 实体beans。Read-Only 实体beans 支持高级群集缓存。
实体beans是具有事务功能的对象。理解事务和持久性之间的关系是很重要的。当实体bean的一个实例首次在事务中使用时,将会从数据库来刷新它的状态。对实体bean状态的任何修改会立刻刷新到数据库中,而且会是在事务提交之前完成。
让我们来看一个Employee 实体bean的例子,它具有所需的事务属性。可以假设我们在一个单独的事务中创建了这个bean,而且当前它有一个指向Employee实例的引用。
Employee e = ...
String name = e.getName();
e.setSalary(e.getSalary() * 2);
e.setLevel(e.getLevel() + 1);
从上面的代码片断中得出的重要发现是调用者没有启动事务。因为bean是使用必需的事务属性来部署的,每个方法都作为一个单独的事务运行,并加载、存储到数据库中。在这个例子中,每一个getXXX方法导致了一次数据库读操作,而每个setXXX方法导致了一次数据库读操作和一次数据库更新操作。这个简单的例子里有五个单独的事务,并有五次数据库读操作(SELECTs)和两次更新操作。
Employee e = ...
tx.begin();
String name = e.getName();
e.setSalary(e.getSalary() * 2);
e.setLevel(e.getLevel() + 1);
tx.commit();
上面这个代码样例用单个事务包装了对Employee 实体bean的调用。在这个示例代码中使用了一个UserTransaction的引用,用手工方式开始并提交事务。这些功能也可以用一个session bean来实现,它需要使用一个可用容器管理的事务,然后在容器事务中调用实体beans。
当所有的业务方法都在一个单独的事务中执行时,只存在两种数据库访问。第一个getName调用产生了一个从数据库加载的SELECT语句。随后的getXXX和setXXX 方法没有导致任何数据库访问,因为它们在同一个事务中,而且数据已经被加载了。在事务提交时,将执行一个UPDATE语句向数据库写入新的"salary"和新的"level"。
1
2
下一页>>
|