KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > JMXHeartBeatTestApp


1 /*
2  * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tctest;
6
7 import com.tc.management.beans.L2MBeanNames;
8 import com.tc.management.beans.TCServerInfoMBean;
9 import com.tc.object.config.ConfigVisitor;
10 import com.tc.object.config.DSOClientConfigHelper;
11 import com.tc.object.config.TransparencyClassSpec;
12 import com.tc.simulator.app.ApplicationConfig;
13 import com.tc.simulator.listener.ListenerProvider;
14 import com.tc.util.Assert;
15 import com.tctest.runner.AbstractTransparentApp;
16
17 import java.io.IOException JavaDoc;
18 import java.util.concurrent.CyclicBarrier JavaDoc;
19
20 import javax.management.MBeanServerConnection JavaDoc;
21 import javax.management.MBeanServerInvocationHandler JavaDoc;
22 import javax.management.remote.JMXConnector JavaDoc;
23 import javax.management.remote.JMXConnectorFactory JavaDoc;
24 import javax.management.remote.JMXServiceURL JavaDoc;
25
26 public class JMXHeartBeatTestApp extends AbstractTransparentApp {
27
28   public static final String JavaDoc CONFIG_FILE = "config-file";
29   public static final String JavaDoc PORT_NUMBER = "port-number";
30   public static final String JavaDoc HOST_NAME = "host-name";
31   public static final String JavaDoc JMX_PORT = "jmx-port";
32
33   private final ApplicationConfig config;
34
35   private final int initialNodeCount = getParticipantCount();
36   private final CyclicBarrier JavaDoc stage1 = new CyclicBarrier JavaDoc(initialNodeCount);
37
38   private MBeanServerConnection JavaDoc mbsc = null;
39   private JMXConnector JavaDoc jmxc;
40   private TCServerInfoMBean serverMBean;
41
42   public JMXHeartBeatTestApp(String JavaDoc appId, ApplicationConfig config, ListenerProvider listenerProvider) {
43     super(appId, config, listenerProvider);
44     this.config = config;
45   }
46
47   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
48
49     String JavaDoc testClass = JMXHeartBeatTestApp.class.getName();
50     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
51     config.addWriteAutolock(methodExpression);
52     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
53     config.addIncludePattern(testClass + "$*");
54
55     // roots
56
spec.addRoot("stage1", "stage1");
57   }
58
59   public void run() {
60     try {
61       runTest();
62     } catch (Throwable JavaDoc t) {
63       notifyError(t);
64     }
65   }
66
67   private boolean isServerAlive() {
68     boolean isAlive = false;
69     
70     try {
71       String JavaDoc theUrl = "service:jmx:rmi:///jndi/rmi://localhost:" + config.getAttribute(JMX_PORT) + "/jmxrmi";
72       JMXServiceURL JavaDoc url = new JMXServiceURL JavaDoc(theUrl);
73       jmxc = JMXConnectorFactory.connect(url, null);
74       mbsc = jmxc.getMBeanServerConnection();
75       serverMBean = (TCServerInfoMBean) MBeanServerInvocationHandler
76       .newProxyInstance(mbsc, L2MBeanNames.TC_SERVER_INFO, TCServerInfoMBean.class, false);
77       String JavaDoc result = serverMBean.getHealthStatus();
78       jmxc.close();
79       isAlive = result.equals("OK");
80     } catch (Throwable JavaDoc e) {
81       e.printStackTrace();
82     }
83     finally {
84       if (jmxc != null) {
85         try {
86           jmxc.close();
87         } catch (IOException JavaDoc e) {
88           throw new RuntimeException JavaDoc(e);
89         }
90       }
91     }
92     
93     return isAlive;
94   }
95
96   private void runTest() throws Throwable JavaDoc {
97
98     Assert.assertEquals(true, isServerAlive());
99     echo("Server is alive");
100     config.getServerControl().crash();
101     Assert.assertEquals(false, isServerAlive());
102     echo("Server is down");
103     config.getServerControl().start(30 * 1000);
104     stage1.await();
105     echo("Server restarted successfully.");
106     Assert.assertEquals(true, isServerAlive());
107   }
108
109   private static void echo(String JavaDoc msg) {
110     System.out.println(msg);
111   }
112
113 }
114
Popular Tags