关于Java组件开发:一个概念框架 (3)
[ 来源:互网络 | 更新日期:2007-09-19 04:27:04 | 浏览次数:12467]
简介:ConfigurationChangeNotifier扮演Observable的角色并在XML配置文件发生更改时启动通知ConfigManger线程,并将指出其内容上的改变。
Singleton控制工厂提供的方法是
?getXXXService():方法返回在XML文件中定义的服务提供的实现类
?getXXXAdapter():方法返回在XML文件中定义适配实现类
配置文件的更改应该是动态的
如果组件是不可变的,每串代码应该有与singleton实例同样的拷贝,但是如果它是不是不变得,我们需要改变时,配置文件需要动态改变。
有两种可能的情况但动态配置文件更改:
?单一JVM情况
?多JVM情况
单一JVM情况
如果程序在单一JVM中运行,事情就简单得多了。我们已经知道,SingletonControllerFactory通常在JVM中有一个实例,所以任何时候配置文件发生任何改变,将需要根据一些通知机制轮流载入java串行的配置对象来重新载入工厂对象。这是基于Observer-Observable模式并做两件事:
?通过XMLizer(单独的组件)来读取和处理XML配置文件并载入Java配置对象。
?监视XML配置文件可能发生的更改。
图4显示ConfigManager的方法:

Figure 4. ConfigManager
ConfigManager类当被Observable通知时扮演Observer角色,其更新方法将会被调用。Update()方法将会调用SingletonControllerFactory的reload()方法,所以新创建的java对象将会从其配置信息中重新载入。
ConfigurationChangeNotifier扮演Observable的角色并在XML配置文件发生更改时启动通知ConfigManger线程,并将指出其内容上的改变。图5显示其关系:

Figure 5. ConfigurationChangeNotifier
多JVM情况
在多JVM情况下,事情就不会变得这样简单。我们必须有
?需要机制在运行时来动态载入更改的XML配置文件而不关闭整个企业程序。
?需要机制保证在群中只有一个实例在运行。
结合RMI利用JNDI是一种选择来保证在集群环境中的多个节点中的特定的一个节点自由一个实例在运行。RMI服务需要编写,同时RMI stub要在RMI服务之外创建。创建的RMI stub需要被绑定在程序服务器的JNDI树上。这个对象将保持在container中,container可以让对象在集群中都可以用到。
为了处理这种情况,我们需要引入ConfigManager,它将会做一下任务:
?创建需要可以动态改变的XML配置文件。
?创建来自XML文件的java串行文件。串行和非串行化将会在不同的组件中完成。
?创建RMI服务,注册从RMI服务中创建的RMI stub,并通过RMI服务载入串行配置对象。
?将RMI stub与集群环境中的JNDI树的任何节点绑定。
?创建通知系统,其将重新绑定RMI服务并当XML文件似乎发生变化时重新载入对象。
图6显示RMI服务的接口以及其实现:

Figure 6. RMI service
在多JVM情况下,ConfigManager如图7:

Figure 7. ConfigManager in a multiple-JVM scenario
ConfigManagerMultipleJVM 类


您的位置:
