Ejemplo n.º 1
0
  /**
   * {@inheritDoc}
   *
   * @see org.jgroups.conf.ProtocolStackConfigurator#getProtocolStack()
   */
  @Override
  public List<org.jgroups.conf.ProtocolConfiguration> getProtocolStack() {
    List<org.jgroups.conf.ProtocolConfiguration> configs =
        new ArrayList<org.jgroups.conf.ProtocolConfiguration>(
            this.configuration.getProtocols().size() + 1);
    TransportConfiguration transport = this.configuration.getTransport();
    org.jgroups.conf.ProtocolConfiguration config = this.createProtocol(transport);
    Map<String, String> properties = config.getProperties();

    if (transport.isShared()) {
      properties.put(Global.SINGLETON_NAME, this.configuration.getName());
    }

    SocketBinding binding = transport.getSocketBinding();
    if (binding != null) {
      this.configureBindAddress(transport, config, binding);
      this.configureServerSocket(transport, config, "bind_port", binding);
      this.configureMulticastSocket(transport, config, "mcast_addr", "mcast_port", binding);
    }

    SocketBinding diagnosticsSocketBinding = transport.getDiagnosticsSocketBinding();
    boolean diagnostics = (diagnosticsSocketBinding != null);
    properties.put("enable_diagnostics", String.valueOf(diagnostics));
    if (diagnostics) {
      this.configureMulticastSocket(
          transport, config, "diagnostics_addr", "diagnostics_port", diagnosticsSocketBinding);
    }

    configs.add(config);

    for (ProtocolConfiguration protocol : this.configuration.getProtocols()) {
      config = this.createProtocol(protocol);
      binding = protocol.getSocketBinding();
      if (binding != null) {
        this.configureBindAddress(protocol, config, binding);
        this.configureServerSocket(protocol, config, "bind_port", binding);
        this.configureServerSocket(protocol, config, "start_port", binding);
        this.configureMulticastSocket(protocol, config, "mcast_addr", "mcast_port", binding);
      } else if (transport.getSocketBinding() != null) {
        // If no socket-binding was specified, use bind address of transport
        this.configureBindAddress(protocol, config, transport.getSocketBinding());
      }

      configs.add(config);
    }
    return configs;
  }