JBoss JMX 框架

JBoss4采用JMX作为它的核心框架,JMX构成了一个服务总线体系,所有对服务的调用都通过此总线进行分发。
 
MbeanServer
下面是一个MbeanServer的关系图



 

从图中可以看出,MBeanServer持有一个MBean注册表,所有的MBean都必须登记到注册表中,
 
一个服务操作的执行过程
下图是一个服务操作的执行序列图
 

 
XMBean
XMBean是Xml MBean的缩写,即通过xml文件描述的MBean,下面是jboss-service.xml中JNDIView的mbean定义.
   <mbean code="org.jboss.naming.JNDIView"
     name="jboss:service=JNDIView"
     xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml">
     <attribute name="HANamingService">jboss:service=HAJNDI</attribute>
   </mbean>
其中: code指定服务组件的类名称或MBean的类名称;
name指定服务组件在注册表中的名称,必须是唯一的;
xmbean-dd指定mbean的xml描述文件;
 
下表列出了xmbean-dd和interface不同取值组合下mbean和service的实际类型;
mbean 类型
service 类型
xmbean-dd
interface
xmbean 定义
StandardMBean
code指定
null
not null
not used
code指定
 
null
null
not used
XMBean
code指定
length=0
not used
内置
XMBean
code指定
length>0
not used
xml文件
 
ServiceCreator根据mbean节点创建xmbean,然后登记到registry中。
 
----- BasicMBeanRegistry.java -----
 
public ObjectInstance registerMBean(Object object,
ObjectName name, Map valueMap) {
   // 1.取得MBeanInvoker
   MBeanCapability mbcap = MBeanCapability.of(object.getClass());
    int mbeanType = mbcap.getMBeanType();
 if (mbeanType == MBeanCapability.STANDARD_MBEAN) {
      invoker = new XMBean(object, XMBeanConstants.STANDARD_MBEAN);
 } else if (object instanceof MBeanInvoker) {
      invoker = (MBeanInvoker)object;
 } else if (mbeanType == MBeanCapability.DYNAMIC_MBEAN) {
      if( object instanceof RequiredModelMBean )
          invoker = new RequiredModelMBeanInvoker((DynamicMBean)object);
       else
         invoker = new RawDynamicInvoker((DynamicMBean)object);
 }
 
// 2.创建MBeanEntry并登记
MBeanEntry entry = new MBeanEntry(regName, invoker, object, valueMap);
add(entry);
 
// ......
}

你可能感兴趣的:(框架,xml,jboss)