1

この背後にある動機は、JavaサービスWrapperのようなより重いものを使用せずに、JMXを使用してローカルJavaサービスを管理することです。

各サービスは-Dcom.sun.management.jmxremote、「JVMがローカル(同じマシンのみ)のJMXサーバーとして機能するように構成されている」ことを意味します。(良い説明についてはここを参照してください)。

Attach APIを試しましたが、Java SE6にバンドルされておらず、Mavenと統合できなかったため、反対しました。

4

2 に答える 2

7

ここでは見たことがないので、解決策を共有するための質問を投稿しています(Q&A)。ここで重要なのはConnectorAddressLink.importFrom(pid)、アドレスを取得するために使用することです。

public static MBeanServerConnection getLocalMBeanServerConnectionStatic(int pid) {
    try {
        String address = ConnectorAddressLink.importFrom(pid);
        JMXServiceURL jmxUrl = new JMXServiceURL(address);
        return JMXConnectorFactory.connect(jmxUrl).getMBeanServerConnection();
    } catch (IOException e) {
        throw new RuntimeException("Of course you still have to implement a good connection handling");
    }
}
于 2012-11-06T14:18:11.453 に答える
5

@ティムビューテ

null が返される場合ConnectorAddressLink.importFromは、management-agent.jar を VM にロードしてみてください。

たとえばstartManagementAgenthttps://github.com/openjdk-mirror/jdk7u-jdk/blob/master/test/sun/management/jmxremote/bootstrap/TestManager.javaの関数のようなものを使用します

private static void startManagementAgent(String pid) throws IOException {
    /*
     * JAR file normally in ${java.home}/jre/lib but may be in ${java.home}/lib
     * with development/non-images builds
     */
    String home = System.getProperty("java.home");
    String agent = home + File.separator + "jre" + File.separator + "lib"
            + File.separator + "management-agent.jar";
    File f = new File(agent);
    if (!f.exists()) {
        agent = home + File.separator + "lib" + File.separator +
            "management-agent.jar";
        f = new File(agent);
        if (!f.exists()) {
            throw new RuntimeException("management-agent.jar missing");
        }
    }
    agent = f.getCanonicalPath();

    System.out.println("Loading " + agent + " into target VM ...");

    try {
        VirtualMachine.attach(pid).loadAgent(agent);
    } catch (Exception x) {
        throw new IOException(x.getMessage());
    }
}
于 2014-10-16T18:26:46.113 に答える