在registr.addComponent(MessageRouter)的过程中,将通过 MessageRouterConfig.getDefaults(defs, params, getName())设置MessageRouter配置信息。
在MessageRouterConfig注册了MessageRouter的所有信息,如接受消息组件列表、默认组件列表COMPONENT_CLASSES、集群组件列表COMP_CLUS_MAP,如果设置为集群模式,则在此过程中,将用COMP_CLUS_MAP中的值替换COMPONENT_CLASSES对迎的值。
各个常量对应关系列表:
DEF_MSG_RECEIVERS_NAMES_PROP_VAL:[bosh, c2s, monitor, s2s, sess-man]
DEF_REGISTRATOR_NAMES_PROP_VAL : [vhost-man, stats]
CLUSTER_REGISTRATOR_NAMES_PROP_VAL: [vhost-man, stats, cluster-contr]
ALL_MSG_RECEIVERS_NAMES_PROP_VAL:[c2s, s2s, sess-man, ssend, srecv, bosh, monitor]
SM_MSG_RECEIVERS_NAMES_PROP_VAL:[ext-comp, sess-man, monitor]
CS_MSG_RECEIVERS_NAMES_PROP_VAL :[c2s, s2s, ext-comp, bosh, monitor]
COMP_MSG_RECEIVERS_NAMES_PROP_VAL :[ext, monitor]
MessageRouterConfig.getDefaults(defs, params, getName())过程
第一:判断是否为集群模式,集群模式,则用集群component替换默认component
第二:String[] rcv_names = DEF_MSG_RECEIVERS_NAMES_PROP_VAL获取默认消息接受component
第三:根据配置类型:即ALL、SM、CS、COMP确定rcv_names 值。
第四:变量params,加载自定义组件
第五:判断rcv_names 中是否有集群组件,无,则添加tigase.cluster.ClusterConnectionManager
第六:判断rcv_names 中定义的组件是否有实现类,如果没有定义具体的实现了,则为其添加默认实现类tigase.server.xmppcomponent.ComponentConnectionManager。
第七:如果为集群模式,则registr = CLUSTER_REGISTRATOR_NAMES_PROP_VAL;添加到defs中。
第八:添加 defs.put(LOCAL_ADDRESSES_PROP_KEY, LOCAL_ADDRESSES_PROP_VALUE);
defs.put(DISCO_NAME_PROP_KEY, DISCO_NAME_PROP_VAL);
defs.put(DISCO_SHOW_VERSION_PROP_KEY, DISCO_SHOW_VERSION_PROP_VAL);
defs.put(UPDATES_CHECKING_PROP_KEY, UPDATES_CHECKING_PROP_VAL);
defs.put(UPDATES_CHECKING_INTERVAL_PROP_KEY, UPDATES_CHECKING_INTERVAL_PROP_VAL);
将defs返回MessageRouter,通过configRepo.putProperties(compId, prop);实现组件名与相关组件配置信息的存储。
最后,MessageRouter调用setProperties实现MessageRouter组件参数的设置。
所有初始化得Configurable组件需要通过componentAdded来实现。