00001
00025 package org.objectweb.jonas.server;
00026
00027
00028
00029 import java.util.Vector;
00030
00031 import org.objectweb.jonas.common.JProp;
00032 import org.objectweb.jonas.common.Log;
00033 import org.objectweb.jonas.management.j2eemanagement.J2EEManagedObject;
00034 import org.objectweb.util.monolog.api.BasicLevel;
00035 import org.objectweb.util.monolog.api.Logger;
00036
00041 public class JavaVm extends J2EEManagedObject {
00042
00043
00044
00046 private static final String JAVA_VERSION = "java.version";
00047
00049 private static final String JAVA_VENDOR = "java.vendor";
00050
00052 private static final String NODE_LOCAL = "localhost";
00053
00054
00055
00057 private static Logger sLogger = null;
00058
00059
00060
00064 private String javaVersion = null;
00065
00069 private String javaVendor = null;
00070
00074 private String node = null;
00075
00076
00082 public JavaVm(String pObjectName, JProp pProps) {
00083 super(pObjectName);
00084 javaVersion = pProps.getValue(JAVA_VERSION);
00085 javaVendor = pProps.getValue(JAVA_VENDOR);
00086 try {
00087 java.net.InetAddress oInet = java.net.InetAddress.getLocalHost();
00088 node = oInet.getCanonicalHostName();
00089 } catch (java.net.UnknownHostException e) {
00090 node = NODE_LOCAL;
00091 }
00092
00093 sLogger = Log.getLogger(Log.JONAS_SERVER_PREFIX);
00094 }
00095
00096
00097
00101 public String getJavaVersion() {
00102 return javaVersion;
00103 }
00104
00108 public String getJavaVendor() {
00109 return javaVendor;
00110 }
00111
00115 public String getNode() {
00116 return node;
00117 }
00118
00119
00123 protected ThreadGroup getTopLevelThreadGroup() {
00124
00125 ThreadGroup parentg = null;
00126 ThreadGroup tg = Thread.currentThread().getThreadGroup();
00127
00128 while ((parentg = tg.getParent()) != null) {
00129 tg = parentg;
00130
00131 }
00132 return tg;
00133 }
00134
00138 public int getAllThreadsCount() {
00139
00140 ThreadGroup tg = getTopLevelThreadGroup();
00141 int realnbthread = 0;
00142 synchronized (this) {
00143
00144 int count = tg.activeCount();
00145 sLogger.log(BasicLevel.DEBUG, "number of active threads = " + count);
00146 Thread[] array = new Thread[count];
00147 tg.enumerate(array, true);
00148 for (int j = 0; j < count; j++) {
00149 if (array[j] != null) {
00150 realnbthread++;
00151 }
00152 }
00153 }
00154 return realnbthread;
00155 }
00156
00160 public String[] getThreadGroups() {
00161 ThreadGroup tg = getTopLevelThreadGroup();
00162 Vector v = new Vector();
00163 synchronized (this) {
00164
00165 int counttg = tg.activeGroupCount();
00166 ThreadGroup[] array = new ThreadGroup[counttg];
00167 v.addElement(tg.getName());
00168 tg.enumerate(array, true);
00169 for (int i = 0; i < counttg; i++) {
00170 if (array[i] != null) {
00171 v.addElement(array[i].getName());
00172 }
00173 }
00174 }
00175 String[] ret = new String[v.size()];
00176 v.copyInto(ret);
00177 return ret;
00178 }
00179
00184 public String[] listThreads(String name) {
00185 ThreadGroup tg = getTopLevelThreadGroup();
00186 Vector v = new Vector();
00187 String[] ret = null;
00188 synchronized (this) {
00189
00190 int counttg = tg.activeGroupCount();
00191 ThreadGroup[] array = new ThreadGroup[counttg];
00192 tg.enumerate(array, true);
00193
00194 for (int i = 0; i < counttg; i++) {
00195 if (array[i].getName() == name) {
00196
00197 int counth = tg.activeCount();
00198 Thread[] tharray = new Thread[counth];
00199 array[i].enumerate(tharray);
00200 for (int j = 0; j < counth; j++) {
00201 if (tharray[j] != null) {
00202 v.addElement(tharray[j].getName());
00203 }
00204 }
00205 ret = new String[v.size()];
00206 v.copyInto(ret);
00207 break;
00208 }
00209 }
00210 }
00211 return ret;
00212 }
00213 }