59.10. CDI 이벤트 끝점
Camel 2.17에서 사용 가능
CDI 이벤트 끝점은 Camel 경로와 CDI 이벤트를 브리지하여 Camel 소비자 (resp. by Camel 생산자의 경우)에서 CDI 이벤트를 원활하게 관찰/사용할 수 있도록 (resp. produced/run)할 수 있습니다.
Camel CDI에서 제공하는 CdiEventEndpoint<T
>Bean을 사용하여 이벤트 유형이 T
인 CDI 이벤트를 관찰/사용할 수 있습니다. 예를 들면 다음과 같습니다.
@Inject CdiEventEndpoint<String> cdiEventEndpoint; from(cdiEventEndpoint).log("CDI event received: ${body}");
@Inject
CdiEventEndpoint<String> cdiEventEndpoint;
from(cdiEventEndpoint).log("CDI event received: ${body}");
이는 다음과 같습니다.
반대로 CdiEventEndpoint<T
>Bean을 사용하여 이벤트 유형이 T
인 / fire CDI 이벤트를 생성할 수 있습니다. 예를 들면 다음과 같습니다.
@Inject CdiEventEndpoint<String> cdiEventEndpoint; from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");
@Inject
CdiEventEndpoint<String> cdiEventEndpoint;
from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");
이는 다음과 같습니다.
또는 Java 8 lambda 표현식을 사용합니다.
특정 CdiEventEndpoint<
(resp.s)는 다음과 같이 매개변수화된 이벤트 유형(resp. into the event type)으로 자동 변환됩니다.
T
> 삽입 지점의 유형 변수 T
CDI 컨테이너에 Camel 컨텍스트가 여러 개인 경우 @ContextName
과 같은 Camel 컨텍스트를 사용하여 CdiEventEndpoint<T
> 삽입 지점을 확인할 수 있습니다. 예를 들면 다음과 같습니다.
CDI 이벤트 Camel 엔드포인트는 이벤트 유형 및 이벤트 유형의 각각의 고유한 조합에 대한 관찰자 메서드 를 동적으로 추가하고 컨테이너 유형 안전 관찰자 확인 에만 의존하여 가능한 한 효율적으로 구현할 수 있습니다.
또한 CDI의 안전한 유형과 Camel 구성 요소 모델의 동적 특성 간의 임피던스가 상당히 높기 때문에 URI 를 통해 CDI 이벤트 Camel 끝점의 인스턴스를 생성할 수 없습니다. 실제로 CDI 이벤트 구성 요소의 URI 형식은 다음과 같습니다.
cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]
cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]
기관 PayloadType
(resp. the QualifierType
)은 페이로드가 정규화된 페이로드(resp.ECDHE) 원시 유형인 URI인 경우, type 매개변수 섹션은 페이로드 매개 변수 유형에 대한 줄 바꿈으로 구분되어 있습니다. 예를 들어 다음과 같은 무명한 URI로 이어집니다.
cdi-event://org.apache.camel.cdi.example.EventPayload%3Cjava.lang.Integer%3E?qualifiers=org.apache.camel.cdi.example.FooQualifier%2Corg.apache.camel.cdi.example.BarQualifier
cdi-event://org.apache.camel.cdi.example.EventPayload%3Cjava.lang.Integer%3E?qualifiers=org.apache.camel.cdi.example.FooQualifier%2Corg.apache.camel.cdi.example.BarQualifier
하지만 이로 인해 CDI 컨테이너가 배포 단계에서 Camel 컨텍스트 모델을 검색할 수 없기 때문에 끝점 인스턴스와 관찰자 방법 간의 효율적인 바인딩을 방지할 수 있습니다.