JMXConfig config = Beans.getReference(JMXConfig.class);
// Obtém o servidor MBean onde anexaremos um listener para a notificação
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
NotificationManager notificationManager = Beans.getReference(NotificationManager.class);
MBeanManager mBeanManager = Beans.getReference(MBeanManager.class);
// Aqui obtemos o MBean de notificações já registrado pelo bootstrap
StringBuffer notificationMBeanName = new StringBuffer()
.append(config.getNotificationDomain() != null ? config.getNotificationDomain()
: "br.gov.frameworkdemoiselle.jmx").append(":name=").append(config.getNotificationMBeanName());
ObjectInstance instance = mBeanManager.findMBeanInstance(notificationMBeanName.toString());
// StringBuffer vazio
StringBuffer notificationBuffer = new StringBuffer();
// Este notification listener será chamado quando o Demoiselle enviar a notificação e vai colocar
// a mensagem enviada em "notificationBuffer"
NotificationListener listener = new TestNotificationListener(notificationBuffer);
try {
// Anexa o listener no servidor MBean
server.addNotificationListener(instance.getObjectName(), listener, null, null);
} catch (InstanceNotFoundException e) {
Assert.fail();
}
// Manda a notificação pelo Demoiselle
Notification notification = new DefaultNotification( new AttributeChangeMessage("Attribute Changed", "name", String.class, "Demoiselle 1", "Demoiselle 2") );
notificationManager.sendNotification(notification);
// Se o componente funcionou, o Demoiselle propagou a notificação para o servidor MBean e o listener preencheu
// o StringBuffer com nossa mensagem.
Assert.assertEquals("Attribute Changed: name = Demoiselle 2", notificationBuffer.toString());