jmx in action 学习笔记(2)

本文介绍了如何通过JMX技术,使用五个关键类(SystemTimeAgent、SystemTimeMBean、SystemTime、SystemLoadMBean、SystemLoad)实现资源管理、HTTP接口暴露、MBean注册与监听,以及消息发送与接收。具体包括了SystemTimeAgent初始化MBeanServer、注册MBeans、启动HTTP适配器等步骤,并详细解释了SystemTime、SystemLoadMBean、SystemLoad类的功能与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里简单用jmx实现下agent对mbean的管理,以及notification的使用。

5个主要类:

SystemTimeAgent: 对资源进行管理的agent。它通过接入HtmlAdaptorServer,把管理的资源和管理方法通过http方式暴露给浏览器。我们可以通过浏览器来浏览资源属性和操作资源,甚至触发资源发送消息。

SystemTimeMBean: SystemTime的MBean接口

SystemTime: MBean实现。同时是消息接受者,它可以通过handleNotification对消息进行相应。

SystemLoadMBean: SystemLoad的MBean接口

SystemLoad: MBean实现. 同时是消息发送者,它可以通过emitTime()方法发送notification,相应订阅者可以接受到消息并相应

SystemTimeMBean

public interface SystemTimeMBean {
	Date getSystemTime();
	void setSystemTime(Date date);
	void printSystemTime();
}

SystemLoadMBean

public interface SystemLoadMBean {
	int getLoad();
	void setLoad(int load);
	void emitTime();
}

agent:

public class SystemTimeAgent {

	private MBeanServer mbs = null;
	
	SystemTimeAgent() {
		mbs = MBeanServerFactory.createMBeanServer("SystemTime");
		HtmlAdaptorServer adapter = new HtmlAdaptorServer();
		SystemTime st = new SystemTime();
		SystemLoad load = new SystemLoad();
		ObjectName stName = null;
		ObjectName loadName = null;
		ObjectName adapterName = null;
		try {
			stName = new ObjectName( "SystemTime:name=st1" );
			mbs.registerMBean( st, stName );

			adapterName = new ObjectName( "SystemTime:name=htmladapter,port=9092" );
			adapter.setPort(9092);
			mbs.registerMBean(adapter, adapterName);
			adapter.start();
			

			loadName = new ObjectName("SystemLoad:name1=load");
			mbs.registerMBean(load, loadName);
			mbs.addNotificationListener(loadName, st, null, null);
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main( String args[] )
	  {
	    System.out.println( "SystemTimeAgent is running" );
	    SystemTimeAgent agent = new SystemTimeAgent();
	  }
}


订阅者:SystemTime:

public class SystemTime implements SystemTimeMBean, NotificationListener {

	private Date time;
	
	public SystemTime() {
		time = new Date();
	}
	
	public SystemTime(String dateString) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			time = sdf.parse(dateString);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
	}
	
	@Override
	public Date getSystemTime() {
		return time;
	}

	@Override
	public void setSystemTime(Date date) {
		this.time = date;
	}

	@Override
	public void printSystemTime() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(sdf.format(time));
	}

	@Override
	public void handleNotification(Notification notification, Object handback) {
		if ("SystemLoad.notification" .equals(notification.getType())) {
			printSystemTime();
		}
	}

}

消息发布者:SystemLoad

public class SystemLoad extends NotificationBroadcasterSupport implements SystemLoadMBean {
	private int load;
	
	@Override
	public int getLoad() {
		return load;
	}


	@Override
	public void setLoad(int load) {
		this.load = load;
	}
	
	public SystemLoad() {
		load = (int)(100*Math.random());
	}
	
	@Override
	public void emitTime(){
		Notification notif = new Notification("SystemLoad.notification", this, -1, "load:"+load);
		sendNotification(notif);
	}
}


数据集介绍:多品类农业目标检测数据集 数据集名称:多品类农业目标检测数据集 图片数量: - 训练集:11,911张图片 - 验证集:422张图片 - 测试集:124张图片 - 总计:12,457张高质量图片 分类类别: 涵盖51个农业相关类别,包括水果(苹果、香蕉、芒果、葡萄)、蔬菜(卷心菜、黄瓜、茄子、菠菜)、坚果(杏仁、腰果、榛子、核桃)、调味作物(辣椒、生姜、大蒜)及肉类(牛肉、鸡肉、猪肉)等,完整覆盖农业生产链关键品类。 标注格式: YOLO格式,包含标准化边界框坐标及类别标签,可直接用于目标检测模型训练。 1. 农业自动化分拣系统 支持开发AI驱动的分拣机器人,精准识别水果成熟度、坚果品类及蔬菜质量,提升加工效率。 1. 智能农场监测 用于无人机或摄像头系统,实时检测作物生长状态、病虫害区域及成熟作物分布。 1. 食品加工质量控制 集成至生产线视觉系统,自动检测原料种类(如肉类分类、坚果筛选),确保加工合规性。 1. 农业科研与教育 为农业院校提供多品类检测基准数据,支持算法研究及教学案例开发。 全链路覆盖 从田间作物(甜玉米、土豆)到加工原料(肉类、坚果),覆盖农业生产-加工全流程检测需求。 标注专业性 YOLO标注经多轮校验,边界框紧密贴合目标,支持复杂场景下的密集目标检测(如混合坚果分拣)。 场景多样性 包含自然光照、阴影遮挡、多角度拍摄等真实农业环境数据,强化模型鲁棒性。 高扩展性 兼容YOLOv5/v7/v8等主流框架,支持快速迁移至分类、计数等衍生任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值