`
ruijf
  • 浏览: 69733 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

基于JMX管理站点资源

阅读更多

一.How

1.创建配置文件的类,然后使用spring配置导出成MBean。

(1)创建配置类(基于spring管理的话其实就是POJO,不用实现MBean接口)

public class ParseHandlerMap{
	private Logger logger =Logger.getLogger(this.getClass());
	private Map<String, IUrlParseHandler> parseMap;
	private Map<String, String> loginURLMap;
	private String defaultLoginPath="http://www.test.com/Clients/login.html";

	public void setParseMap(Map<String, IUrlParseHandler> parseMap) {
		this.parseMap = parseMap;
	}
	public void setLoginURLMap(Map<String, String> loginURLMap) {
		this.loginURLMap = loginURLMap;
	}
	public void setDefaultLoginPath(String defaultLoginPath) {
		this.defaultLoginPath = defaultLoginPath;
	}
	public String getDefaultLoginPath() {
		return defaultLoginPath;
	}
	public Map<String, IUrlParseHandler> getParseMap() {
		return parseMap;
	}
	public Map<String, String> getLoginURLMap() {
		return loginURLMap;
	}

	//动态添加游戏解析器
	public String addHandler(String gameId) {
		if(!ParameterUtil.isPosiIntegerNum(gameId)){
			return "gameId is not number";
		}
		String className="com.test.Game"+gameId+"URLParseHandler";
		try {
			Class<?> clazz = Class.forName(className);
			IUrlParseHandler handler =(IUrlParseHandler)clazz.newInstance();
			parseMap.put(gameId, handler);
			return "add handler OK";

		} catch (ClassNotFoundException e) {
			logger.error("add handler fail",e);
			return "class not found";
		} catch (InstantiationException e) {
			logger.error("add handler fail",e);
			return "instance create fail";
		} catch (IllegalAccessException e) {
			logger.error("add handler fail",e);
			return "add handler fail";
		}

	}
	//动态删除解析器
	public String deleteHandler(String gameId) {
		parseMap.remove(gameId);
		return "removed";
	}

	public IUrlParseHandler getHandler(String gameId) {
		return parseMap.get(gameId);
	}
	//查看当前的解析器数量
	public int getHandlerNum(){
		return parseMap.size();
	}

	//添加游戏的登陆页面地址
	public String addLoginURL(String gameId, String url) {
		loginURLMap.put(gameId, url);
		return "OK";
	}
	//删除游戏的登陆页面地址
	public String deleteLoginURL(String gameId) {
		loginURLMap.remove(gameId);
		return "removed ok";
	}
	//查看游戏的登陆页面地址
	public String getLoginURL(String gameId) {
		if(loginURLMap==null || loginURLMap.isEmpty()){
			return defaultLoginPath;
		}else{
			String path = loginURLMap.get(gameId);
			if(path==null){
				return defaultLoginPath;
			}else{
				return path;
			}
		}
	}
}

 

2.spring导出MBean配置

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
        <property name="beans">
            <map>
		<!--导出MBean类-->
                <entry key="bean:name=parseHandlerMap" value-ref="parseHandlerMap"/>
            </map>
        </property>
        <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
    </bean>

    <bean id="parseHandlerMap" class="com.test.ParseHandlerMap"/>

 

3.虚拟机设置
启动java虚拟机时,增加虚拟机对JMX的支持,以及相应的权限设置.以Tomcat为例修改启动文件catalina.sh:
(1)增加以下配置:
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9999" //远程管理端口
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=true" //权限认证
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
(2)tomcat的lib目录增加jmxri.jar,jmxtools.jar包;
(3)创建管理权限文件
由模板文件$JAVA_HOME/jre/lib/management/jmxremote.password.template创建密码文件$JAVA_HOME/jre/lib/management/jmxremote.password;打开其中monitorRole和controlRole的角色并修改密码。monitorRole只有只读权限,controlRole可读可写。

二.使用JMX进行管理

1.客户端命令运行JConsole,打开java自带的管理工具,输入远程地址端口,以及账号密码

  

2.连接后选MBean标签,找到自定义的MBean的类,即可调用里面的方法更新配置,或者查看当前的配置

分享到:
评论

相关推荐

    Java资源包01

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包8

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包7

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包9

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包101

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics