]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.tests/src/org/simantics/modeling/tests/commands/WriteHeapDump.java
Added missing org.simantics.modeling.tests plug-ins.
[simantics/platform.git] / bundles / org.simantics.modeling.tests / src / org / simantics / modeling / tests / commands / WriteHeapDump.java
1 package org.simantics.modeling.tests.commands;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.lang.management.ManagementFactory;
6 import java.lang.reflect.InvocationTargetException;
7 import java.lang.reflect.Method;
8
9 import org.simantics.db.testing.common.CommandSequenceEnvironment;
10 import org.simantics.db.testing.common.WriteCommand;
11
12 public class WriteHeapDump extends WriteCommand<CommandSequenceEnvironment> {
13
14         private String fileName;
15         
16         public WriteHeapDump(String fileName) {
17                 this.fileName = fileName;
18         }
19         
20         @Override
21         public void run(CommandSequenceEnvironment environment) throws Exception {
22                 
23                 final File dumpFile = new File(fileName);
24                 if (dumpFile.exists() && !dumpFile.delete()) {
25                         return;
26                 }
27                 try {
28                         Object bean = getBean();
29                         if (bean == null)
30                                 return;
31
32                         Method m = bean.getClass().getMethod("dumpHeap", String.class, boolean.class);
33                         m.invoke(bean, dumpFile.getAbsolutePath(), true);
34                 } catch (IllegalArgumentException e) {
35                         throw new InvocationTargetException(e);
36                 } catch (IllegalAccessException e) {
37                         throw new InvocationTargetException(e);
38                 } catch (SecurityException e) {
39                         throw new InvocationTargetException(e);
40                 } catch (NoSuchMethodException e) {
41                         throw new InvocationTargetException(e);
42                 }
43                 
44         }
45
46     private static Object getBean() {
47         Class<?> beanClass = getBeanClass();
48         if (beanClass == null)
49             return null;
50         try {
51             Object bean = ManagementFactory.newPlatformMXBeanProxy(
52                     ManagementFactory.getPlatformMBeanServer(),
53                     "com.sun.management:type=HotSpotDiagnostic",
54                     beanClass);
55             return bean;
56         } catch (IOException e) {
57             return null;
58         }
59     }
60
61     private static Class<?> getBeanClass() {
62         try {
63             Class<?> clazz = Class.forName("com.sun.management.HotSpotDiagnosticMXBean");
64             return clazz;
65         } catch (ClassNotFoundException e) {
66             return null;
67         }
68     }   
69 }