@ManagedResource(objectName = "Test:name=Cerberus")
public class Cerberus extends HandlerInterceptorAdapter implements NotificationPublisherAware {
private NotificationPublisher notificationPublisher;
private boolean opened = true;
@ManagedOperation
public void close() {
this.opened = false;
notificationPublisher.sendNotification(new Notification("Hades closed", this, 0));
}
@ManagedAttribute
public boolean isOpened() {
return opened;
}
@ManagedOperation
public void open() {
this.opened = true;
notificationPublisher.sendNotification(new Notification("Hades opened", this, 0));
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!opened) {
notificationPublisher.sendNotification(new Notification("Hades out of order", this, 0));
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
return opened;
}
public void setNotificationPublisher(NotificationPublisher notificationPublisher) {
this.notificationPublisher = notificationPublisher;
}
}
Again we will use the VisualVM for watching our managed bean. Run it, select tomcat on the left pane, switch to the MBeans tab, select Test and then Cerberus, and finally switch to the Notifications. You will see:
To watch the notifications coming from the managed bean you have to subscribe to them first, click on the "Subscribe" and switch to the Operations - run the close operation - and check what is visible in Notifications now:
Try to reach the URL to which the Cerberus is bound - you'll get 404 error in return (as expected), and another notification:
Running the open method will give you another one:
Now you may make yourself a cup of tea, and become a Big Brother for a while, watching the internals of your application ;)
No comments:
Post a Comment