@Test public void testSyncNotificationException() { ServerNotificationManager manager = new ServerNotificationManager(); manager.setMuleContext(muleContext); manager.addInterfaceToType(CustomNotificationListener.class, CustomNotification.class); Notification notification = mock(CustomNotification.class); when(notification.isSynchronous()).thenReturn(true); NotificationListener notificationListener = mock(CustomNotificationListener.class); doThrow(new IllegalArgumentException()).when(notificationListener).onNotification(any(CustomNotification.class)); manager.addListener(notificationListener); manager.fireNotification(notification); verify(notificationListener, times(1)).onNotification(notification); }
protected void registerDefaultListeners() { manager.addListenerSubscription(listener1, notification -> "id1".equals(notification.getResourceIdentifier())); manager.addListener(listener2); }
@Test public void testDynamicResponseToDisablingInterfaces() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); assertStandardEventsEnabled(); // now disable listener 1 manager.disableInterface(Listener1.class); assertFalse("via subclass, but no listener", manager.isNotificationEnabled(Event1.class)); assertFalse("disabled", manager.isNotificationEnabled(SubEvent1.class)); assertFalse("via superclass, but no listener", manager.isNotificationEnabled(SubSubEvent1.class)); assertTrue("direct", manager.isNotificationEnabled(Event2.class)); assertTrue("via superclass", manager.isNotificationEnabled(SubEvent2.class)); assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class)); }
@Override protected ServerNotificationManager createNotificationManager() { ServerNotificationManager manager = new ServerNotificationManager(); manager.addInterfaceToType(MuleContextNotificationListener.class, MuleContextNotification.class); manager.addInterfaceToType(SecurityNotificationListener.class, SecurityNotification.class); manager.addInterfaceToType(ManagementNotificationListener.class, ManagementNotification.class); manager.addInterfaceToType(CustomNotificationListener.class, CustomNotification.class); manager.addInterfaceToType(ConnectionNotificationListener.class, ConnectionNotification.class); manager.addInterfaceToType(ExceptionNotificationListener.class, ExceptionNotification.class); manager.addInterfaceToType(ClusterNodeNotificationListener.class, ClusterNodeNotification.class); manager.addInterfaceToType(ExceptionNotificationListener.class, ExtensionNotification.class); return manager; } }
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof NotificationListener) { if (!muleContext.getNotificationManager().isListenerRegistered((NotificationListener) bean)) { muleContext.getNotificationManager().addListener((NotificationListener) bean); } } return bean; }
private void setupMessageProcessorNotificationListener(List<MessageProcessorNotification> notificationList) { muleContext.getNotificationManager().addInterfaceToType(MessageProcessorNotificationListener.class, MessageProcessorNotification.class); muleContext.getNotificationManager().addListener((MessageProcessorNotificationListener) notification -> { notificationList.add((MessageProcessorNotification) notification); }); }
@Override public void fire(NotificationActionDefinition action, TypedValue<?> data) { validateAction((Enum) action); notificationManager.fireNotification(new DefaultExtensionNotification(event, component, action, data)); }
@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof NotificationListener) { muleContext.getNotificationManager().addListener((NotificationListener) bean); } return bean; }
@Test public void testDynamicResponseToDisablingEvents() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); assertStandardEventsEnabled(); // now disable event 2 manager.disableType(Event2.class); assertTrue("via subclass", manager.isNotificationEnabled(Event1.class)); assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class)); assertFalse("disabled", manager.isNotificationEnabled(Event2.class)); assertFalse("no listener", manager.isNotificationEnabled(SubEvent2.class)); assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class)); // the subclass should be blocked too manager.addInterfaceToType(Listener2.class, SubEvent2.class); assertTrue("via subclass", manager.isNotificationEnabled(Event1.class)); assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class)); assertFalse("disabled", manager.isNotificationEnabled(Event2.class)); assertFalse("disabled", manager.isNotificationEnabled(SubEvent2.class)); assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class)); }
protected void registerDefaultEvents() throws ClassNotFoundException { manager.addInterfaceToType(Listener1.class, SubEvent1.class); manager.addInterfaceToType(Listener2.class, Event2.class); }
private void fireNotification(ServerNotificationManager serverNotificationManager, CoreEvent event, Processor processor, MessagingException exceptionThrown, int action) { if (serverNotificationManager != null && serverNotificationManager.isNotificationEnabled(MessageProcessorNotification.class)) { if (((Component) processor).getLocation() != null) { serverNotificationManager .fireNotification(createFrom(event, ((Component) processor).getLocation(), (Component) processor, exceptionThrown, action)); } } }
protected void handleNotificationListeners() { if (!muleContext.getNotificationManager().isDisposed()) { if (DefaultMuleConfiguration.isFlowTrace()) { muleContext.getNotificationManager().addListener(messageProcessorTextDebugger); muleContext.getNotificationManager().addListener(pipelineProcessorDebugger); } else { removeNotificationListeners(); } } }
protected void assertNoEventsEnabled() { assertFalse(manager.isNotificationEnabled(Event1.class)); assertFalse(manager.isNotificationEnabled(SubEvent1.class)); assertFalse(manager.isNotificationEnabled(SubSubEvent1.class)); assertFalse(manager.isNotificationEnabled(Event2.class)); assertFalse(manager.isNotificationEnabled(SubEvent2.class)); assertFalse(manager.isNotificationEnabled(Event3.class)); }
@Test public void testDynamicManagerDecisions() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); manager.setNotificationDynamic(true); OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); manager.disableType(Event2.class); assertFalse(decision.isNotificationEnabled(Event2.class)); }
@Test public void callDisposeIfInitFails() throws Exception { ServerNotificationManager mockNotificationManager = mock(ServerNotificationManager.class); doThrow(MuleRuntimeException.class).when(mockNotificationManager).initialise(); DefaultMuleContextBuilder muleContextBuilder = new DefaultMuleContextBuilder(APP); muleContextBuilder.setLifecycleManager(new MuleContextLifecycleManager()); muleContextBuilder.setNotificationManager(mockNotificationManager); DefaultMuleContext defaultMuleContext = (DefaultMuleContext) muleContextBuilder.buildMuleContext(); try { defaultMuleContext.initialise(); fail("exception expected"); } catch (Exception e) { verify(mockNotificationManager).dispose(); } }
private void disableNotifications(ServerNotificationManager notificationManager, Map<String, Class<? extends Notification>> eventMap, Map<String, Class<? extends NotificationListener>> interfaceMap) throws InitialisationException { for (NotificationConfig<?, ?> disabledNotification : disabledNotifications) { final Supplier<InitialisationException> noNotificationExceptionSupplier = () -> new InitialisationException(createStaticMessage("No notification '%s' declared in this applications plugins to disable. Expected one of %s", disabledNotification.getEventName(), eventMap.keySet().toString()), this); if (disabledNotification.isInterfaceExplicitlyConfigured()) { notificationManager .disableInterface(getInterfaceClass(disabledNotification, interfaceMap).orElseThrow(noNotificationExceptionSupplier)); } if (disabledNotification.isEventExplicitlyConfigured()) { notificationManager .disableType(getEventClass(disabledNotification, eventMap).orElseThrow(noNotificationExceptionSupplier)); } } }
@Before public void setUpListeners() { listener1 = new Listener1(); listener2 = new Listener2(); manager = new ServerNotificationManager(); }
/** * A new policy should only be generated when the configuration changes */ @Test public void testPolicyCaching() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); Policy policy = manager.getPolicy(); assertStandardEventsEnabled(); assertSame(policy, manager.getPolicy()); manager.disableType(Event2.class); assertNotSame(policy, manager.getPolicy()); }
/** * When the manager is not dynamic (the default), decisions should not change */ @Test public void testNonDynamicManagerDecisions() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); manager.disableType(Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); }
@Override public <N extends Notification> void registerListener(NotificationListener<N> listener, Predicate<N> selector) { requireNonNull(context.getNotificationManager(), serverNotificationManagerNotEnabled().getMessage()); requireNonNull(selector); context.getNotificationManager().addListenerSubscription(listener, selector); }