WEB开发网
开发学院WEB开发Jsp 定义Service4JMX2组件 简单扩展MX4j 阅读

定义Service4JMX2组件 简单扩展MX4j

 2008-01-05 08:25:58 来源:WEB开发网   
核心提示:前做的服务器框架,已经支持JMXri的JMX实现,定义Service4JMX2组件 简单扩展MX4j,但框架直接绑定JMX环境,不是一个良好的设计,最后生成text/html文档,因而可能需要修改postProcess,当时没想到好办法,最近研究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文件是否存在。


Tags:定义 ServiceJMX 组件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接