WildFly看不到OperatingSystemMXBean?

时间:2017-05-02 11:39:46

标签: java wildfly wildfly-10

我有这段代码来读取物理内存:

com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
long physicalMemorySize =os.getTotalPhysicalMemorySize();
System.out.println("physicalMemorySize="+physicalMemorySize);

我有JDK 1.8.0_121(64位,在Windows上)
这段代码编译没有问题,我可以在控制台应用程序中运行它,运行正常 但是,当我将此代码放在WildFly 10服务器上的某个Bean或JSP页面时,它显示错误:

Caused by: java.lang.ClassNotFoundException: com.sun.management.OperatingSystemMXBean

WildFly使用完全相同的JDK,所以它应该看到这个类,如控制台应用程序看到它 该类在jdk1.8.0_121\jre\lib\rt.jar中,所以我不明白为什么WildFly会抱怨ClassNotFoundException。

有什么问题? 如何让WildFly运行该代码?

3 个答案:

答案 0 :(得分:3)

这可以通过在jboss-deployment-structure.xml中使用<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <deployment> <dependencies> <system> <paths> <path name="com/sun/management"/> </paths> </system> </dependencies> </deployment> </jboss-deployment-structure> 明确包含div { height: 200px; width: 50%; } 类来解决:

div {
    height: 100px;
    width: 500px;
}

答案 1 :(得分:1)

那是因为如果你查看“modules / system / layers / base / sun / jdk / main / module.xml”这些包被jboss-modules过滤掉了,你可以看到com.sun.management不在那里。 您需要创建一个模块来获取这些类或编辑该模块。

答案 2 :(得分:0)

我不得不替换原来的代码,这是新代码:

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Object attribute =mBeanServer.getAttribute(new ObjectName("java.lang", "type", "OperatingSystem"), "TotalPhysicalMemorySize");
long physicalMemorySize = Long.parseLong(attribute.toString());
System.out.println("physicalMemorySize="+physicalMemorySize);