모든 액세스 Bean과 마찬가지로 Java Bean 랩퍼는 수퍼 클래스 com.ibm.ivj.ejb.runtime.AbstractAccessBean을 확장합니다.
Java Bean 랩퍼의 기본 프레임워크를 이해하려면 다음 절에 설명된 프레임워크 특성에 익숙해야 합니다.
이러한 절에 설명된 특성은 Java Bean 랩퍼의 필수 프레임워크로 구성되어 있을 뿐만 아니라 보다 복잡한 복사 헬퍼 액세스 Bean의 기초가 되는 기본 프레임워크로도 구성되어 있습니다.
홈 인터페이스 맵핑
단일 인스턴스 EJBObject를 리턴하는 홈 인터페이스 메소드는 Java Bean 생성자에 맵핑됩니다. 엔터프라이즈 Bean 인스턴스의 콜렉션을 리턴하는 홈 인터페이스 메소드는 해당 인스턴스의 액세스 Bean 유형을 리턴하는 메소드에 맵핑됩니다. 모든 메소드는 적합한 원격 인터페이스 메소드를 호출합니다.
Java Bean 랩퍼에는 간단하게 인수를 사용하지 않는 생성자인 no-arg 생성자가 있습니다. no-arg 생성자를 사용하는 경우 Java Bean 랩퍼는 초기화 지연을 수행합니다. 액세스 Bean이 인스턴스화된 경우 엔터프라이즈 Bean을 인스턴스화하지 않습니다. 원격 메소드 호출 시 엔터프라이즈 Bean이 아직 인스턴스화되지 않았으면 액세스 Bean이 엔터프라이즈 Bean을 인스턴스화합니다.
액세스 Bean 작성 마법사가 홈 인터페이스에 정의된 작성 또는 파인더 메소드 중 하나를 액세스 Bean의 no-arg 생성자에 맵핑하도록 프롬프트를 표시하면 이후에 액세스 Bean에는 no-arg 생성자에 맵핑된 작성 또는 파인더 메소드의 각 매개변수마다 하나의 init_xx 특성이 있습니다. 키 클래스를 CMP(Container-Managed Persistence) 엔터프라이즈 Bean의 작성 또는 파인더 메소드에서 사용하는 경우 키 클래스 대신 키 필드를 init_xx 특성으로 사용합니다. 키 필드는 보통 단순 유형으로 선언되므로 시각적 생성 도구가 액세스 Bean을 쉽게 사용할 수 있습니다. no-arg 생성자를 사용하는 경우 다른 호출보다 먼저 init_xx 특성을 액세스 Bean으로 설정해야 합니다. 액세스 Bean에는 각각 엔터프라이즈 Bean 홈 인터페이스에 정의된 작성 또는 파인더 메소드 중 하나에 해당하는 여러 개의 multiple-arg 생성자가 포함될 수 있습니다.
엔터프라이즈 Bean 인스턴스의 콜렉션을 리턴하는 홈 인터페이스의 각 파인더 메소드는 액세스 Bean의 파인더 메소드에 맵핑됩니다. 먼저 액세스 Bean을 인스턴스화한 후 적합한 파인더 메소드를 호출하여 액세스 Bean 인스턴스 콜렉션을 리턴해야 합니다. 엔터프라이즈 Bean을 인스턴스화하기 위해 액세스 Bean은 엔터프라이즈 Bean 홈 인터페이스에 정의된 작성 또는 파인더 메소드를 호출합니다. no-arg 생성자를 사용하는 경우 첫 번째 비즈니스 메소드를 호출할 때 액세스 Bean은 실제 엔터프라이즈 Bean만을 인스턴스화합니다.
액세스 Bean 런타임에는 EJBObject의 열거를 처리하는 클래스가 있습니다. EJBObject의 java.util.Enumeration을 리턴하는 홈 파인더 메소드의 경우 해당 액세스 Bean 메소드는 nextElement() 메소드가 서버 측에서 엔터프라이즈 Bean을 인스턴스화하는 특수 열거 클래스를 리턴하고 해당 EJBObject 참조를 사용하여 인스턴스화된 액세스 Bean을 리턴합니다. 엔터프라이즈 Bean은 액세스 Bean에서 파인더 메소드가 호출된 경우보다 nextElement()가 호출된 경우에만 인스턴스화됩니다. 또한 액세스 Bean을 수동으로 인스턴스화할 필요가 없습니다(EJBObject 참조에 기초). 콜렉션을 리턴하는 파인더가 지원되지만 모든 액세스 Bean을 인스턴스화하여 전체 콜렉션을 작성하므로 지속성 문제가 있습니다.
원격 인터페이스 맵핑
원격 인터페이스 메소드가 Java Bean 메소드에 맵핑됩니다. 엔터프라이즈 Bean 원격 메소드는 EJBObject를 리턴할 수도 있습니다. 이러한 메소드 유형이 액세스 Bean 클래스에서 생성된 경우 리턴 유형이 해당 액세스 Bean 유형으로 변경됩니다. 이 경우 클라이언트 프로그램이 액세스 Bean 유형만을 처리하고 액세스 Bean에서 제공하는 이점을 상속할 수 있습니다.
JNDI 맵핑
기본 JNDI 이름이 각 액세스 Bean 클래스로 생성됩니다. 코드 생성기는 기본적으로 홈 인터페이스 이름인 확장 편집기에 지정된 JNDI 이름을 사용합니다. Java Bean 랩퍼(복사 헬퍼)의 경우 setInit_JNDIName()을 사용하여 JNDI 이름을 변경할 수 있습니다.
일반적으로 JNDI 이름을 변경할 필요가 없습니다. 그러나 엔터프라이즈 Bean이 다른 홈에 배치된 경우 관리자는 JNDI 이름에 접두부를 추가하여 차이를 표시할 수 있습니다. 홈을 찾기 위해 액세스 Bean은 rootContext라고 하는 이름 서비스 컨텍스트를 확보합니다. 이름 서비스 URL 및 이름 서비스 유형을 아는 경우 이 컨텍스트를 생성할 수 있습니다. 액세스 Bean은 rootContext의 특성을 설정하는 두 개의 API를 제공합니다.
setInit_NameServiceTypeName()
setInit_NameServiceURLName()
그러나 클라이언트 프로그램을 WebSphere® 런타임 환경에서 실행하는 경우 rootContext가 자동으로 설정되므로 이러한 두 개의 API가 필요하지 않습니다.
Java Bean 랩퍼(및 복사 헬퍼)의 글로벌 JNDI URL 이름 및 유형을 설정하는 경우 두 쌍의 API가 제공됩니다. 첫 번째 API 쌍은 다음과 같습니다.
public void setInit_NameServiceTypeName(string_name)
public void setInit_NameServiceURLName(string_name)
호출된 액세스 Bean의 이름 서비스 특성을 수정하는 인스턴스 메소드입니다. 이 메소드는 액세스 Bean의 no-arg 생성자가 사용되는 경우에만 사용됩니다.
두 번째 API 쌍은 다음과 같습니다.
public static final setGlobal_NameServiceTypeName(string_name)
public static final setGlobal_NameServiceURLName(string_name)
클라이언트 프로그램에서 사용되는 Java Bean 랩퍼(및 복사 헬퍼)에 적용할 수 있는 정적 메소드입니다. 새 액세스 Bean을 인스턴스화하기 전에 서버 측에서 엔터프라이즈 Bean을 인스턴스화할 때 특정 액세스 Bean이 새 이름 서비스 유형 또는 URL을 사용하도록 이러한 메소드를 호출하십시오.
액세스 Bean의 여러 인스턴스가 동일한 홈(동일한 JNDI 이름 및 rootContext)을 사용하는 경우 액세스 Bean 클래스는 해당 엔터프라이즈 Bean 홈을 한 번만 찾습니다. 각 액세스 Bean 클래스는 클래스 레벨 캐시를 보유하여 엔터프라이즈 Bean을 인스턴스화할 때 성능을 향상시킵니다. 클라이언트의 VM이 활성화되어 있는 동안 액세스 Bean 런타임은 JNDI 이름, 이름 서비스 URL 및 이름 서비스 유형별로 색인화된 모든 홈 참조의 정적 캐시를 보관합니다. 클라이언트는 resetHomeCache()에 대한 호출을 발행하여 캐시를 재설정할 수 있으며 특정 홈 참조가 더 이상 올바르지 않은 경우에 유용합니다.
액세스 Bean 직렬화
액세스 Bean이 직렬화된 경우 예를 들어, 원격 인터페이스 참조(EJBObject 참조), 홈 인터페이스 참조 및 글로벌 JNDI 정보(이름, 이름 서비스 URL 및 이름 서비스 유형)와 같은 특정 액세스 Bean 특성이 직렬화되지 않습니다. 그러나 복사 헬퍼 액세스 Bean의 경우 속성의 캐시가 직렬화됩니다.
예제
다음 예제는 직원을 작성하는 사용자 프로그램입니다.
EmployeeAccessBean aEmployee = new EmployeeAccessBean ()
aEmployee.setInit_employeeNo ("100");
aEmployee.setName ("IBM");
aEmployee.setAddress ("1150 Eglinton Ave, Toronto");