资源描述
MX4J
Made by Michael.Shi
mailto:shipl@
MX4J 3
JMXServiceURL 3
JMXConnectorServer 3
例子: 3
AbstractDynamicMBean: 5
HttpAdaptor: 6
Constructor: 6
Attribute 7
XSLTProcessor 7
Brief Intro: 7
Constructor: 7
JMXAuthenticator 7
NamingService 8
部署 8
调用 8
更改端口 8
MX4J
JMXServiceURL
格式:service:jmx: <protocolprotocol:"rmi", "iiop", "jmxmp" or "soap"
>://[[[ <host>]: <port>]/ <path>]
它可以看做是JMXConnectorServer的地址,JMXConnector可以通过这个地址连接到JMXConnectorServer。
JMXConnectorServer
一旦JMXConnectorServer执行stop方法,则不能restart.
MX4J下JMX配置(利用HttpAdaptor和XSLTProcessor)
这种配置功能上类似于HtmlAdaptor和JConnector,都是启动server,来进行MBean的注册。
1
creates MBeanServer
2
将MC4J HttpAdaptor 对象注册入MBean
设HttpAdaptor MBean的attributes--port,host
3
将MC4J XSLTProcessor,注册入MBean
设置一些attribue,也可以不设置
4
加入被管理MBean(一些测试的bean)
5
执行HttpAdaptor MBean的具体服务方法
// 执行HttpAdaptor MBean的addAuthorization(username, password)方法
server.invoke(serverName, "addAuthorization", new Object[]{"mx4j", "mx4j"}, new String[]{"java.lang.String", "java.lang.String"});
// 执行HttpAdaptor MBean(即serverName)的start()方
server.invoke(serverName, "start", null, null);
例子:
package com.primeton.spl.mx4j;
import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.primeton.spl.dynamic.HelloDynamic;
import mx4j.tools.adaptor.http.HttpAdaptor;
import mx4j.tools.adaptor.http.XSLTProcessor;
public class HttpAdaptors
{
private String mbeanDomainName = "MX4J";
private int port = 8091;
private String host = "localhost";
private String username = "admin";
private String password = "admin";
private String path = ".";
private String pathInJar = null;
public void start() throws Exception
{
// 开启MBeanServer
MBeanServer mbServer = MBeanServerFactory.createMBeanServer(mbeanDomainName);
// 将MX4J 中的httpadpator注册到MBeanServer中
ObjectName serverName = new ObjectName("Http:name=HttpAdaptor");
HttpAdaptor adaptor = new HttpAdaptor();
mbServer.registerMBean(adaptor, serverName);
// 设置httpadpator 属性
mbServer.setAttribute(serverName, new Attribute("Port", port));
mbServer.setAttribute(serverName, new Attribute("Host", host));
// MX4J要求 设置XSLTProcessor, 注入MBean
// 提供解析 XML功能
ObjectName processorName = new ObjectName("Http:name=XSLTProcessor");
XSLTProcessor xsltP = new XSLTProcessor();
mbServer.registerMBean(xsltP, processorName);
// 设置XSLTProcessor属性
mbServer.setAttribute(processorName, new Attribute("File", path));
mbServer.setAttribute(processorName, new Attribute("UseCache", new Boolean("false")));
mbServer.setAttribute(processorName, new Attribute("PathInJar", pathInJar));
// 设置httpadaptor的Processor
mbServer.setAttribute(serverName, new Attribute("ProcessorName", processorName));
// 添加business MBean
// HelloDynamic() 是一个MBean, 这里只是为了测试,可以换成其他的MBean
ObjectName bzMBeanObjName = new ObjectName("bzMBean:name=Hello");
mbServer.registerMBean(new HelloDynamic(), bzMBeanObjName);
// 执行 httpadaptor中的具体服务方法
mbServer.invoke(serverName, "addAuthorization", new String[]{username, password},
new String[]{String.class.getName(), String.class.getName()});
// use basic authentication
//server.setAttribute(serverName, new Attribute("AuthenticationMethod", "basic"));
// 执行httpadaptor 的start 方法
mbServer.invoke(serverName, "start", null, null);
}
public static void main(String[] args) throws Exception
{
new HttpAdaptors().start();
}
}
AbstractDynamicMBean:
该工具类使得能够更加容易地写出Dynamic MBean。
通过extends这个类,开发人员就不用implement DynamicMBean接口。只需要提供MBean的metadata(override few methods)和实现(implement methods)即可。
经常被override的方法:
· createMBeanAttributeInfo, if the MBeans has manageable attributes
· createMBeanOperationInfo, if the MBeans has manageable operations
· createMBeanNotificationInfo, if the MBeans has manageable notifications
· createMBeanConstructorInfo, if the MBeans has manageable constructors
· getMBeanDescription
通过override上述等方法,可以对属性、操作进行暴露。
HttpAdaptormx4j.tools.adaptor.http.HttpAdaptor
:
该类设置basic adaptor 来监听HTTP请求(类似于HtmpAdaptor)。
Constructor:
有四种种构造方法:
其中带参数的,可以分别设置port(int),host(String);
利用无参构造方法可以在注册MBean后通过MBeanServer进行设置:
HttpAdaptor httpAdaptor = new HttpAdaptor();
ObjectName serverName = new ObjectName(DOMAIN_NAME + ":name=HttpAdaptor");
mbserver.registerMBean(httpAdaptor, serverName);
mbserver.setAttribute(serverName, new Attribute("Host", host));
addAuthorization(String username,String pwd)
添加username和password,进行授权。
start()
开启服务器。
注意:注册MBean后,都可以由MBean的invoke方法进行动态调用。
Attribute
Port: 设置server监听端口,默认8080;
Host:设置server监听主机名,默认localhost即你不能通过其他电脑进行访问。可以用0.0.0.0,这样对所有本地接口开放。
。
AuthenticationMethod:设置认证方法,合法的是:none,basic,digest参考security
part
。
Processor:设置processor。
ProcessorName:设置已作为Processor注册MBean的ObjectName。
ProcessorNameString:同上,只是名字作为String 进行传递。
XSLTProcessormx4j.tools.adaptor.http
Brief Intro:
XSL(Extensible Stylesheet Language):可扩展样式表语言。用来解析处理XML文档。
包含两部分:
* XSLT – 用于转换 XML 文档的语言
* XPath – 用于在 XML 文档中导航的语言
Constructor:
只有一个无参构造函数。
XSLTProcessor将xml文档穿过一个XSLT transformation,进行转换。它也是一个MBean,可以讲它进行register。
通过mbserver.setAttribute(processorName, new Attribute("File", root)); 可以设置它的属性”File”,它通过这个属性创建文件输入流。
JMXAuthenticator
当创建JMXConnectorServer时可以使用JMXAuthenticator来实现身份验证准入。但是只能判断是否准入,凡是认证的用户可以在JMXConnectorServer上进行任何操作。
NamingService
包裹rmiregistry的MBean。
当使用rmi connector时,需要在cmd下运行rmiregistry。使用NamingService便可以代替之。
部署
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName naming = new ObjectName("Naming:type=registry");
server.createMBean("mx4j.tools.naming.NamingService", naming, null);
调用
使用start开始,使用stop停止
Object proxy = MBeanServerInvocationHandler.newProxyInstance(server, naming, NamingServiceMBean.class, false);
NamingServiceMBean mbean = (NamingServiceMBean)proxy;
mbean.start();
...
mbean.stop();
或者用MBeanServer来显示invoke
server.invoke(naming, "start", new Object[0], new String[0]);
...
server.invoke(naming, "stop", new Object[0], new String[0]);
更改端口
可以在run time时进行端口的更改。
当namignservice 的MBean 启动时,需要先停止,修改端口后再启动。
展开阅读全文