2020년 9월 15일 화요일

(자바JMX실습동영상,JAVAJMX강의)웹페이지에서 웹서버의 톰캣(Tomcat)시작/종료, 디스크공간 체크, 프로세스 KILL, 자바네트워크, 자바동영상, JAVA동영상

 (자바JMX실습동영상,JAVAJMX강의)웹페이지에서 웹서버의 톰캣(Tomcat)시작/종료, 디스크공간 체크, 프로세스 KILL, 자바네트워크, 자바동영상, JAVA동영상


https://youtu.be/rnjMnkIlrHI



(자바JMX실습동영상)웹페이지에서 웹서버의 톰캣(Tomcat)시작/종료, 디스크공간 체크, 프로세스 KILL, 자바네트워크


-JmxMBean.java (MBean Interface 정의)

-Jmx.java (MBean Interface 구현체)

-JmxAgent.java (JMX Agent, 서버쪽 JMX Agent 구현)

-JmxClient.java(JMX Client, 클라이언트서비스 구현)

-

-JmxServlet.java(jsp요청을 처리할 서블릿)


-   jmx.jsp(테스트용 웹페이지)

 


 

 

 

0. eclipse dynamic web project 생성

   플젝명 : jmxweb1


1. web.xml


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

<display-name>jmxweb1</display-name>


<servlet>

<servlet-name>jmxServlet</servlet-name>

<servlet-class>jmx.JmxServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>jmxServlet</servlet-name>

<url-pattern>/jmxServlet</url-pattern>

</servlet-mapping>


</web-app>



2. JmxNBean.java


package jmx;


public interface JmxMBean {

public void stopTomcat();

public void startTomcat();

public String getDiskCheck();

public void processKill(String processName);

}



3. Jmx.java


package jmx;


import java.io.File;


public class Jmx implements JmxMBean{


// 톰캣 실행 파일 경로

static String tomcatPath = "C:/dev/apache-tomcat-8.5.57/bin";


@Override

public void startTomcat() {

 try {

    Process p =Runtime.getRuntime()

  .exec("cmd /c start " + tomcatPath + "/catalina.bat start", null, new File(tomcatPath));

    System.out.println("Tomcat Started(JMX.java) .....");

  } catch (Exception e) {

    System.err.println(e);

    System.out.println("Tomcat Start Error"+e.getMessage());

    e.printStackTrace();

  }

}


@Override

public void stopTomcat() {

 try {

    Process p =Runtime.getRuntime()

    .exec("cmd /c start " + tomcatPath + "/catalina.bat stop", null, new File(tomcatPath));

    System.out.println("Tomcat Sopped(JMX.java).....");

  } catch (Exception e) {

    System.err.println(e);

    e.printStackTrace();

  }

}


@Override

public String getDiskCheck() {

String drive = null;

double totalSize = 0;

double freeSize = 0;

File[] roots = File.listRoots(); 

StringBuilder sb = new StringBuilder();

 for (File root : roots) { 

        

    drive = root.getAbsolutePath();            

    totalSize = root.getTotalSpace() / Math.pow(1024, 3); 

    freeSize = root.getFreeSpace() / Math.pow(1024, 3);

    sb.append("Drive : " + drive + 

     " / TotalSize : " + Math.floor(totalSize) + 

     " / FreeSize : " + Math.floor(freeSize) +"\n");

 } 

 System.out.println(sb.toString());

 return sb.toString();


}


@Override

public void processKill(String processName){


 Runtime rt = Runtime.getRuntime();

 System.out.println("Process Killed(JMX.java) .....");

  try {

  rt.exec("taskkill /f /im " + processName);

} catch (Exception e) {

e.printStackTrace();

}

}



}



4. JmxAgent.java


package jmx;


import java.rmi.registry.LocateRegistry;


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;


public class JmxAgent {

private MBeanServer mbs = null;


public JmxAgent() {

// 도메인명을 인자로 MBeanServer 생성

mbs = MBeanServerFactory.createMBeanServer("ServiceDomain");


// 구현된 MBean

Jmx jmxBean = new Jmx();

ObjectName mbeanName = null;


JMXServiceURL serviceUrl = null;

try {

LocateRegistry.createRegistry(7777);

serviceUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/server");


mbeanName = new ObjectName("ServiceDomain:name=JmxMBean");


JMXConnectorServer connector = 

    JMXConnectorServerFactory.newJMXConnectorServer(serviceUrl, null, mbs);


mbs.registerMBean(jmxBean, mbeanName);

connector.start();


} catch(Exception e) {

e.printStackTrace();

}

}


private static void waitForEnterPressed() {

try {

System.out.println("Press to continue...");

System.in.read();

} catch(Exception e) {

e.printStackTrace();

}

}


public static void main(String args[]) {

new JmxAgent();

System.out.println("SimpleAgent is running...");

JmxAgent.waitForEnterPressed();

}



}



5. JmxClient.java

package jmx;


import java.io.IOException;


import javax.management.JMX;

import javax.management.MBeanServerConnection;

import javax.management.MalformedObjectNameException;

import javax.management.ObjectName;

import javax.management.remote.JMXConnector;

import javax.management.remote.JMXConnectorFactory;

import javax.management.remote.JMXServiceURL;


public class JmxClient {


JMXServiceURL url = null;

JMXConnector jmxc = null;

MBeanServerConnection mbsc = null;

ObjectName mbeanName = null;

JmxMBean jmx = null;


public JmxClient() throws IOException, MalformedObjectNameException {

//JmxService URL

url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/server");

jmxc = JMXConnectorFactory.connect(url, null); // JmxServiceURL에 연결

mbsc = jmxc.getMBeanServerConnection();         // MBeanServer에 연결

mbeanName = new ObjectName("ServiceDomain:name=JmxMBean");

// MBeanServer, mbeanName을 인자로 원격참조(MBean참조) 취득

jmx = JMX.newMBeanProxy(mbsc, mbeanName, JmxMBean.class, true);

}


public  void startTomcat() {

jmx.startTomcat();

}


public void stopTomcat() {

jmx.stopTomcat();

}


public String getDiskCheck() {

return jmx.getDiskCheck();

}


public void processKill(String processName) {

jmx.processKill(processName);

}

}



6. JmxServlet.java


package jmx;


import java.io.IOException;


import javax.management.MalformedObjectNameException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Jmx.jsp 웹페이지에서 요청을 받는 서블릿

 */

public class JmxServlet extends HttpServlet {


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 

throws ServletException, IOException {


String process = req.getParameter("process");

String command = req.getParameter("command");


JmxClient jmxClient = null;

try {

jmxClient = new JmxClient();

} catch (MalformedObjectNameException | IOException e) {

e.printStackTrace();

}


System.out.println(">>>>>>>>[JMXServlet POST] command ::: " + command);

if(command.equals("startTomcat")) {

jmxClient.startTomcat();

req.setAttribute("msg", "tomcat started...");

} else if (command.equals("stopTomcat")){

jmxClient.stopTomcat();

req.setAttribute("msg", "tomcat stopped...");

} else if (command.equals("getDiskCapacity")){

String content = jmxClient.getDiskCheck();

req.setAttribute("msg", content);

} else if (command.equals("killProcess")) {

jmxClient.processKill(process);

req.setAttribute("msg", "process killed...");

}


RequestDispatcher rd = getServletContext().getRequestDispatcher("/jmx.jsp");

rd.forward(req, resp);


}

}



7. jmx.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="jmx.JmxClient" %>    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JMX</title>

<%

String path=request.getContextPath();

String msg = "";

if(request.getAttribute("msg") != null) {

msg = (String) request.getAttribute("msg");

}

%>

<script type="text/javascript">

function stopTomcat() {

document.frm.command.value = 'stopTomcat';  

document.frm.action = "<%=path %>/jmxServlet";

document.frm.submit();

}


function startTomcat() {

document.frm.command.value = 'startTomcat';

document.frm.action = "<%=path %>/jmxServlet";

document.frm.submit();

}


function getDiskCheck() {

document.frm.command.value = 'getDiskCapacity';

document.frm.action = "<%=path %>/jmxServlet";

document.frm.submit();

}


function processKill() {

document.frm.command.value = 'killProcess';

var processName = null;

if(document.frm.process.value == null || document.frm.process.value == "") {

alert("kill할 process를 입력해주세요.");

return false;

} else {

processName = document.frm.process.value;

document.frm.action = "<%=path %>/jmxServlet";

document.frm.submit();

}


}

</script>

</head>

<body>

<form id="frm" name="frm" method="POST">

<input type="hidden" id="command" name="command" value=""/>

    <P>주의 : 현재 실행중인 Tomcat이 아닌 다른  Tomcat 서버로 테스트 하세요</P>

<button onclick="startTomcat()">웹서버쪽 톰캣시작</button>

<button onclick="stopTomcat()">웹서버쪽 톰캣종료</button>

<br/>

<button onclick="getDiskCheck()">웹서버용량확인</button>

<br/>

프로세스명 :  <input type="text" id="process" name="process"/>

<button onclick="processKill()">웹서버쪽 프로세스 죽이기</button>

<br/>

<textarea rows="8" cols="100" name="contents"><%=msg%></textarea>

</form>

</body>

</html>



8.실행


톰캣기동 : localhost:8080/jmxweb1/kmx.jsp


JmxAgent 기동 : JmxAgent.java 실행  run as , java application


#자바JMX, #JMX톰캣, #JMXWAS, #JMX강의, #JMX강좌, #JMX동영상, #JMX예제, #JMX교육, #자바네트워크, #자바, #JAVA, #JMX, #자바동영상, #JAVA동영상, #JMX란, #자바JMX동영상

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...