2017-05-02 14 views
1

私は物理メモリを読み取るために、このコードを持っている:WildFlyはOperatingSystemMXBeanを見ることができませんか?

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(Windowsの64ビット版、)
このコードは問題なくコンパイルされている、と私はコンソールアプリケーションでそれを実行することができ、それが実行をOK。私はWildFly 10サーバー上のいくつかの豆やJSPページにこのコードを置くとき
しかし、それはエラーを示しています

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

WildFlyはまったく同じJDKを使用するため、コンソールアプリケーションがそれを見ているように、このクラスを参照してくださいする必要があります。
そのクラスはjdk1.8.0_121\jre\lib\rt.jarなので、なぜWildFlyがそのClassNotFoundExceptionについて文句を言っているのか分かりません。

問題が何ですか? WildFlyでコードを実行する方法は?

答えて

1

"modules/system/layers/base/sun/jdk/main/module.xml"を調べると、これらのパッケージがjboss-modulesによって除外されているため、com.sun.managementがそこにないことがわかります。 これらのクラスを取得したり、このモジュールを編集するには、モジュールを作成する必要があります。

+0

を、 WildFlyは意図的にいくつかのクラスをJDKから除外しましたか?なぜ好奇心。 JBoss5とJBoss6はこれらのクラスに問題はありません。 – Chupacabras

+0

@Chupacabras 'com.sun。*'パッケージはSun JVM用にSun/Oracleによって書かれたプライベートクラスであり、Java/JVM仕様の一部ではありません。 –

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); 
1

これは、明示的jboss-deployment-structure.xmlにこのようなものを使用してcom.sun.managementクラスなどによって対処することができます:だから

<?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> 
関連する問題