JMX的功能主要通过远程调用RMI来实现。本文以获取c3po连接池连接数量为例(本文对c3po稍做了修改,以便监控):具体实现如下
import java.util.HashMap;
import java.util.Map;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JmxService {
private static final String C3P0_REGISTRY_OBJNAME ="com.mchange.v2.c3p0:type=C3P0Registry";
private static final String C3P0_REGISTRY_OPERNAME ="getPooledDataSourcesIdentity";
private String username = "controlRole";
private String password = "123qwe";
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
//sign 参数类型的说明
public Object invokeMBeanMethod(String url,String operName,Object[] params,String[] signs) throws Exception{
JMXConnector connector = null;
try {
JMXServiceURL serviceURL = new JMXServiceURL(url);
if(username == null || username.length()==0){
//不需要权限认证的连接器
connector = JMXConnectorFactory.connect(serviceURL);
}else{
Map<String,Object> environment = new HashMap<String,Object>();
environment.put(JMXConnector.CREDENTIALS, new String[] {username,password});
connector = JMXConnectorFactory.connect(serviceURL,environment);
}
//得到MBean服务连接
MBeanServerConnection connection =connector.getMBeanServerConnection();
//调用JMX功能方法,得到返回值
Object pdsId = connection.invoke(new ObjectName(C3P0_REGISTRY_OBJNAME), C3P0_REGISTRY_OPERNAME, new String[]{null}, new String[] {"java.lang.String"});
String objName = "com.mchange.v2.c3p0:type=PooledDataSource["+pdsId+"]";
Object res = connection.invoke(new ObjectName(objName), operName, params, signs);
return res;
} finally{
if(connector!=null)
connector.close();
}
}
public static void main(String[] args)throws Exception {
String url = "service:jmx:rmi:///jndi/rmi://192.168.6.3:9998/jmxrmi";
String operName = "getMaxPoolSize";
//String operName = "allIdentityTokens";
Object[] params = null;
String[] signs = null;
JmxService jmxService = new JmxService();
Object res = jmxService.invokeMBeanMethod(url,operName, params, signs);
System.out.println(res);
}
}
执行结果:10
分享到:
相关推荐
RMI允许跨网络调用对象方法,而JMX Connectors则是JMX和外部世界的桥梁,支持多种协议如JMX Remote Protocol,允许客户端通过网络连接到MBeanServer。 五、监控CPU利用率 在JMX中,可以使用MBeans获取操作系统级别...
代理类提供了与MBean相同的方法,简化了对远程资源的调用。 5. **连接器(Connector)**:JMX连接器提供客户端与MBeanServer之间的通信。有多种类型的连接器,如RMI(Remote Method Invocation)、JMXMP(JMX ...
`incrementCounter()`方法可以被调用来增加计数器的值,而`getCounter()`返回当前值。 接下来,MBeans需要注册到MBean服务器,这是JMX的核心组件,它负责管理所有的MBeans并处理管理请求。这通常通过`MBeanServer`...
在Java应用中,JMX允许你监控性能指标,控制应用程序配置,甚至远程管理应用程序。 在标题和描述中提到的"jmx所需jar包",通常是指为了在Java环境中使用JMX功能而必需的库文件。这些JAR文件包含了JMX API和其他相关...
- **MBean Server**:MBean Server是JMX架构的核心,负责管理MBean的生命周期,包括创建、注册、查找、删除MBean,以及调用MBean的方法。 - **MBean操作和属性**:MBean的操作和属性定义了MBean的功能和状态。属性...
2. **栈内存管理**:每个线程都有一个独立的栈,用于存储方法调用帧,包括局部变量、操作数栈和方法返回地址。 3. **垃圾回收**:JVM自动进行垃圾回收,释放不再使用的对象所占用的内存。GC策略包括分代收集、标记-...
例如,可以使用JMX API编写代码动态地调用MBean服务器的接口来创建新的MBean,或者发送通知来启动监控中的某些特定任务。这种能力极大地增强了网络监控系统的灵活性和动态配置能力。 综上所述,JMX技术在网络监控中...
MBeans可以是标准的、开放的或私有的,它们通过MBeanServer进行注册,然后可以通过JMX客户端工具进行访问和操作。MBeanServer是JMX架构的核心,它负责管理MBeans,并提供查询、通知和远程访问等功能。 "jmx-1_2_1-...
JMX允许通过RMI(远程方法调用)或HTTP等协议进行远程访问,提供了比SNMP更为复杂的管理功能。 JMX体系结构在网络管理系统中的应用,使得开发者能够轻松地整合多种管理功能到应用程序中,而不需要关注底层的网络...
JMX是一种Java平台的标准,它提供了一种管理和监控应用程序、操作系统和网络设备的方法。 描述中提到“用于获得JMX的相关信息”,这意味着cmdline-jmxclient-0.10.3是一个实用程序,允许用户通过命令行界面查询和...
CloudBees JMX Invoker允许通过脚本方式远程调用JMX服务,执行特定的管理操作或者获取应用程序的属性信息。这对于系统管理员和运维人员来说非常有用,因为他们可以远程监控和调整Java应用,而无需直接访问运行应用的...
- **操作**:客户端调用MBean的方法,执行管理任务。 - **通知**:MBean向客户端发送通知,报告状态变化。 ### 3.3 四种类型MBean介绍 - **标准MBean**:遵循预定义的Java接口。 - **模型MBean**:基于动态生成的...
所有对MBeans的操作都通过MBean服务器进行,包括创建、删除、查询和调用MBean的方法。 ### 4. MBean代理 MBean代理是访问MBean服务器的一种方式,它提供了更抽象的接口,简化了对MBeans的操作。JMX API提供了`...
- 自动化运维任务,通过脚本调用JMX接口进行批量操作。 开源软件的特性使得JMX Console Tools对社区开放,任何人都可以查看其源代码,贡献自己的改进,或者根据需要定制功能。这样的开放性促进了技术的共享和持续...
远程调试的核心是通过特定的网络通信协议(如JMX或JDWP)建立本地IDE与远程服务器之间的连接。IDE作为客户端发起调试请求,远程服务器上的应用响应这些请求,并根据请求执行相应的操作(如设置断点、查看变量值等)...
- 当远程服务器上的应用程序执行到断点时,IDEA将暂停并显示变量值,允许单步执行、查看调用堆栈、修改变量等操作。 7. **源码关联**: - 为了在IDEA中查看服务器端的源代码,需要确保IDEA中的项目已经包含了正确...
3. **MBean操作**:用户可以直接通过Argus JMX Browser执行MBean的操作方法,如调用方法、设置属性值,以实现对应用的动态调整。 4. **数据导出**:对于分析或报告需求,Argus提供了导出监控数据的功能,可以将收集...
4. **RMI**:RMI是Java语言中的一种远程调用机制,使得一个Java对象可以在一个JVM上执行另一个JVM上的对象的方法。RMI常用于分布式系统,如构建服务端和客户端之间的通信。 5. **JMX-RMI代理**:结合JMX和RMI,可以...
在远程监控中,这种模式常见于安全考虑,因为服务器通常有更多的权限和更开放的网络环境,如果服务器直接连接客户端,可能会引入安全隐患。通过反向连接,客户端可以控制何时、何地以及是否允许服务器获取其状态信息...