jdk/test/sun/management/jdp/JdpDoSomething.java
author sla
Mon, 07 Apr 2014 08:09:55 +0200
changeset 23723 46b29c0e9656
parent 21646 38f9ba0664de
permissions -rw-r--r--
8039256: Add sun/jvmstat/monitor/MonitoredVm/CR6672135.java to ProblemList.txt Reviewed-by: mgronlun, alanb

/*
 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Objects;

import sun.management.jdp.JdpJmxPacket;
import sun.management.jdp.JdpException;

public class JdpDoSomething {

    private static final String lockFileName = "JdpDoSomething.lck";
    private static final boolean verbose = false;

    public static boolean getVerbose() {
        return verbose;
    }

    public static void printJdpPacket(JdpJmxPacket p) {
        if (getVerbose()) {
            try {
                RandomAccessFile f = new RandomAccessFile("out.dmp", "rw");
                f.write(p.getPacketData());
                f.close();
            } catch (IOException e) {
                System.out.println("Can't write a dump file: " + e);
            }

            System.out.println("Id: " + p.getId());
            System.out.println("Jmx: " + p.getJmxServiceUrl());
            System.out.println("Main: " + p.getMainClass());
            System.out.println("InstanceName: " + p.getInstanceName());
            System.out.println("ProccessId: " + p.getProcessId());
            System.out.println("BroadcastInterval: " + p.getBroadcastInterval());
            System.out.println("Rmi Hostname: " + p.getRmiHostname());

            System.out.flush();
        }
    }

    public static void compaireJdpPacketEx(JdpJmxPacket p1, JdpJmxPacket p2)
            throws JdpException {

        if (!Objects.equals(p1, p1)) {
            throw new JdpException("Packet mismatch error");
        }

        if (!Objects.equals(p1.getMainClass(), p2.getMainClass())) {
            throw new JdpException("Packet mismatch error (main class)");
        }

        if (!Objects.equals(p1.getInstanceName(), p2.getInstanceName())) {
            throw new JdpException("Packet mismatch error (instance name)");
        }
    }

    public static void doSomething() {
        try {
            File lockFile = new File(lockFileName);
            lockFile.createNewFile();

            while (lockFile.exists()) {
                long datetime = lockFile.lastModified();
                long epoch = System.currentTimeMillis() / 1000;

                // Don't allow test app to run more than an hour
                if (epoch - datetime > 3600) {
                    System.err.println("Lock is too old. Aborting");
                    return;
                }
                Thread.sleep(1);
            }

        } catch (Throwable e) {
            System.err.println("Something bad happens:" + e);
        }
    }

    public static void main(String args[]) throws Exception {
        System.err.println("main enter");
        doSomething();
        System.err.println("main exit");
    }
}