对于MBean的实现结构做了调整,主要包括两个方面:
1.原来的实现方式是将两个主要的外层element实现为MBean,其余的element都作为子对象处理。虽然功能上可以完成需要,但是缺点在于MBean的实现和操作都比较复杂,维护起来也比较麻烦。新的实现方式是将所有element都作为对象处理(只需要拿到最外层的element对象,其余都可以作为它的子对象得到),而只将管理部分的逻辑(包括初始化,读写对象,保存,恢复等操作)实现为MBean,这样使得实现,操作和维护都比较简单,而且更加直观。
2.原来的实现没有考虑客户端更改配置对象后的保存和生效等问题,新的实现将这些功能作为管理逻辑实现为MBean,这样客户端在更改了配置对象后可以有选择性的决定是不是要保存并写入配置文件,或者放弃修改恢复到上次的保存状态。
补充:
对于修改实现结构的具体原因及分析过程如下:必须修改的主要原因是原来的结构将配置对象直接映射为MBean,这样如果客户端修改了配置,会直接影响到服务端的运行状态,而实际上我们是不希望这样的,也就是说可能有些配置需要更改后即时生效,有些却不需要(或者底层不支持)。基于这种想法,会有几种解决方案:一种是不修改原来的MBean,而在其基础上实现一层管理MBean;第二种就是上面两点中说明的方式,即舍弃原来的MBean,只做一层管理用的MBean,配置项都表现为对象来操作。这里选择了第二种实现方案,原因是现在看来已经不需要再把配置项这层内容实现为MBean,而只需要管理一层的逻辑,这样不但使层次清晰,而且简化了代码,以后配置如果扩展了,只需要增加或修改相应的配置类实现,而不必做相应的MBean修改。至此,已经解决了目前所遇到的问题。