例如,对它进行优化,以便与单个实体企业 bean 实例配合使用。与 Java bean 包装器不同,复制助手合并了单个复制助手对象,该对象包含远程实体 bean 的属性的本地副本。注意:不支持仅具有本地客户机视图的企业 bean。
访问 bean 使用复制助手对象,它实质上是存储在访问 bean 中的用户选择的实体 bean 属性的高速缓存。这些属性的 getter 和 setter 方法直接处理本地高速缓存,而不是直接通过远程 getter 和 setter 调用来进行调用。 提供了一些方法来清除实际的企业 bean 数据库的高速缓存,并从实际的企业 bean 来刷新高速缓存。这明显地提高了具有大量属性的实体企业 bean 的性能,原因是发出单个远程调用来获取和设置大量属性要比对每个属性都发出远程调用的速度更快。
当创建复制助手时,将更改企业 bean 的远程接口以扩展 CopyHelper 接口和 EJBObject 接口。当创建复制助手对象时,可以选择所有企业 bean 属性或者只选择它们的子集。所选的属性被保存在企业 bean 的元模型中,如果您决定更改选择,将重新显示这些属性。
复制助手对象被存储在访问 bean 中。将 getter 和 setter 方法授予了本地复制助手对象而不是远程企业 bean 对象。要将复制助手中的更改落实给远程企业 bean,或者要从远程企业 bean 来刷新本地复制助手,客户机程序必须分别调用 commitCopyHelper() 和 refreshCopyHelper()。
必须根据用于定义 Getter 和 setter 方法的 JavaBeans™ 约定来为企业 bean 属性定义 getter 和 setter 方法。 若没有 getter 和 setter 方法,则将不能把相应的字段添加到复制助手中。getter 和 setter 方法还不应抛出任何异常。
一旦企业 bean 由访问 bean 实例化后,键对象就会与用户选择的企业 bean 属性一起存储在复制助手高速缓存中。 要获取访问 bean 的键对象,使用 __getKey() 方法。
当对已高速缓存的属性调用 getter 方法时,访问 bean 应遵从以下协议:
public static void main(String[] args) { String[] dataId = new String[] { "100001", "100002" }; for (int j = 0; j < 2; j++) { VehicleAccessBean Veh = new VehicleAccessBean(); Veh.setInit_id(new Long(Long.parseLong(dataId[j]))); try { Veh.refreshCopyHelper(); System.out.println("Car #" + Veh.getId + " is " + Veh.getColor()); } catch (Exception e) { System.out.println("Exception e:" + e); } } }