History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/tools/jstatd/Jstatd.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/tools/jstatd/Jstatd.java+164−0
@@ -0,0 +1,164 @@
1+/*
2+ * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package sun.tools.jstatd;
27+
28+import java.rmi.*;
29+import java.rmi.server.*;
30+import java.rmi.registry.Registry;
31+import java.rmi.registry.LocateRegistry;
32+import java.net.MalformedURLException;
33+import sun.jvmstat.monitor.remote.*;
34+
35+/**
36+ * Application providing remote access to the jvmstat instrumentation
37+ * exported by local Java Virtual Machine processes. Remote access is
38+ * provided through an RMI interface.
39+ *
40+ * @author Brian Doherty
41+ * @since 1.5
42+ */
43+public class Jstatd {
44+
45+ private static Registry registry;
46+ private static int port = -1;
47+ private static boolean startRegistry = true;
48+
49+ private static void printUsage() {
50+ System.err.println("usage: jstatd [-nr] [-p port] [-n rminame]");
51+ }
52+
53+ static void bind(String name, RemoteHostImpl remoteHost)
54+ throws RemoteException, MalformedURLException, Exception {
55+
56+ try {
57+ Naming.rebind(name, remoteHost);
58+ } catch (java.rmi.ConnectException e) {
59+ /*
60+ * either the registry is not running or we cannot contact it.
61+ * start an internal registry if requested.
62+ */
63+ if (startRegistry && registry == null) {
64+ int localport = (port < 0) ? Registry.REGISTRY_PORT : port;
65+ registry = LocateRegistry.createRegistry(localport);
66+ bind(name, remoteHost);
67+ }
68+ else {
69+ System.out.println("Could not contact registry\n"
70+ + e.getMessage());
71+ e.printStackTrace();
72+ }
73+ } catch (RemoteException e) {
74+ System.err.println("Could not bind " + name + " to RMI Registry");
75+ e.printStackTrace();
76+ }
77+ }
78+
79+ public static void main(String[] args) {
80+ String rminame = null;
81+ int argc = 0;
82+
83+ for ( ; (argc < args.length) && (args[argc].startsWith("-")); argc++) {
84+ String arg = args[argc];
85+
86+ if (arg.compareTo("-nr") == 0) {
87+ startRegistry = false;
88+ } else if (arg.startsWith("-p")) {
89+ if (arg.compareTo("-p") != 0) {
90+ port = Integer.parseInt(arg.substring(2));
91+ } else {
92+ argc++;
93+ if (argc >= args.length) {
94+ printUsage();
95+ System.exit(1);
96+ }
97+ port = Integer.parseInt(args[argc]);
98+ }
99+ } else if (arg.startsWith("-n")) {
100+ if (arg.compareTo("-n") != 0) {
101+ rminame = arg.substring(2);
102+ } else {
103+ argc++;
104+ if (argc >= args.length) {
105+ printUsage();
106+ System.exit(1);
107+ }
108+ rminame = args[argc];
109+ }
110+ } else {
111+ printUsage();
112+ System.exit(1);
113+ }
114+ }
115+
116+ if (argc < args.length) {
117+ printUsage();
118+ System.exit(1);
119+ }
120+
121+ if (System.getSecurityManager() == null) {
122+ System.setSecurityManager(new RMISecurityManager());
123+ }
124+
125+ StringBuilder name = new StringBuilder();
126+
127+ if (port >= 0) {
128+ name.append("//:").append(port);
129+ }
130+
131+ if (rminame == null) {
132+ rminame = "JStatRemoteHost";
133+ }
134+
135+ name.append("/").append(rminame);
136+
137+ try {
138+ // use 1.5.0 dynamically generated subs.
139+ System.setProperty("java.rmi.server.ignoreSubClasses", "true");
140+ RemoteHostImpl remoteHost = new RemoteHostImpl();
141+ RemoteHost stub = (RemoteHost) UnicastRemoteObject.exportObject(
142+ remoteHost, 0);
143+ bind(name.toString(), remoteHost);
144+ } catch (MalformedURLException e) {
145+ if (rminame != null) {
146+ System.out.println("Bad RMI server name: " + rminame);
147+ } else {
148+ System.out.println("Bad RMI URL: " + name + " : "
149+ + e.getMessage());
150+ }
151+ System.exit(1);
152+ } catch (java.rmi.ConnectException e) {
153+ // could not attach to or create a registry
154+ System.out.println("Could not contact RMI registry\n"
155+ + e.getMessage());
156+ System.exit(1);
157+ } catch (Exception e) {
158+ System.out.println("Could not create remote object\n"
159+ + e.getMessage());
160+ e.printStackTrace();
161+ System.exit(1);
162+ }
163+ }
164+}