/** 从Diamond配置中心提取信息,构造TAtomDataSource、构造有优先级信息的读写DBSelector ---add by mazhidan.pt */
  public void init() {
    // 警告: 不要在构造DefaultDiamondManager时就注册ManagerListener(比如:configReceiver)
    // 也就是说,不要这样用: new DefaultDiamondManager(dbGroupKey, configReceiver),
    // 而是要设成null,等第一次取得信息并解析完成后再注册,这样可以不用同步,避免任何与并发相关的问题,
    // 因为有可能在第一次刚取回信息后,Diamond配置中心那边马上修改了记录,导致ManagerListener这个线程立刻收到信息,
    // 造成初始化线程和ManagerListener线程同时解析信息。
    configFactory = new DefaultConfigDataHandlerFactory();
    globalHandler = configFactory.getConfigDataHandler(tGroupDataSource.getFullDbGroupKey(), null);

    String dsWeightCommaStr =
        globalHandler.getData(
            tGroupDataSource.getConfigReceiveTimeout(),
            ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);

    // extra config
    extraFactory = new DefaultConfigDataHandlerFactory();
    extraHandler =
        extraFactory.getConfigDataHandler(tGroupDataSource.getDbGroupExtraConfigKey(), null);
    String extraConfig =
        extraHandler.getData(
            tGroupDataSource.getConfigReceiveTimeout(),
            ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);

    if (extraConfig != null) {
      parseExtraConfig(extraConfig);
      extraHandler.addListener(extraGroupConfigReceiver, null);
    }

    List<DataSourceWrapper> dswList = parse2DataSourceWrapperList(dsWeightCommaStr);
    resetByDataSourceWrapper(dswList);
    globalHandler.addListener(configReceiver, null);
  }
 public String getPasswd() {
   if (null != passwdHandler) {
     String passwdStr =
         passwdHandler.getData(
             TDDLConstant.DIAMOND_GET_DATA_TIMEOUT,
             ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);
     if (passwdStr == null) {
       logger.error("[getDataError] remote password string is empty !");
       return null;
     }
     return DruidConfParser.parserPasswd(passwdStr);
   }
   logger.error("[getDataError] passwdConfig not init !");
   return null;
 }