JConsole中的连接:简单的localhost:1099 或 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
1. 可以在Java命令行里定义, 如:
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099
在生产环境,最好再带上密码控制:
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.password.file=conf\jmxremote.password -Dcom.sun.management.jmxremote.access.file=conf\jmxremote.access
jmxremote.password与jmxremote.access文件参见showcase/assembly/conf/production目录
安全原因这两个文件要求只读,在windows下可用此命令设置 cacls jmxremote.password /P your_login_name:R
2. 在spring的ApplicationContext中定义
使用MBean方式见ServerConfigMBean与ServerConfig,定义符合XXXMBean接口与XXX实现命名规则的类即可。
使用annotation方式见TraceMBean,Log4jMBean与QueueHolder:
@ManagedResource(objectName = "SpringSide:type=Log4jManagement,name=log4jManagement", description = "Log4j Management Bean") public class Log4jMBean { @ManagedAttribute(description = "Logging level of the root logger") public String getRootLoggerLevel() { Logger root = Logger.getRootLogger(); return root.getLevel().toString(); } @ManagedOperation(description = "Set the new logging level to the logger") @ManagedOperationParameters( { @ManagedOperationParameter(name = "loggerName", description = "Logger name"), @ManagedOperationParameter(name = "newlevel", description = "New level") }) public void setLoggerLevel(String loggerName, String newLevel) { Logger logger = Logger.getLogger(loggerName); Level level = Level.toLevel(newLevel); logger.setLevel(level); }
使用了Spring的自动导出 <context:mbean-export default-domain="Showcase" registration="replaceExisting" />,快速导出所有用annotation标注的MBean. 另外所有其中接口与实现的命名规则需符合默认的 XXXMBean(接口) 与 XXX(实现)的也被被默认导出.
使用用annotation可以随意自定义MBean的命名空间,而使用MBean定义时则默认为到Custom, 如果需要改变,则需要在applicationContext.xml放弃快速的JMX namespace方式,改为较长的方式,在xml中定义object name.