如何解决如果在 Weblogic 集群上注册,则 MBean 不显示
场景是:
- 应用服务器:Weblogic 12.2.1.2
- 应用程序:企业应用程序
工作场景:
- 部署在管理服务器上的应用程序。
- JConsole 正确显示了我的 MXBean。
不工作的场景:
- 应用部署在 2 台托管服务器的集群上。
- 在每个托管服务器上配置 JMX。
- JConsole 不显示我的 MXBean。
下面是我的源代码相关片段。
public class JpaCacheDescriptor {
private String name;
private int size;
@ConstructorProperties({ "name","size" })
public JpaCacheDescriptor(String name,int size) {
this.name = name;
this.size = size;
}
// Not relevant
}
public interface JpaCacheManager {
List<JpaCacheDescriptor> getCaches();
void clearall();
}
@Slf4j
public class JpaCacheManagerImpl
extends StandardMBean
implements JpaCacheManager
{
private static ObjectName objectName;
private static MBeanServer getMBeanServer()
throws NamingException
{
InitialContext initialContext = new InitialContext();
return (MBeanServer)initialContext.lookup("java:comp/jmx/runtime");
}
public JpaCacheManagerImpl()
throws NotCompliantMBeanException
{
super(JpaCacheManager.class);
}
public static void register() {
log.info("{ }");
try {
objectName = new ObjectName(String.format(
"${wls.jmx.root}:name=${application.name},version=${application.version},node=%s,type=%s",System.getProperty("weblogic.Name"),JpaCacheManager.class.getSimpleName()
));
JpaCacheManagerImpl jpaCacheMBean = new JpaCacheManagerImpl();
StandardMBean standardMBean = new StandardMBean(jpaCacheMBean,JpaCacheManager.class,true); // Force MXBean which is not inferred by @MXBean and MXBean prefix!!!
getMBeanServer().registerMBean(standardMBean,objectName);
log.info("Registered as \"{}\".",objectName.getCanonicalName());
} catch (
InstanceAlreadyExistsException
| MalformedobjectNameException
| MBeanRegistrationException
| NamingException
| NotCompliantMBeanException exception
) {
objectName = null;
log.error(exception.getMessage(),exception);
}
}
public static void unregister() {
log.info("{ }");
if (null == objectName) {
log.warn("MBean not registered!");
} else {
try {
getMBeanServer().unregisterMBean(objectName);
log.info("MBean unregistered.");
}
catch (
InstanceNotFoundException
| MBeanRegistrationException
| NamingException exception
) {
log.error(exception.getMessage(),exception);
}
}
}
@Override
public List<JpaCacheDescriptor> getCaches() {
// Not relevant
}
@Override
public void clearall() {
// Not relevant
}
}
我花了很多时间寻找解决方案,但没有成功!
提前致谢。
解决方法
我直接从 Oracle ( https://blogs.oracle.com/weblogicserver/managing-weblogic-servers-with-jconsole ).
请看以下注意事项:
jconsole -J-Djava.class.path=$JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:$WL_HOME/server/lib/wljmxclient.jar \
-J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote \
-debug
Remote URL:
- Managed Server Runtime : service:jmx:iiop://<MANAGED_HOST>:<PORT>/jndi/weblogic.management.mbeanservers.runtime
- Domain Runtime : service:jmx:iiop://<ADMIN_HOST>:<PORT>/jndi/weblogic.management.mbeanservers.domainruntime
User: <USER_NAME>
Password: <PASSWORD>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。