复制助手(访问 bean)

复制助手访问 bean 与 Java™ bean 包装器具有相同的基本特征,但是它增加了一些自己的其他特征。

例如,对它进行优化,以便与单个实体企业 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 应遵从以下协议:

  1. 如果高速缓存是空的或者只包含键对象,则使用 refreshCopyHelper() 来执行完全高速缓存刷新。
  2. 如果高速缓存不是空的并且不包含键对象,则首先刷新企业 bean 以更新可能已设置的任何属性,然后才完全刷新。
  3. 从高速缓存中检索属性的值。
注: 当客户机机使用复制助手时,必须为访问的每个记录创建一个新的复制助手访问 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);
		}
	}
}


反馈