Java 关于JMX示例的问题
基于我对MBean的理解,我编写了示例JMX MBean“PoolMBean”。我写这篇文章是为了管理和监视连接池。我的问题是,MBean是这样写的吗?此Mbean代码中是否存在与连接池无关的问题 1) Mbean方法可以返回什么类型的对象Java 关于JMX示例的问题,java,jmx,Java,Jmx,基于我对MBean的理解,我编写了示例JMX MBean“PoolMBean”。我写这篇文章是为了管理和监视连接池。我的问题是,MBean是这样写的吗?此Mbean代码中是否存在与连接池无关的问题 1) Mbean方法可以返回什么类型的对象 package pool; import java.util.Date; public class Connection { public Date createdAt; protected int u
package pool;
import java.util.Date;
public class Connection {
public Date createdAt;
protected int usedCount;
protected boolean isAvailable = true;
public Connection newConnection(){
Connection con= null;
/**
* Code for creating Connection
*/
return con;
}
public void writeDate(){
/**
* Code to write data in the stream
*/
usedCount++;
}
}
根据下面提供的“yazan jber”答案添加了此选项。 1) Mbean方法可以返回什么类型的对象?例如,如果
PoolMBean
具有返回totalPoolLinkedList
对象的getStatistics()
。在本例中,在JConsole
中,值显示为Unavailable
,但当我尝试使用HashMap
和String
对象时,它是否起作用?所以JConsole
不能读取所有内容,我的问题是它能读取什么
我已经看过了,这里的描述有点复杂。我从这个链接中得到的是,有OpenType、ArrayType
、CompositeType
、SimpleType
和tablerType
这些只处理
java.lang.Void
java.lang.Boolean
java.lang.Character
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.String
java.math.BigDecimal
java.math.biginger
java.util.Date
javax.management.ObjectName
CompositeData.class.getName()
tablerdata.class.getName()
MBean
应返回以下任何一个OpenType
如果我们想返回新类型应该实现的任何其他类型的CompositeData
接口,我不知道这个实现将如何帮助Jconsole读取打开的对象,这是另一个复杂的问题
要跟踪我的应用程序中的单个组件,我们应该有自己的MBean吗?如果我的理解是正确的,我可以使用简单的java类来实现这个目的,我在这里得到的额外好处是JConsole UI,不是吗?我没有运行代码,但它看起来很好,如果JMX客户机是java,并且可以访问相同的可序列化类,那么您可以返回任何可序列化对象,您的
复合数据将有一个方法返回其复合类型。该类型定义了复合数据的属性名称(键)JConsole
和其他JMX客户端可能会使用这些键从CompositeData
中访问数据回答这个问题可能已经太晚了-但是鉴于我目前正在研究JMX,我想尝试一下
回答的问题:
是的,在我看来,发布的代码是在应用程序中编写MBean的正确方法
建议使用自定义的MBean来管理应用程序公开的资源。哪些资源需要管理通常是设计时的决策。但据我了解,;我们希望管理对系统性能和稳定性有影响的资源,因此希望进行管理。一个很好的例子是实现管理接口的相关类,这样就可以从Solr管理控制台管理这些对象
虽然您可以使用自己的自定义实现来跟踪系统的各个组件,但使用MBean执行跟踪的优势并不限于jConsole**UI支持。通过使用标准JMX接口,您可以为符合JMX规范的任何管理应用程序提供开箱即用的管理功能。此外,它还支持对各种通信协议(如RMI)的管理,没有管理控制台和受管应用程序的SNMP etc担心底层协议的本质。页面提供了一系列使用JMX接口向应用程序添加监控功能的理由
希望这有帮助。您能重新检查更新后的问题吗?我不能在这里添加我的完整评论,因此作为问题本身的一部分添加。谢谢
package pool;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.LinkedList;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class ConnectionPool {
public static int maxPoolSize = 20;
public int currentPoolSize = 10;
public LinkedList<Connection> totalPool = new LinkedList<Connection>();
public LinkedList<Connection> availablePool = new LinkedList<Connection>();
public static ConnectionPool cp = new ConnectionPool();
private ConnectionPool(){
}
public synchronized Connection getConnection(){
Connection con = null;
/**
*
*/
availablePool.remove(con);
con.isAvailable = false;
return con;
}
public synchronized void returnConnection(Connection con){
/**
*
*/
availablePool.addFirst(con);
con.isAvailable = true;
}
public static void main(String a[]){
try{
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
Pool mbean = new Pool();
ObjectName name = new ObjectName("test.conMbean:key1=Pool");
server.registerMBean(mbean, name);
System.out.println("Let me see out put");
System.in.read();
}catch (Exception e) {
e.printStackTrace();
}
}
}
package pool;
public interface PoolMBean {
public int getCurrentPoolSize();
public int getMaxPoolSize();
public void setMaxPoolSize(int maxSize);
}
package pool;
public class Pool implements PoolMBean {
@Override
public int getCurrentPoolSize() {
return ConnectionPool.cp.currentPoolSize;
}
@Override
public int getMaxPoolSize() {
return ConnectionPool.maxPoolSize;
}
@Override
public void setMaxPoolSize(int maxSize) {
ConnectionPool.maxPoolSize = maxSize;
}
}