package test; /* * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the "License"). You may not use this file except * in compliance with the License. * * You can obtain a copy of the license at * glassfish/bootstrap/legal/CDDLv1.0.txt or * https://glassfish.dev.java.net/public/CDDLv1.0.html. * See the License for the specific language governing * permissions and limitations under the License. * * When distributing Covered Code, include this CDDL * HEADER in each file and include the License file at * glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable, * add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your * own identifying information: Portions Copyright [yyyy] * [name of copyright owner] */ import java.util.*; import java.io.*; import javax.management.MBeanServerConnection; import javax.management.JMException; import javax.management.MBeanInfo; import javax.management.ObjectName; import com.sun.ejte.ccl.reporter.SimpleReporterAdapter; import static com.sun.enterprise.admin.mbeans.custom.CustomMBeanConstants.*; public abstract class LifeCycle implements RemoteAdminQuicklookTest { abstract String testInternal() throws JMException, IOException; //////////////////////////////////////////////////////////////////////////// ////////////// RemoteAdminQuicklookTest Impl Methods //////////////////// //////////////////////////////////////////////////////////////////////////// public long getExecutionTime() { return ( end - start ) ; } //////////////////////////////////////////////////////////////////////////// public String getName() { return ( getClass().getName() ); } //////////////////////////////////////////////////////////////////////////// public void setMBeanServerConnection(MBeanServerConnection c) { mbsc = c; } //////////////////////////////////////////////////////////////////////////// public String test() { try { start = System.currentTimeMillis(); return (testInternal()); } catch(final Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { end = System.currentTimeMillis(); } } //////////////////////////////////////////////////////////////////////////// /////////////// Tool Methods //////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// String create(String className, String objectName, String name) throws JMException, IOException { Map<String, String> params = new HashMap<String, String>(); Map<String, String> attribs = new HashMap<String, String>(); params.put(IMPL_CLASS_NAME_KEY, className); if(ok(objectName)) params.put(OBJECT_NAME_KEY, objectName); if(ok(name)) params.put(NAME_KEY, name); final ObjectName on = new ObjectName(BACKEND_MBEAN_ON); final String oper = "createMBean"; final Object[] operParams = new Object[]{ null, params, attribs }; final String[] operSign = new String[]{ String.class.getName(), Map.class.getName(), Map.class.getName() }; return ( (String) mbsc.invoke(on, oper, operParams, operSign) ); } //////////////////////////////////////////////////////////////////////////// List<String> list() throws JMException, IOException { final ObjectName on = new ObjectName(BACKEND_MBEAN_ON); final String oper = "listMBeanNames"; final Object[] operParams = new Object[]{ null }; final String[] operSign = new String[]{ String.class.getName() }; return ( (List<String>) mbsc.invoke(on, oper, operParams, operSign) ); } //////////////////////////////////////////////////////////////////////////// MBeanInfo getMBeanInfo(String className) throws JMException, IOException { final ObjectName on = new ObjectName(BACKEND_MBEAN_ON); final String oper = "getMBeanInfo"; final Object[] operParams = new Object[]{ className }; final String[] operSign = new String[]{ String.class.getName() }; return ( MBeanInfo ) mbsc.invoke(on, oper, operParams, operSign); } //////////////////////////////////////////////////////////////////////////// String delete(String name) throws JMException, IOException { final ObjectName on = new ObjectName(BACKEND_MBEAN_ON); final String oper = "deleteMBean"; final Object[] operParams = new Object[]{ null, name }; final String[] operSign = new String[]{ String.class.getName(), String.class.getName() }; return ( (String) mbsc.invoke(on, oper, operParams, operSign) ); } //////////////////////////////////////////////////////////////////////////// MemoryUsage getMemoryInfo() { int heap = -1; int nonHeap = -1; try { JVMInformationTest jit = new JVMInformationTest(); jit.setMBeanServerConnection(mbsc); String s = jit.getMemoryInfo(); BufferedReader r = new BufferedReader(new StringReader(s)); String line; while((line = r.readLine()) != null) { if(line.equals("Heap Memory Usage:")) heap = parseMemoryUsage(r); if(line.equals("Non-heap Memory Usage:")) { nonHeap = parseMemoryUsage(r); break; } } } catch(Exception e) { // ignore... } return new MemoryUsage(heap, nonHeap); } //////////////////////////////////////////////////////////////////////////// void title(String s) { int len = s.length(); int sub = (starsLength - 10 - len) / 2; if(sub < 5) sub = 5; System.out.println(stars); System.out.println(stars.substring(0, sub) + " " + s + " " + stars.substring(0, sub)); System.out.println(stars); } //////////////////////////////////////////////////////////////////////////// private int parseMemoryUsage(BufferedReader r) { /* Heap Memory Usage: Memory that Java Virtual Machine initially requested to the Operating System: 0 Bytes Memory that Java Virtual Machine is guaranteed to receive from the Operating System: 55,459,840 Bytes Maximum Memory that Java Virtual Machine may get from the Operating System: 531,628,032 Bytes. Note that this is not guaranteed Memory that Java Virtual Machine uses at this time: 34,602,808 Bytes **/ String searchString = "Memory that Java Virtual Machine uses at this time: "; String line; try { while((line = r.readLine()) != null) { if(line.startsWith(searchString)) break; } if(line == null) return -1; String number = line.substring(searchString.length()); return parseNumber(number); } catch(Exception e) { return -1; } } //////////////////////////////////////////////////////////////////////////// private static int parseNumber(String num) { String fixed = ""; for(int i = 0; i < num.length(); i++) { char c = num.charAt(i); if(Character.isDigit(c)) fixed += c; } try { return new Integer(fixed); } catch(Exception e) { return -1; } } //////////////////////////////////////////////////////////////////////////// private boolean ok(String s) { return s != null && s.length() > 0; } //////////////////////////////////////////////////////////////////////////// private MBeanServerConnection mbsc; private long start, end; private final int starsLength = stars.length(); private static final String stars = "************************************************************"; private static final String BACKEND_MBEAN_ON = "com.sun.appserv:category=config,type=applications"; //////////////////////////////////////////////////////////////////////////// class MemoryUsage { MemoryUsage(int Heap, int NonHeap) { heap = Heap; nonHeap = NonHeap; } public String toString() { return "Heap: " + heap + ", Non-Heap: " + nonHeap; } int heap; int nonHeap; } } /*** [java] Heap Memory Usage: [java] Memory that Java Virtual Machine initially requested to the Operating System: 0 Bytes [java] Memory that Java Virtual Machine is guaranteed to receive from the Operating System: 53,731,328 Bytes [java] Maximum Memory that Java Virtual Machine may get from the Operating System: 531,628,032 Bytes. Note that this is not guaranteed. [java] Memory that Java Virtual Machine uses at this time: 31,348,920 Bytes [java] Non-heap Memory Usage: [java] Memory that Java Virtual Machine initially requested to the Operating System: 16,941,056 Bytes [java] Memory that Java Virtual Machine is guaranteed to receive from the Operating System: 54,886,400 Bytes [java] Maximum Memory that Java Virtual Machine may get from the Operating System: 100,663,296 Bytes. Note that this is not guaranteed. [java] Memory that Java Virtual Machine uses at this time: 54,436,552 Bytes [java] Approximate number of objects for which finalization is pending: 0 [java] Class loading and unloading in the Java Virtual Machine: [java] Number of classes currently loaded in the Java Virtual Machine: 9,168 [java] Number of classes loaded in the Java Virtual Machine since the startup: 9,168 [java] Number of classes unloaded from the Java Virtual Machine: 0 [java] Just-in-time (JIT) compilation information in the Java Virtual Machine: */