Oracle网站上的所有文档和我到目前为止找到的所有示例仅显示如何通过远程连接或本地MBeanServer
的实例获取对此MBean的引用。
提到本地连接的一点点含糊不清:
MBean服务器的绝对JNDI名称。 JNDI名称必须以
/jndi/
后跟一个表中描述的JNDI名称 4-1。
表4-1显示:
MBean Server JNDI Name
Domain Runtime MBean Server weblogic.management.mbeanservers.domainruntime
这不起作用,我尝试转储JNDI树,但在那里找不到任何相关内容。
我在AdminServer
,所以这不是问题。
我可以找到的指令可以获得对MBServer
实例的引用,但这不是我需要的;例如:(MBeanServer) ctx.lookup("java:comp/env/jmx/domainRuntime");
但这对我没有任何好处,它是MBeanServer
的一个实例,我不想用ObjectName
的东西挖掘所有间接。
我需要的是能够获得DomainRuntimeServiceMBean
的实例 - JavaDoc
答案 0 :(得分:2)
类型安全接口都是不推荐使用的,您必须手动执行查找/树步行。
从9.0开始,MBeanHome接口和所有类型安全的接口 不推荐使用WebLogic Server MBean。相反,JMX应用程序 与WebLogic Server MBean交互应该使用标准的JMX设计 客户使用的模式 用于发现MBean的javax.management.MBeanServerConnection接口, 属性和运行时的属性类型。
private InitialContext ctx;
private MBeanServer domain;
private ObjectName domainObjectName;
在构造函数中:
ctx = new InitialContext();
this.domain = (MBeanServer) ctx.lookup("java:comp/env/jmx/domainRuntime");
this.domainObjectName = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
在你的方法中:
final ObjectName dr = (ObjectName) this.domain.getAttribute(domainObjectName, "DomainRuntime");
final ObjectName dm = (ObjectName) this.domain.getAttribute(dr, "DeploymentManager");
final ObjectName[] adrs = (ObjectName[]) this.domain.getAttribute(dm, "AppDeploymentRuntimes");
for (final ObjectName on : adrs)
{
if (this.domain.getAttribute(on, "ApplicationName").equals(appName))
{
this.domain.invoke(on, "stop", null, null);
break;
}
}