9 什么是MBeanServer

MBeanServer是JMX代理层的核心组件,负责管理所有注册的MBean。本文详细介绍了MBeanServer的工作原理,ObjectName的构成方式,如何创建和查找MBeanServer实例等。

什么是MBeanServer 收藏
什么是MBeanServer

MBeanServer是一个包含所有注册MBean的仓库.它是JMX代理层的核心.JMX1.0规范提供一个接口叫 javax.management.MBeanServer. 所有管理的在MBean操作通过MBeanServer执行.使用MBeanServer实例,你能够管理所有MBean.每一个MBean具有一个唯一标志,叫ObjectName.

什么是ObjectName

ObjectName (javax.management.ObjectName)是一个类,唯一标志一个在MBeanServer的MBean.这个对象名称用于管理应用程序来标志MBean以便操作能够在适当的MBean上被调用.一个对象名称包含两部分.它们是

一个域名称
一个没有经过排序的一个或者多个关键属性集
域名称是一个大小写敏感的字符串,这个字符串可以包括任何除[: , = * ?]之外的字符.

域名称部分可以在一个对象名称里面忽略,如果这样的话,MBeanServer能够提供一个缺省的域名称.缺省的域名称将是DefaultDomain.

关键属性集组织对象名称的第二部分.一个关键属性是一个名称-值对,名称不需对应MBean的任意属性或者操作.关键属性集必须包含至少一个关键属性.它可以包含任意数量的关键属性,这些关键属性的顺序没有意义.

例如,如果我们描述一个海豚为MBean,那么一套对象名称可以是

Animals:name=dolphin,kind=fish

在这个对象名称中,字符串Animals 组成域名称, 关键属性集由两个关键属性描述:名称和类型,它们的值分别为dolphin和fish.

通用的对象名称描述 如以下语法:

[domain name]:property=value[,property=value]

如果域名称被省略, MBeanServer将提供一个缺省的域名称叫[DefaultDomain].至少必须包含一个关键属性.任意数量的关键属性都可以添加进来.

创建一个MBeanServer 实例

MBeanServer实例能够用MBeanServerFactory类提供的方法获取.MBeanServerFactory类提供了以下方法来获取MBeanServer实例:

public static MBeanServer createMBeanServer()

public static MBeanServer createMBeanServer(String domain)

public static MBeanServer newMBeanServer()

public static MBeanServer newMBeanServer(String domain)

在以上声明的方法中,字符串domain描述对象名称(object name)的域部分.createMBeanServer方法和newMBeanServer方法返回一个MBeanServer实例.这两个方法的区别在于createMBeanServer返回一个MBeanServer实例并且保存这个实例的关联以便能够用findMBeanServer方法访问这个实例.newMBeanServer方法将不保存这个被创建的MBeanServer的实例的任何关联.

如果使用一个变量的构造器创建一个MBeanServer实例,这个字符串变量将作为创建的MBeanServer实例的域名.如果没有变量的构造器被用来创建MBeanServer实例,那么域名称将用字符串DefaultDomain.

查找一个MBeanServer 实例

MBeanServerFactory类提供一个方法叫findMBeanServer用于一个指定MBeanServer实例或者所有MBeanServer实例能够被获取的情况.这个方法的声明为

public static ArrayList findMBeanServer(String id) 这里字符串id表明 MBeanServer 的标志符. 如果这个字符串为null, 那么返回所有在此JVM中注册的 MBeanServer . 如果想返回相应指定的MBeanServer实例,那么必须提供这个MBeanServer实例的相应字符串id. 这个字符串id能够通过 MBeanServerDelegateMBean 的StringId 属性获取.

MBeanServerDelegate MBean

无论一个MBeanServer何时被初始化,MBeanServerDelegate类被作为一个MBean注册,名字为JMImplementation:type=MBeanServerDelegate. 这个MBean提供关于这个 MBean 服务器的信息.MBeanServerDelegate MBean 具有七个只读属性,名字为 MBeanServerId, SpecificationName, SpecificationVersion, SpecificationVendor, ImplementationName, ImplementationVersion 和ImplementationVendor.

XMOJO项目5 的MBeanServerDelegate MBean 提供的属性的缺省值为:

属性名称 属性值
SpecificationVersion 1.0, Final Release
SpecificationVendor Sun Microsystems Inc.
ImplementationVersion 5
ImplementationVendor XMOJO (sponsered by AdventNet Inc.)
ImplementationName The XMOJO Project
MBeanServerId _1
SpecificationName Java Management Extensions Instrumentation and Agent Specification 

MBeanServerDelegate MBean 响应 MBeanServer 发出的广播消息.无论何时一个MBean被注册或者被注销,MBeanServerDelegate MBean 广播类型分别为jmx.mbean.created和jmx.mbean.deleted的消息到所有注册的监听器.

需要记住的几点

MBeanServer 维护一个注册的MBean.每一个MBean由一个唯一命名的模式叫对象名称(object name)区分.
MBeanServer 实例能够用MBeanServerFactory类的静态方法获得.
MBeanServerDelegate MBean 是一个MBeanServer的描述,也是MBeanServer发出消息的广播者.


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zhangliulin/archive/2008/02/17/2100192.aspx

weblogic.management.ManagementException: [Deployer:149001]No application named "crm" exists for operation "undeploy". at weblogic.deploy.internal.adminserver.operations.OperationHelper.assertAppIsNonNull(OperationHelper.java:968) at weblogic.deploy.internal.adminserver.operations.RemoveOperation.updateConfiguration(RemoveOperation.java:191) at weblogic.deploy.internal.adminserver.operations.AbstractOperation.updateConfigurationAndInitializeDeployment(AbstractOperation.java:478) at weblogic.deploy.internal.adminserver.operations.AbstractOperation.execute(AbstractOperation.java:301) at weblogic.deploy.internal.adminserver.operations.RemoveOperation.execute(RemoveOperation.java:84) at weblogic.management.deploy.internal.DeployerRuntimeImpl$2.run(DeployerRuntimeImpl.java:1034) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:137) at weblogic.management.deploy.internal.DeployerRuntimeImpl.performDeployerActions(DeployerRuntimeImpl.java:1028) at weblogic.management.deploy.internal.DeployerRuntimeImpl.undeploy(DeployerRuntimeImpl.java:513) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at weblogic.management.jmx.modelmbean.WLSModelMBean.invoke(WLSModelMBean.java:532) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.JMXContextInterceptor.invoke(JMXContextInterceptor.java:249) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.SecurityMBeanMgmtOpsInterceptor.invoke(SecurityMBeanMgmtOpsInterceptor.java:65) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.SecurityInterceptor.invoke(SecurityInterceptor.java:439) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.MBeanCICInterceptor.invoke(MBeanCICInterceptor.java:304) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.PartitionJMXInterceptor.invoke(PartitionJMXInterceptor.java:435) at weblogic.management.mbeanservers.domainruntime.internal.FederatedMBeanServerInterceptor.invoke(FederatedMBeanServerInterceptor.java:355) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$21.run(WLSMBeanServerInterceptorBase.java:589) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:587) at weblogic.management.mbeanservers.internal.CallerPartitionContextInterceptor.invoke(CallerPartitionContextInterceptor.java:217) at weblogic.management.jmx.mbeanserver.WLSMBeanServer.invoke(WLSMBeanServer.java:327) at weblogic.management.mbeanservers.internal.JMXConnectorSubjectForwarder$11$1.run(JMXConnectorSubjectForwarder.java:655) at java.security.AccessController.doPrivileged(Native Method) at weblogic.management.mbeanservers.internal.JMXConnectorSubjectForwarder$11.run(JMXConnectorSubjectForwarder.java:653) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:386) at weblogic.management.mbeanservers.internal.JMXConnectorSubjectForwarder.invoke(JMXConnectorSubjectForwarder.java:646) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) at java.security.AccessController.doPrivileged(Native Method) at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408) at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) at javax.management.remote.rmi.RMIConnectionImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:645) at weblogic.rmi.internal.BasicServerRef$2.run(BasicServerRef.java:534) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:386) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:163) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:531) at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:138) at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:655) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420) at weblogic.work.ExecuteThread.run(ExecuteThread.java:360) Unexpected Error Initializing Deployer: weblogic.management.ManagementException: [Deployer:149001]No application named "crm" exists for operation "undeploy". ------------------------------------ ARTIFACT DEPLOYMENT ------------------------------------------------ weblogic.Deployer invoked with options: -debug -stage -remote -verbose -upload -name crm -source /root/.jenkins/workspace/TEST_FN_CRM/dist/crm.war -targets AdminServer -adminurl t3://10.190.252.34:80 -user weblogic -deploy [WebLogicDeploymentManagerImpl.<init>():112] : Constructing DeploymentManager for Java EE version V1_4 deployments [WebLogicDeploymentManagerImpl.getNewConnection():155] : Connecting to admin server at 10.190.252.34:80, as user weblogic [ServerConnectionImpl.getEnvironment():317] : setting environment [ServerConnectionImpl.getEnvironment():320] : getting context using t3://10.190.252.34:80 [ServerConnectionImpl.getMBeanServer():268] : Connecting to MBeanServer at service:jmx:t3://10.190.252.34:80/jndi/weblogic.management.mbeanservers.domainruntime [ServerConnectionImpl.getMBeanServer():268] : Connecting to MBeanServer at service:jmx:t3://10.190.252.34:80/jndi/weblogic.management.mbeanservers.runtime [DomainManager.resetDomain():36] : Getting new domain [DomainManager.resetDomain():39] : Using pending domain: false [MBeanCache.addNotificationListener():133] : Adding notification listener for weblogic.deploy.api.spi.deploy.mbeans.TargetCache@2e2ff723 [MBeanCache.addNotificationListener():140] : Added notification listener for weblogic.deploy.api.spi.deploy.mbeans.TargetCache@2e2ff723 [MBeanCache.addNotificationListener():133] : Adding notification listener for weblogic.deploy.api.spi.deploy.mbeans.ModuleCache@7cf6a5f9 [MBeanCache.addNotificationListener():140] : Added notification listener for weblogic.deploy.api.spi.deploy.mbeans.ModuleCache@7cf6a5f9 [ServerConnectionImpl.initialize():193] : Connected to WLS domain: smecs [ServerConnectionImpl.setRemote():514] : Running in remote mode [ServerConnectionImpl.init():183] : Initializing ServerConnection : weblogic.deploy.api.spi.deploy.internal.ServerConnectionImpl@3ed242a4 [BasicOperation.dumpTmids():811] : Incoming tmids: [BasicOperation.dumpTmids():813] : {Target=AdminServer, WebLogicTargetType=server, Name=crm}, targeted=true [BasicOperation.deriveAppName():143] : appname established as: crm <Jul 17, 2025 8:25:59 AM CST> <Info> <J2EE Deployment SPI> <BEA-260121> <Initiating deploy operation for application, crm [archive: /root/.jenkins/workspace/TEST_FN_CRM/dist/crm.war], to AdminServer .> [BasicOperation.dumpTmids():811] : Incoming tmids: [BasicOperation.dumpTmids():813] : {Target=AdminServer, WebLogicTargetType=server, Name=crm}, targeted=true [BasicOperation.loadGeneralOptions():718] : Delete Files:false Timeout :3600000 Targets: AdminServer ModuleTargets={} SubModuleTargets={} } Files: null Deployment Plan: null App root: /tmp/root/./config/deployments/crm App config: /tmp/root/./config/deployments/crm/plan Partition: null ResourceGroup: null Deployment Options: {isRetireGracefully=true,isGracefulProductionToAdmin=false,isGracefulIgnoreSessions=false,rmiGracePeriod=-1,retireTimeoutSecs=-1,undeployAllVersions=false,archiveVersion=null,planVersion=null,isLibrary=false,libSpecVersion=null,libImplVersion=null,stageMode=stage,clusterTimeout=3600000,altDD=null,altWlsDD=null,name=crm,securityModel=null,securityValidationEnabled=false,versionIdentifier=null,isTestMode=false,forceUndeployTimeout=0,defaultSubmoduleTargets=true,timeout=0,deploymentPrincipalName=null,useExpiredLock=false,specifiedTargetsOnly=false,partition=null,resourceGroup=null,resourceGroupTemplate=null,uploadPath=null,specifiedModules=[],removePlanOverride=false,} 这个啥错?
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值