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

    Introspector introspector = new Introspector(protocol);

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

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

    stack.add(protocol);

    final Class<? extends TP> transportClass = introspector.getProtocolClass().asSubclass(TP.class);
    PrivilegedExceptionAction<TP> action =
        new PrivilegedExceptionAction<TP>() {
          @Override
          public TP run() throws InstantiationException, IllegalAccessException {
            return transportClass.newInstance();
          }
        };

    try {
      stack.addAll(
          createProtocols(
              this.configuration, WildFlySecurityManager.doChecked(action).isMulticastCapable()));
    } catch (PrivilegedActionException e) {
      throw new IllegalStateException(e.getCause());
    }

    return stack;
  }