服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

定义service4jmx2组件 简单扩展mx4j


  前做的服务器框架,已经支持jmxri的jmx实现,但框架直接绑定jmx环境,不是一个良好的设计,当时没想到好办法。最近研究mx4j的实现,重构了一下,可以同时支持jmxri和mx4j了,与jmx环境接耦了。现在又有了新的需求,要求提供httpserver功能,在service4sock的基础上已经实现了,但是浪费了一个端口资源,需要想办法与jmx公用才好。继续研究mx4j的源码,又有了新的收获。

已经完成的工作:
* done 定义service4jmx服务器组件,使用jmx技术仅仅为了便于管理;主要使用spring作为ioc容器;
* done 修改register/unregister;对于"start:开头的,自动调用start()/stop()
* done 定义service4jmx2服务器组件,同时支持jmxri和mx4j等多种jmx实现!
* done 开头对应domain;修改为标志:start=1,stop=1
* done 使用jmxri返回html能直接显示;而在mx4j中被自动替换;
* done 配置:对于mx4j使用processornamestring替换processorname,后者需要objectname类型;
* todo 如何直接显示某个xml文档,而非html文档?(即没有xslt解析器)

某个业务日志需求
(1)业务日志需要按天写到一文件中去,一天一个文件,参照以前日志文件规则
(2)服务器支持一监控端口,用户可以通过浏览器访问端口获取数据页面
(3)用户可见到的数据内容参考老的业务服务器内容
(4)用户view由日志内容和一样式文件组合而成,采用技术为xml(日志内容)+xsl(样式文件)

我的思路是,扩展httpadaptor的实现,定义若干新的command功能。

代码
  1. public interface myhttpadaptormbean extends httpadaptormbean, mbeanregistration {}   
  2. public class myhttpadaptor extends httpadaptor implements myhttpadaptormbean {}  

研究mx4j.tools.adaptor.http.httpadaptor源码,发现以下几处:
1,缺省提供的功能项:
代码
  1. private string[][] defaultcommandprocessors = {   
  2.    {"server", "mx4j.tools.adaptor.http.servercommandprocessor"},   
  3.    {"serverbydomain", "mx4j.tools.adaptor.http.serverbydomaincommandprocessor"},   
  4.    {"mbean", "mx4j.tools.adaptor.http.mbeancommandprocessor"},   
  5.    {"setattributes", "mx4j.tools.adaptor.http.setattributescommandprocessor"},   
  6.    {"setattribute", "mx4j.tools.adaptor.http.setattributecommandprocessor"},   
  7.    {"getattribute", "mx4j.tools.adaptor.http.getattributecommandprocessor"},   
  8.    {"delete", "mx4j.tools.adaptor.http.deletembeancommandprocessor"},   
  9.    {"invoke", "mx4j.tools.adaptor.http.invokeoperationcommandprocessor"},   
  10.    {"create", "mx4j.tools.adaptor.http.creatembeancommandprocessor"},   
  11.    {"constructors", "mx4j.tools.adaptor.http.constructorscommandprocessor"},   
  12.    {"relation", "mx4j.tools.adaptor.http.relationcommandprocessor"},   
  13.    {"empty", "mx4j.tools.adaptor.http.emptycommandprocessor"}};  
2,用户增加新的页面:
代码
  1. public void addcommandprocessor(string path, httpcommandprocessor processor)   
  2. public void addcommandprocessor(string path, string processorclass)  
3,设置xslt解析器:
代码
  1. public void setprocessor(processormbean processor)   
  2. public void setprocessorclass(string processorclass)   
  3. public void setprocessornamestring(string processorname) throws malformedobjectnameexception   
  4. public void setprocessorname(objectname processorname)  

4,defaultcommandprocessors在preregister()/buildcommands()中被添加到commands中。而commands在run()/getprocessor(string path)中使用,然后由postprocess(httpout, httpin, document)来处理,最后生成text/html文档。因而可能需要修改postprocess,判断对应的xsl文件是否存在。

研究mx4j.tools.adaptor.http.xsltprocessor源码,发现以下几处:
1,在mx4j-3.0.1/src/tools/mx4j/tools/adaptor/http/xsl目录下有很多xsl文件,用于解析xml的。

代码
  1. private string path = "mx4j/tools/adaptor/http/xsl";  

2,系统缺省访问的 serverbydomain 功能项
代码
  1. private string defaultpage = "serverbydomain";  

扫描关注微信公众号