2013년 10월 18일 금요일

서버쪽에있는 어플리케이션을 실행 시키는 예제(예:WebLogic, JMX)

서버쪽에있는 어플리케이션을 실행 시키는 예제(예:WebLogic 서버)

===========================================================
========================JmxAgent.java========================
===========================================================
package agent;

import mbean.*;
import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import java.util.Map;

import java.lang.management.*;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.remote.rmi.RMIConnectorServer;

public class JmxAgent {

        private MBeanServer server = null;

        public JmxAgent() {       
                server = MBeanServerFactory.createMBeanServer("JmxAgent");
                startAgent();
        }

       
        private void startAgent() {
           
                JMXServiceURL serviceUrl = null;
                ObjectName connectorName = null;
                ObjectName WeblogicControlMBeanName = null;
               
                try {
                        LocateRegistry.createRegistry(7777);
                        serviceUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/server");
                        Map environment = new HashMap();
                        environment.put(RMIConnectorServer.JNDI_REBIND_ATTRIBUTE,"true");
                        connectorName = new ObjectName("JmxAgent:name=RmiConnector");
                       
                        //Process 관리를 위한 MBean Name 정의
                        WeblogicControlMBeanName = new ObjectName("JmxAgent:name=weblogicControl");
                       
                        JMXConnectorServer connector = JMXConnectorServerFactory
                                        .newJMXConnectorServer(serviceUrl, environment, server);
                       
                        //Agent에 MBean 등록
                        server.registerMBean(new StartWeblogic(), WeblogicControlMBeanName);
                       
                        server.registerMBean(connector, connectorName);
                        connector.start();
                } catch (Exception e) {
                       
                }
        }
       
        public static void main(String[] args) {                               
                new JmxAgent();
                System.out.println("=================================================");
                System.out.println("=                                              =");
                System.out.println("=                                              =");
                System.out.println("=          JMX AGENT START!!!                  =");
                System.out.println("=                                              =");
                System.out.println("=                                              =");               
                System.out.println("=                                              =");
                System.out.println("=                                              =");
                System.out.println("=                                              =");
                System.out.println("=                                              =");
                System.out.println("=                                              =");
                System.out.println("=================================================");
                System.out.println("=        Agent is Ready for Service...          =");
                System.out.println("=================================================");               
        }

}

===========================================================
========================StartWeblogic.java====================
===========================================================

package mbean;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStreamReader;

public class StartWeblogic implements mbean.StartWeblogicMBean {
        public void startWeblogic() {
                try {
                        Runtime r = Runtime.getRuntime();
                        //Process p = r.exec("C:\\bea\\user_projects\" +
                        //                "domains\\mydomain\\setEnv.cmd");
                        Process p = r.exec("c:\\run.bat");       
                       
                        BufferedReader stdInput = new BufferedReader(
                                        new InputStreamReader(p.getInputStream()));
                        String s = null;

                        while ((s = stdInput.readLine()) != null) {                               
                                System.out.println(s);
                        }
                       
                        p.wait();
                } catch (Exception e) {
                        e.printStackTrace();

                }

        }

        public void stopWeblogic() {
        }

}



===========================================================
========================StartWeblogicMBean.java=============
===========================================================

package mbean;

public interface StartWeblogicMBean {
        void    startWeblogic();
        void    stopWeblogic();
}



===========================================================
========================JmxClient.java=======================
===========================================================

package client;

import java.util.Map;

import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.RuntimeErrorException;

import mbean.StartWeblogicMBean;


public class JmxClient {

        public void foo() {
               
                //ObjectName processControlMBeanName = null;
                ObjectName resourceControlMBeanName = null;
                Map creationEnvironment = null;
                Map connectionEnvironment = null;
               
                try {
                       
//                        서버에서 등록한 MBean을 이름으로 검색(batch 관리용)
                        resourceControlMBeanName = new ObjectName("JmxAgent:name=weblogicControl");
                       
                        JMXServiceURL address = new JMXServiceURL(
                        "service:jmx:rmi:///jndi/rmi://localhost:7777/server");                       
                       
                        JMXConnector cntor = JMXConnectorFactory.newJMXConnector(address, creationEnvironment);
                        cntor.connect(connectionEnvironment);
                        MBeanServerConnection mbsc = cntor.getMBeanServerConnection();
                       
                        //WeblogicControl용
                        StartWeblogicMBean resource = (StartWeblogicMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc,

resourceControlMBeanName,StartWeblogicMBean.class, false);
                       
                        //start job                       
                        resource.startWeblogic();
                       
                        cntor.close();
                } catch (RuntimeErrorException e) {
                        System.out.println("Error --->" + e);
                        e.printStackTrace();
                }
                catch(Exception e) {
                        System.out.println(e);
                        e.printStackTrace();
                }
        }

        public static void main(String[] args) {
                new JmxClient().foo();               
        }
}

댓글 없음:

댓글 쓰기