code: public boolean startRegistry(HeartbeatConfig heartbeatConfig) {
      	
          if(logger.isInfoEnabled()) {
              logger.info("Node registry starting...");
          }
          try {
          	try {
      			Class<?> clazz = Class.forName(balancerRunner.balancerContext.nodeCommunicationProtocolClassName);
      			heartbeatService = (IServerHeartbeatService) clazz.newInstance();
      		} catch (Exception e) {
      			throw new RuntimeException("Error loading the node communication protocol: " + balancerRunner.balancerContext.nodeCommunicationProtocolClassName, e);
      		}
              balancerRunner.balancerContext.aliveNodes = new CopyOnWriteArrayList<Node>();
              balancerRunner.balancerContext.jvmRouteToSipNode = new ConcurrentHashMap<String, Node>();
              heartbeatService.init(this,serverAddress, heartbeatConfig);
              heartbeatService.startServer();
              this.nodeExpirationTask = new NodeExpirationTimerTask();
              this.taskTimer.scheduleAtFixedRate(this.nodeExpirationTask, this.nodeInfoExpirationTaskInterval, this.nodeInfoExpirationTaskInterval);
              if(logger.isInfoEnabled()) {
                  logger.info("Node expiration task created");							
                  logger.info("Node registry started");
              }
          } catch (Exception e) {
              logger.error("Unexpected exception while starting the registry", e);
              return false;
          }
  
          return true;
      }
docs: {@inheritDoc}