WildFly 看不到 OperatingSystemMXBean?

Chu*_*ras 6 java wildfly wildfly-10

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

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

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

Caused by: java.lang.ClassNotFoundException: com.sun.management.OperatingSystemMXBean
Run Code Online (Sandbox Code Playgroud)

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

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

Ved*_*vic 8

com.sun.management这可以通过在您的 中使用类似的内容显式包含类来解决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>
Run Code Online (Sandbox Code Playgroud)


ehs*_*oie 4

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