code: @Override
      public /*final*/ void bind(ResourceAddress address, IoHandler handler, BridgeSessionInitializer<? extends IoFuture> initializer) {
  
          // bind only address with matching scheme
          URI location = address.getResource();
          String schemeName = location.getScheme();
          if (!canBind(schemeName)) {
              throw new IllegalArgumentException(format("Unexpected scheme \"%s\" for URI: %s", schemeName, location));
          }
          
          if (!started.get()) {
              synchronized (started) {
                  if (!started.get()) {
                      init();
                      started.set(true);
                  }
              }
          }
  
          boolean bindAlternate;
          do {
              bindAlternate = address.getOption(BIND_ALTERNATE);
              //
              // add binding, expecting no clashing (according to BINDINGS_COMPARATOR)
              //
              Binding newBinding = new Binding(address, handler, initializer);
              Binding oldBinding = bindings.addBinding(newBinding);
  
              //System.out.println(getClass().getSimpleName()+"@"+hashCode()+" binding: "+address.getExternalURI()+" -- "+address.getOption(NEXT_PROTOCOL));
  
              if (oldBinding != null) {
                  throw new RuntimeException("Unable to bind address " + address
                          + " because it collides with an already bound address " + oldBinding.bindAddress());
              }
  
              bindInternal(address, handler, initializer);
              address = address.getOption(ALTERNATE);
              
          } while (address != null && bindAlternate);
      }
docs: note: relax final for WebSocket balancer initializer (temporary)