ठीक है, उन सभी संभावनाओं के बाद, जिन्हें मैंने "जावा मॉनिटरिंग एंड मैनेजमेंट" के साथ काम करने के लिए चुना
है। अवलोकन यहाँ है
जो आपको अपेक्षाकृत आसान तरीके से एक से दूसरे एप्लिकेशन को नियंत्रित करने की अनुमति देता है। आप इसे मारने से पहले नियंत्रित रूप से नियंत्रित एप्लिकेशन को रोकने के लिए स्क्रिप्ट से नियंत्रित एप्लिकेशन को कॉल कर सकते हैं।
यहाँ सरलीकृत कोड है:
नियंत्रित अनुप्रयोग:
इसे
फ़ोलोइंग VM पैरामीटर के साथ चलाएं: -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port = 9999
-Dcom.sun.management.jmxremote.authenticate = false
-Dcom.sun.management jmxremote.ssl = false
public interface ThreadMonitorMBean
{
String getName();
void start();
void stop();
boolean isRunning();
}
public class ThreadMonitor implements ThreadMonitorMBean
{
private Thread m_thrd = null;
public ThreadMonitor(Thread thrd)
{
m_thrd = thrd;
}
@Override
public String getName()
{
return "JMX Controlled App";
}
@Override
public void start()
{
System.out.println("remote start called");
}
@Override
public void stop()
{
System.out.println("remote stop called");
m_thrd.interrupt();
}
public boolean isRunning()
{
return Thread.currentThread().isAlive();
}
public static void main(String[] args)
{
try
{
System.out.println("JMX started");
ThreadMonitorMBean monitor = new ThreadMonitor(Thread.currentThread());
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.example:type=ThreadMonitor");
server.registerMBean(monitor, name);
while(!Thread.interrupted())
{
System.out.println(".");
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
System.out.println("JMX stopped");
}
}
}
कंट्रोलिंग एप्लिकेशन:
इसे स्टॉप के साथ चलाएं या कमांड लाइन तर्क के रूप में शुरू करें
public class ThreadMonitorConsole
{
public static void main(String[] args)
{
try
{
System.out.println("Connect to JMX service.");
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:9999/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("com.example:type=ThreadMonitor");
ThreadMonitorMBean mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, ThreadMonitorMBean.class, true);
System.out.println("Connected to: "+mbeanProxy.getName()+", the app is "+(mbeanProxy.isRunning() ? "" : "not ")+"running");
if(args[0].equalsIgnoreCase("start"))
{
System.out.println("Invoke \"start\" method");
mbeanProxy.start();
}
else if(args[0].equalsIgnoreCase("stop"))
{
System.out.println("Invoke \"stop\" method");
mbeanProxy.stop();
}
jmxc.close();
System.out.println("Done.");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
बस। :-)