복사 헬퍼(액세스 Bean)

복사 헬퍼 액세스 Bean에는 Java™ Bean 랩퍼와 동일한 기본 특성이 있지만 자체의 추가 특성을 도입합니다.

예를 들어, 단일 엔터프라이즈 Bean 인스턴스에서 사용하도록 최적화되어 있습니다. Java Bean 랩퍼와 달리 복사 헬퍼는 원격 엔티티 Bean의 로컬 속성 사본이 있는 단일 복사 헬퍼 오브젝트를 통합합니다.

참고: Java 복사 헬퍼는 로컬 클라이언트 보기만 있는 EJB 2.x 모듈의 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. 속성의 값을 캐시에서 검색합니다.
참고: 클라이언트가 복사 헬퍼를 사용하는 경우 액세스하는 각 레코드마다 복사 헬퍼의 새 인스턴스를 작성해야 합니다. 다른 레코드에 액세스하기 위해 복사 헬퍼 오브젝트를 재사용하지 마십시오. 복사 헬퍼를 재사용해도 성능이 향상되지 않습니다.

액세스하는 각 레코드마다 새 복사 헬퍼 오브젝트를 작성하는 간단한 그림으로 다음 예제를 참조하십시오.

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);
		}
	}
}


피드백