NotificationEmitter
NotificationEmitter (알림 에미터 인터페이스)
알림을 발행하는 MBean이 구현하는 인터페이스예요. 리스너를 MBean에 알림 리스너로 등록할 수 있게 해줘요. NotificationBroadcaster를 확장해요.
본문
알림 전달(Notification dispatch): MBean이 알림을 발행할 때 addNotificationListener로 추가되고 이후 제거되지 않은 각 리스너를 고려해요. 필터가 제공되었는데 isNotificationEnabled가 false를 반환하면 리스너는 무시돼요. 그렇지 않으면 리스너의 handleNotification 메서드가 알림과 handback 객체로 호출돼요.
같은 리스너를 여러 번 추가하면 그 횟수만큼 고려돼요. 필터나 리스너 메서드가 Exception을 던지면 다른 리스너 호출을 막지 않아야 해요. Error를 던지면 그 지점에서 알림 처리 중단을 권장하며, 가능하면 알림 발신자에게 Error를 전파해야 해요.
새 코드는 NotificationBroadcaster 인터페이스보다 이 인터페이스를 사용해야 해요. 구현은 동기화에 주의해야 하며 리스너 호출 중 락을 보유하지 않는 것이 좋아요. 전달 중 리스너 목록이 바뀔 가능성에 대처하려면 CopyOnWriteArrayList를 사용하는 것이 좋은 전략이에요.
주요 메서드로는 addNotificationListener, removeNotificationListener(listener, filter, handback), getNotificationInfo()가 있어요. 세 인자를 받는 removeNotificationListener는 주어진 listener, filter, handback과 정확히 일치하는 리스너를 제거하며, 그런 리스너가 여러 개면 하나만 제거해요. 일치하는 리스너가 없거나 주어진 필터/handback으로 등록되지 않았으면 ListenerNotFoundException을 던져요.