public interface LoginStatsMBean {
int getFailedLogins();
int getSuccessLogins();
}
public class LoginStats implements LoginStatsMBean {
public int getFailedLogins() {
ServletContext ctx = Config.getServletContext();
Integer val = (Integer) ctx.getAttribute(Constants.FAILED_LOGINS_KEY);
return val == null ? 0 : val.intValue();
}
// getSuccessLogins 同理
}
從 ServletContext 讀取應用層級計數器。
JMXAgent 負責:
MBeanServer。LoginStatsMBean。JMXConnector(含 JNDI、RMI 註冊)。public class JMXAgent {
private MBeanServer server;
private JMXConnectorServer connectorServer;
public JMXAgent() {
// 1. 建立 MBeanServer
server = MBeanServerFactory.createMBeanServer(DOMAIN);
// 2. 註冊 MBean
server.registerMBean(new LoginStats(),
new ObjectName(DOMAIN + ":name=LoginStats"));
}
public void start() { /* 建立 URL、環境、啟動 connectorServer */ }
public void stop() { /* 停止 connectorServer、取消註冊 MBean */ }
}
StartupListener (ServletContextListener) 於 contextInitialized 調用 agent.start(),contextDestroyed 調用 agent.stop()。
本文來自編程入門網:原文連結