001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: * --------------------------------------------------------------------------
021: * $Id: JavaVm.java 8328 2006-05-10 09:38:08Z benoitf $
022: * --------------------------------------------------------------------------
023: */package org.objectweb.jonas.server;
024:
025: // Java imports
026:
027: import java.util.Vector;
028:
029: import org.objectweb.jonas.common.JProp;
030: import org.objectweb.jonas.common.Log;
031: import org.objectweb.jonas.management.j2eemanagement.J2EEManagedObject;
032: import org.objectweb.util.monolog.api.BasicLevel;
033: import org.objectweb.util.monolog.api.Logger;
034:
035: /**
036: * The Java Virtual Machine used by the JOnAS server.
037: * @author Michel-Ange Anton
038: */
039: public class JavaVm extends J2EEManagedObject {
040:
041: // ------------------------------------------------------------- Private
042: // Constants
043: /** JRE version property name */
044: private static final String JAVA_VERSION = "java.version";
045:
046: /** JRE vendor property name */
047: private static final String JAVA_VENDOR = "java.vendor";
048:
049: /** JRE VM name property name */
050: private static final String JAVA_VM_NAME = "java.vm.name";
051:
052: /** JRE VM name property name */
053: private static final String JAVA_VM_VERSION = "java.vm.version";
054:
055: /** default host name */
056: private static final String NODE_LOCAL = "localhost";
057:
058: // ------------------------------------------------------------- Privates
059: // Variables
060: /** private logger */
061: private static Logger sLogger = null;
062:
063: // ------------------------------------------------------------- Properties
064:
065: /**
066: * JVM version.
067: */
068: private String javaVersion = null;
069:
070: /**
071: * JVM vendor.
072: */
073: private String javaVendor = null;
074:
075: /**
076: * Node (machine) the JVM is running on.
077: */
078: private String node = null;
079:
080: // ------------------------------------------------------------- Contructors
081: /**
082: * Construct JavaVM MBean
083: * @param pObjectName The MBean's OBJECT_NAME
084: * @param pProps JProp object containing current JVM's properties
085: */
086: public JavaVm(String pObjectName, JProp pProps) {
087: super (pObjectName);
088: javaVersion = pProps.getValue(JAVA_VERSION);
089: javaVendor = pProps.getValue(JAVA_VM_NAME) + "-"
090: + pProps.getValue(JAVA_VM_VERSION) + " / "
091: + pProps.getValue(JAVA_VENDOR);
092: try {
093: java.net.InetAddress oInet = java.net.InetAddress
094: .getLocalHost();
095: node = oInet.getCanonicalHostName();
096: } catch (java.net.UnknownHostException e) {
097: node = NODE_LOCAL;
098: }
099: // get a logger for server traces
100: sLogger = Log.getLogger(Log.JONAS_SERVER_PREFIX);
101: }
102:
103: // ------------------------------------------------------------- Properties
104: // Methods
105: /**
106: * @return The JVM version.
107: */
108: public String getJavaVersion() {
109: return javaVersion;
110: }
111:
112: /**
113: * @return The JVM vendor.
114: */
115: public String getJavaVendor() {
116: return javaVendor;
117: }
118:
119: /**
120: * @return The node (machine) the JVM is running on.
121: */
122: public String getNode() {
123: return node;
124: }
125:
126: // ------------------------------------------------------------- Operations
127: /**
128: * @return the system threadGroup
129: */
130: protected ThreadGroup getTopLevelThreadGroup() {
131: // Get the topLevel ThreadGroup
132: ThreadGroup parentg = null;
133: ThreadGroup tg = Thread.currentThread().getThreadGroup();
134:
135: while ((parentg = tg.getParent()) != null) {
136: tg = parentg;
137:
138: }
139: return tg;
140: }
141:
142: /**
143: * @return the number of threads in the JOnAS server
144: */
145: public int getAllThreadsCount() {
146:
147: ThreadGroup tg = getTopLevelThreadGroup();
148: int realnbthread = 0;
149: synchronized (this ) {
150: // Get the number of active threads
151: int count = tg.activeCount();
152: sLogger.log(BasicLevel.DEBUG, "number of active threads = "
153: + count);
154: Thread[] array = new Thread[count];
155: tg.enumerate(array, true);
156: for (int j = 0; j < count; j++) {
157: if (array[j] != null) {
158: realnbthread++;
159: }
160: }
161: }
162: return realnbthread;
163: }
164:
165: /**
166: * @return the list of threadgroups name
167: */
168: public String[] getThreadGroups() {
169: ThreadGroup tg = getTopLevelThreadGroup();
170: Vector v = new Vector();
171: synchronized (this ) {
172: // Get the number of active threadGroups
173: int counttg = tg.activeGroupCount();
174: ThreadGroup[] array = new ThreadGroup[counttg];
175: v.addElement(tg.getName());
176: tg.enumerate(array, true);
177: for (int i = 0; i < counttg; i++) {
178: if (array[i] != null) {
179: v.addElement(array[i].getName());
180: }
181: }
182: }
183: String[] ret = new String[v.size()];
184: v.copyInto(ret);
185: return ret;
186: }
187:
188: /**
189: * @param name name of the thread group
190: * @return the name of thread names
191: */
192: public String[] listThreads(String name) {
193: ThreadGroup tg = getTopLevelThreadGroup();
194: Vector v = new Vector();
195: String[] ret = null;
196: synchronized (this ) {
197: // Get the number of active threadGroups
198: int counttg = tg.activeGroupCount();
199: ThreadGroup[] array = new ThreadGroup[counttg];
200: tg.enumerate(array, true);
201:
202: for (int i = 0; i < counttg; i++) {
203: if (array[i].getName() == name) {
204: // Get the number of active threads
205: int counth = tg.activeCount();
206: Thread[] tharray = new Thread[counth];
207: array[i].enumerate(tharray);
208: for (int j = 0; j < counth; j++) {
209: if (tharray[j] != null) {
210: v.addElement(tharray[j].getName());
211: }
212: }
213: ret = new String[v.size()];
214: v.copyInto(ret);
215: break;
216: }
217: }
218: }
219: return ret;
220: }
221: }
|