Liberty:登錄 MBean 的範例
應用程式可以將自己的 MBean 實例登錄在 Liberty 上。之後其他應用程式或外部管理者就可以使用該 MBean 實例。
任何應用程式都可以利用 MBeanServer 實例來登錄 MBean。
假設應用程式包含一個稱為 org.example.Example 的類別,其實作的 org.example.ExampleMBean 介面定義了一些屬性和作業。
如同下列範例,這個應用程式有可能只是將 Example 類別實例化,然後利用唯一的 ObjectName 來登錄它。
如果所選的 ObjectName 已在使用中,就會報告一則 javax.management.InstanceAlreadyExistsException。
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.example.Example;
...
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Object mbean = new Example();
ObjectName name = new ObjectName("org.example.MyApplication:name=Example");
mbs.registerMBean(mbean, name);
此外,應用程式也可能登錄一個繼承 java.lang.ClassLoader 的 MBean,其可供存取任意數目的 MBean 實作類別。
之後,您可以利用任何在本端或遠端的其他 JMX 用戶端,來建立及登錄這個應用程式所提供的 MBean。
比方說,假設這個應用程式有一個執行下列作業的 MBean 類別 org.example.ApplicationClassLoader:
- 實作任何空白的 org.example.ApplicationClassLoaderMBean 介面
- 繼承 java.lang.Classloader,且
- 可供存取 org.example.Example MBean 實作類別
這個應用程式可以依照下列方式來登錄 ApplicationClassLoader 的實例,以將 Example MBean 提供給其他 JMX 用戶端:
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.example.ApplicationClassLoader;
...
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Object classLoader = new ApplicationClassLoader();
ObjectName name = new ObjectName("org.example.MyApplication:name=ClassLoader");
mbs.registerMBean(classLoader, name);
任何 JMX 用戶端都可以建立 Example 實例。
下列範例假設 mbs 變數是一個 MBeanServer 或 MBeanServerConnection 實例。
請參閱 在 Liberty 上使用 JMX MBean。
import javax.management.ObjectName;
...
ObjectName loaderName = new ObjectName("org.example.MyApplication:name=ClassLoader");
ObjectName exampleName = new ObjectName("org.example.MyApplication:name=Example");
mbs.createMBean("org.example.Example", exampleName, loaderName);
必要的話,您可以利用其他形式的 MBeanServer.createMBean 方法,使用非預設的建構子來建立 MBean。
如需管理介面的相關資訊,請參閱 Liberty 的 Java API 文件。每一個 Liberty API 的 Java API 文件都是以個別的 .zip 檔來提供(其位於 ${wlp.install.dir}/dev 目錄下的其中一個 javadoc 子目錄中)。