SeamFramework.orgCommunity Documentation

11장. 특성화

11.1. 특성화 기능 사용
11.2. 특성화 기능의 장점

이미 Web Beans 의존성 삽입 모델은 배치시 API 구현을 덮어쓰기 하게 합니다. 예를 들어, 다음과 같은 엔터프라이즈 Web Bean은 제품에서 API PaymentProcessor 구현을 제공합니다:

@CreditCard @Stateless

public class CreditCardPaymentProcessor 
        implements PaymentProcessor {
    ...
}

staging 환경에서, 다른 Web Bean을 사용하여 PaymentProcessor 구현을 덮어쓰기 합니다:

@CreditCard @Stateless @Staging

public class StagingCreditCardPaymentProcessor 
        implements PaymentProcessor {
    ...
}

StagingCreditCardPaymentProcessor를 사용하여 실행하려는 작업은 특정 시스템 배치에 AsyncPaymentProcessor를 완전 교체하는 것입니다. 여기서 배치 유형 @Staging은 기본값 배치 유형 @Production 보다 높은 우선 순위를 갖게 되므로 클라이언트는 다음과 같은 삽입 지점을 사용하게 됩니다:

@CreditCard PaymentProcessor ccpp

StagingCreditCardPaymentProcessor 인스턴스를 받고자 합니다.

불행하게도 여기에는 몇 가지 함정이 있습니다:

이러한 경우, 덮어 쓰기하려는 Web Bean은 런타임시 호출 가능해야 합니다 따라서, 덮어쓰기는 다소 개발자 오류를 초래하는 경우가 있습니다.

Web Beans는 특성화라는 특별 기능을 제공하여, 개발자들이 이러한 함정에 빠지지 않도록 돕습니다. 특성화 기능은 처음에는 조금 난해하게 보이지만, 익숙해 지면 사용하기 쉬우며 제공되는 추가 보안 기능에 만족하실 것입니다.

특성화는 심플 Web Beans 및 엔터프라이즈 Web Beans에만 있는 기능입니다. 특성화 기능을 사용하려면 높은 우선 순위의 Web Bean은 다음 사항을 따라야 합니다:

@Stateless @Staging @Specializes

public class StagingCreditCardPaymentProcessor 
        extends CreditCardPaymentProcessor {
    ...
}

높은 우선 순위의 Web Bean이 해당 상위클래스를 특성화한다고 합니다.

특성화 기능 사용시:

예에서 CreditCardPaymentProcessor@CreditCard 바인딩 유형은 StagingCreditCardPaymentProcessor에 의해 전승됩니다.

Web Bean 관리자는 다음 사항을 유효화합니다:

이러한 조건을 위반할 경우, Web Bean 관리자는 초기화시 예외 처리를 넘기게 됩니다.

따라서, @Specializes라고 어노테이션된 Web Bean이 배치되어 활성화된 시스템의 어떤 배치에서도 상위클래스는 절대로 호출되지 않음을 확인할 수 있습니다.