2017-02-23 1 views
0

eventI에는 여러 사용자가있는 CDI 이벤트 (한정자가없는 eventA)가 있습니다. 특수한 경우에는 특정 한정자 (예 : qualifierX)로 eventA를 실행해야합니다. 이제 eventA의 모든 소비자는 본질적으로 eventA (qualifierX가 있거나없는)를받습니다.특정 규정자를 사용하여 CDI 이벤트를 표시하지 않음

내 소비자가 qualifierX없이 eventA 만 관찰하는 행동을 유지하고 싶습니다.

P. 나는 모든 소비자를 수정할 수 없다.

eventA를 하위 eventB로 확장하고이 eventB를 시작하는 것에 대해 생각했지만 이벤트 A 관찰자도 트리거합니다.

CDI에서이를 직접 수행 할 수 있습니까?

+0

소비자가 한정자없이 'EventA'만 관찰하게하려면 '@Observes @Default EventA'로 정의해야합니다. 당신이 말한대로, 그들은 이제'@ Any' 이벤트에 묶여 있습니다 - 따라서 그들은 페이로드 유형이 맞는 한 이벤트를 받게 될 것입니다. ** 확장 **에 대해서 - 작동하지 않을 경우,'EventB'는 여전히'EventA'의 타입을 가지므로, 원래의 관찰자에게 통보 할 것입니다. ** 그러나, 당신이'EventA' 클래스 **를 바꿀 수 있다면, 당신은 슈퍼 클래스 ('MyEvent')를 만들고'EventA extends MyEvent'를 가질 것입니다. 그런 다음 MyEvent를 사용하여 이벤트를 시작하면 원래 관찰자에게 알리지 않습니다. – Siliarus

+0

또한'ProcessObserverMethod'를 찾고 한정자를 수정하는 CDI 확장을 작성할 수 있습니다. –

+0

@Siliarus 나는이 해결책으로 갈 것이라고 생각한다. 감사합니다. –

답변

0

당신이 @Observes @Default EventA로 정의해야보다 만 한정자없이 EventA을 관찰하기 위해 소비자 싶습니다. 당신이 말하는 바에 따르면 그들은 이제 @Any 이벤트에 묶여 있습니다 - 따라서 페이로드 유형이 인 경우 이벤트를 수신하게됩니다.

확장 기능 - 작동하지 않는 경우 EventB은 여전히 ​​EventA 유형을 가지므로 원래 관찰자에게 알립니다. 그러나 EventA 클래스를 변경할 수있는 경우 수퍼 클래스 (MyEvent)을 만들고 EventA extends MyEvent을 가질 수 있습니다. 그런 다음 MyEvent과 함께 이벤트를 실행하면 원래 관찰자에게이 표시되지 않습니다.

관련 문제