通过对ClusterManager 源码的学习,对其Cluster的 整体思路有了一些认识。
在ClusterManager 中有一段静态代码段,如下:
static {
// Listen for clustering property changes (e.g. enabled/disabled)
PropertyEventDispatcher.addListener(new PropertyEventListener() {
public void propertySet(String property, Map<String, Object> params) { /* ignore */ }
public void propertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
public void xmlPropertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
public void xmlPropertySet(String property, Map<String, Object> params) {
if (ClusterManager.CLUSTER_PROPERTY_NAME.equals(property)) {
if (Boolean.parseBoolean((String) params.get("value"))) {
// Reload/sync all Jive properties
JiveProperties.getInstance().init();
ClusterManager.startup();
} else {
ClusterManager.shutdown();
}
}
}
});
其主要功能是 建立一个 属性 监听器,并插入到 PropertyEventDispatcher 中。PropertyEventDispatcher 顾名思义,就是一个属性事件分发器,当openfire系统中的某个属性发生变换后,PropertyEventDispatcher 会通知其保存的各个PropertyEventListener(当然包含此处建立的这个)。
在这里,属性监听器 的主要功能 体现在 xmlPropertySet 函数中,即 监听 clustering.enabled 属性值的变化,如果 为变为true,则重载所有Jive属性值,并调
用 ClusterManager.startup() 来启动cluster。 否则,则关闭cluster,即执行 ClusterManager.shutdown()。
下面来看看ClusterManager.startup() 的代码:
public static synchronized void startup() {
if (isCl