JMX 학습지 (4) JMX RMI
커넥터 개념:
JMX 규범은 연결기의 개념(Connectors)을 정의하고 연결기는 JMX의 3층 구조에 있는 분포식 서비스 층에 위치한다.커넥터는 MBean 서버와 관리 응용 프로그램 간의 통신을 구축합니다.연결기는 프록시층에 주재하는 연결기 서버 (connector 서버) 와 응용 프로그램을 관리하는 연결기 클라이언트 (connector client) 로 구성되어 있습니다.연결기 서버 (connector server) 는 MBean 서버에 연결되어 클라이언트 (connector client) 의 요청을 감청합니다.커넥터 클라이언트는 커넥터 서버와 연결을 맺는 것을 책임집니다.connector client는 일반적으로 connector 서버와 다른 JVM에 있고 다른 기계에서 실행됩니다.1. 커넥터 유형(Connector type)
connector client는 주어진 프로토콜을 통해connector 서버와 연결을 맺고 MBean 서버에 원격으로 접근합니다.JMX API는 다양한 유형의 커넥터를 사용하여 MBean 서버에 연결할 수 있습니다.*JMX API는 표준 커넥터인 RMI 커넥터를 정의합니다. RMI 프로토콜을 통해 MBeanServer * JMX API에 원격으로 액세스할 수 있도록 지원합니다.JMXMP 프로토콜(JMX Message Protocol)이 구현되었습니다.선택할 수 있는 연결기로서 자바SE 플랫폼에 통합되지 않습니다. 필요하면 Sun 공식으로jar*사용자 정의 연결기 프로토콜을 다운로드하십시오. 2.커넥터 서버 주소
일반적으로, 하나의 connector 서버에는 클래스 JMXServiceURL로 표시된 주소가 있는데, 이 클래스의 실례는 변할 수 없습니다.서로 다른 커넥터를 사용하면 JMXServiceURL 작성 방식이 달라집니다.형식은 다음과 같습니다. 서비스: jmx:protocol:sap 설명: 서비스: jmx: 이것은 JMX URL의 표준 접두사입니다. 모든 JMX URL은 이 문자열로 시작해야 합니다.protocol은 연결 연결기 서버(connector server)를 지정하는 전송 프로토콜 괄호 중 일부분입니다. 선택할 수 있는 부분은sap가 연결기 서버의 주소입니다.sap의 문법 형식:/[host[:port][url-path]host는 호스트 이름을 표시하고,port는 10진법 포트 번호인host와port는 생략할 수 있으나,host가 없을 때porturl-path는 "/"기호로 시작하여 JMX API를 참고하십시오.http://docs.oracle.com/javase/8/docs/api/index.html?javax/management/remote/rmi/package-summary.html
참조:http://www.l99.com/EditText_view.action?textId=480750
3. RMI 커넥터
JMX API는 RMI를 통해 MBeanServer RMI 커넥터 서버에 원격으로 액세스할 수 있는 표준 커넥터 - RMI 커넥터를 정의합니다. 예: 서비스: jmx:rmi://localhost:1099/jndi/rmi://localhost:8899/myname설명: 이 JMXService URL에서 첫 번째 rmi는 rmi 연결기를 가리키며 연결기로 RMI 전송 프로토콜을 사용한다는 것을 나타낸다. 두 번째 rmi는 RMI 연결 서비스 접속기 저장 메모리 루트localhost:1099를 지정한다. 이것은 connector 서버의 IP와 포트이고 이 부분은 선택할 수 있는 항목으로 생략될 수 있다.생략하면,connector 서버는 임의로 사용할 수 있는 포트/jndi/rmi://localhost:8899/myname:이것은 커넥터 서버의 경로입니다. 커넥터 서버의 stud는 JNDI API를 사용하여rmi://localhost:8899/myname이 주소
RMI 커넥터 서버 만들기
일반적으로 RMI connector 서버의 연결기 주소를 제공하고 JMXConnectorServerFactory를 사용합니다.newJMXConnectorServer 방법으로 RMI connector cerver 만들기
JMX API 참조:http://docs.oracle.com/javase/8/docs/api/index.html?javax/management/remote/rmi/package-summary.html
다음은 RMI 커넥터 원격 관리자를 사용하는 예입니다.
Step 1.MBean 인터페이스 정의
package com.jmx.demo9;
import java.io.Serializable;
public interface HelloMBean extends Serializable {
public void setName(String name);
public String getName();
public void sayHello();
}
Step 2.MBean 인터페이스 구현 클래스
package com.jmx.demo9;
import java.io.Serializable;
public class Hello implements HelloMBean, Serializable {
private String name;
public synchronized void setName(String name) {
this.name = name;
}
public synchronized String getName() {
return name;
}
public synchronized void sayHello() {
System.out.println("Hello," + name);
}
}
Step 3.서버
package com.jmx.demo9;
import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXAuthenticator;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import javax.security.auth.Subject;
public class JMXAgent {
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) throws Exception {
System.out.println("--------------JMX Agent----------- ");
LocateRegistry.createRegistry(1099);
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName helloName = new ObjectName("com.jmx.demo9:name=Hello");
Hello hello = new Hello();
HashMap<String, Object> prop = new HashMap<String, Object>();
prop.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator() {
public Subject authenticate(Object credentials) {
if (credentials instanceof String) {
if (credentials.equals("Hello")) {
return new Subject();
}
}
throw new SecurityException("not authicated");
}
});
JMXConnectorServer cserver = JMXConnectorServerFactory
.newJMXConnectorServer(new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"),
prop, server);
cserver.start();
server.registerMBean(hello, helloName);
for (ObjectInstance object : server.queryMBeans(null, null)) {
System.out.println(object.getObjectName());
}
System.out.println(hello);
System.out.println("start.....");
System.out.println("
");
}
}
note:ObjectName 객체 식별자 명명 규칙은 JMX API를 참조합니다.http://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html
Step 4.클라이언트 (애플리케이션 관리)
package com.jmx.demo9;
import java.util.HashMap;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
public static void main(String[] args) throws Exception {
HashMap<String, Object> prop = new HashMap<String, Object>();
prop.put(JMXConnector.CREDENTIALS, "Hello");
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
JMXConnector conn = JMXConnectorFactory.connect(url, prop);
MBeanServerConnection mbsc = conn.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("com.jmx.demo9:name=Hello");
HelloMBean hello = JMX.newMBeanProxy(mbsc, mbeanName,HelloMBean.class);
hello.setName("World!");
hello.sayHello();
}
}
테스트 결과:
먼저 JMXAgent를 시작하고 Client를 시작합니다.
--------------JMX Agent-----------
JMImplementation:type=MBeanServerDelegate
com.jmx.demo9:name=Hello
com.jmx.demo9.Hello@47eaec
start.....
Hello,world
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.