Skip to content

Commit

Permalink
WFLY-7442 Capability org.wildfly.undertow.listener needs a well defin…
Browse files Browse the repository at this point in the history
…ed contract
  • Loading branch information
stuartwdouglas committed Nov 4, 2016
1 parent a0038b0 commit 0efa9f9
Show file tree
Hide file tree
Showing 20 changed files with 134 additions and 59 deletions.
Expand Up @@ -25,27 +25,27 @@
import java.net.InetAddress;

import org.jboss.modcluster.container.Connector;
import org.wildfly.extension.undertow.ListenerService;
import org.wildfly.extension.undertow.AjpListenerService;
import org.wildfly.extension.undertow.HttpListenerService;
import org.wildfly.extension.undertow.UndertowListener;
import org.wildfly.mod_cluster.undertow.metric.BytesReceivedStreamSourceConduit;
import org.wildfly.mod_cluster.undertow.metric.BytesSentStreamSinkConduit;
import org.wildfly.mod_cluster.undertow.metric.RequestCountHttpHandler;
import org.wildfly.mod_cluster.undertow.metric.RunningRequestsHttpHandler;

/**
* Adapts {@link ListenerService} to a {@link Connector}.
* Adapts {@link UndertowListener} to a {@link Connector}.
*
* @author Radoslav Husar
* @version Aug 2013
* @since 8.0
*/
public class UndertowConnector implements Connector {

private final ListenerService<?> listener;
private final UndertowListener listener;
private InetAddress address;

public UndertowConnector(ListenerService<?> listener) {
public UndertowConnector(UndertowListener listener) {
this.listener = listener;
}

Expand All @@ -70,7 +70,7 @@ public Type getType() {

@Override
public InetAddress getAddress() {
return address == null ? this.listener.getBinding().getValue().getAddress() : address;
return address == null ? this.listener.getSocketBinding().getAddress() : address;
}

@Override
Expand All @@ -80,12 +80,12 @@ public void setAddress(InetAddress address) {

@Override
public int getPort() {
return this.listener.getBinding().getValue().getAbsolutePort();
return this.listener.getSocketBinding().getAbsolutePort();
}

@Override
public boolean isAvailable() {
return !this.listener.getWorker().getValue().isShutdown();
return !this.listener.isShutdown();
}

/**
Expand Down
Expand Up @@ -29,8 +29,8 @@
import org.jboss.modcluster.container.Engine;
import org.jboss.modcluster.container.Host;
import org.jboss.modcluster.container.Server;
import org.wildfly.extension.undertow.ListenerService;
import org.wildfly.extension.undertow.SessionCookieConfig;
import org.wildfly.extension.undertow.UndertowListener;
import org.wildfly.extension.undertow.UndertowService;

/**
Expand Down Expand Up @@ -100,7 +100,7 @@ public Connector getProxyConnector() {

@Override
public Iterable<Connector> getConnectors() {
final Iterator<ListenerService<?>> listeners = this.server.getListeners().iterator();
final Iterator<UndertowListener> listeners = this.server.getListeners().iterator();

final Iterator<Connector> iterator = new Iterator<Connector>() {
@Override
Expand Down
Expand Up @@ -48,9 +48,9 @@
import org.jboss.msc.service.StopContext;
import org.jboss.msc.value.Value;
import org.jboss.threads.JBossThreadFactory;
import org.wildfly.extension.undertow.ListenerService;
import org.wildfly.extension.undertow.Host;
import org.wildfly.extension.undertow.UndertowEventListener;
import org.wildfly.extension.undertow.UndertowListener;
import org.wildfly.extension.undertow.UndertowService;

/**
Expand All @@ -63,7 +63,7 @@ public class UndertowEventHandlerAdapter implements UndertowEventListener, Servi
private static final Logger log = Logger.getLogger("org.jboss.mod_cluster.undertow");

@SuppressWarnings("rawtypes")
private final Value<ListenerService> listener;
private final Value<UndertowListener> listener;
private final Value<UndertowService> service;
private final Value<ContainerEventHandler> eventHandler;
private final Value<SuspendController> suspendController;
Expand All @@ -73,7 +73,7 @@ public class UndertowEventHandlerAdapter implements UndertowEventListener, Servi
private volatile Connector connector;
private int statusInterval;

public UndertowEventHandlerAdapter(Value<ContainerEventHandler> eventHandler, Value<UndertowService> service, @SuppressWarnings("rawtypes") Value<ListenerService> listener, Value<SuspendController> suspendController, int statusInterval) {
public UndertowEventHandlerAdapter(Value<ContainerEventHandler> eventHandler, Value<UndertowService> service, @SuppressWarnings("rawtypes") Value<UndertowListener> listener, Value<SuspendController> suspendController, int statusInterval) {
this.eventHandler = eventHandler;
this.service = service;
this.listener = listener;
Expand Down
Expand Up @@ -31,7 +31,7 @@
import org.wildfly.clustering.service.AsynchronousServiceBuilder;
import org.wildfly.extension.mod_cluster.ContainerEventHandlerAdapterBuilder;
import org.wildfly.extension.mod_cluster.ContainerEventHandlerService;
import org.wildfly.extension.undertow.ListenerService;
import org.wildfly.extension.undertow.UndertowListener;
import org.wildfly.extension.undertow.UndertowService;

public class UndertowEventHandlerAdapterBuilder implements ContainerEventHandlerAdapterBuilder {
Expand All @@ -43,11 +43,11 @@ public ServiceBuilder<?> build(ServiceTarget target, String connector, int statu
InjectedValue<UndertowService> undertowService = new InjectedValue<>();
InjectedValue<SuspendController> suspendController = new InjectedValue<>();
@SuppressWarnings("rawtypes")
InjectedValue<ListenerService> listener = new InjectedValue<>();
InjectedValue<UndertowListener> listener = new InjectedValue<>();
return new AsynchronousServiceBuilder<>(SERVICE_NAME, new UndertowEventHandlerAdapter(eventHandler, undertowService, listener, suspendController, statusInterval)).build(target)
.addDependency(ContainerEventHandlerService.SERVICE_NAME, ContainerEventHandler.class, eventHandler)
.addDependency(UndertowService.UNDERTOW, UndertowService.class, undertowService)
.addDependency(UndertowService.listenerName(connector), ListenerService.class, listener)
.addDependency(UndertowService.listenerName(connector), UndertowListener.class, listener)
.addDependency(SuspendController.SERVICE_NAME, SuspendController.class, suspendController)
;
}
Expand Down
Expand Up @@ -30,7 +30,7 @@ public TestServer(String name, String defaultHost) {
super(name, defaultHost);
}

public TestServer(String name, String defaultHost, Host host, ListenerService<?> listener) {
public TestServer(String name, String defaultHost, Host host, ListenerService listener) {
this(name, defaultHost);
this.registerHost(host);
this.registerListener(listener);
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.jboss.as.network.SocketBinding;
import org.jboss.as.network.SocketBindingManager;
import org.jboss.modcluster.container.Connector;
import org.jboss.msc.value.InjectedValue;
import org.junit.Test;
import org.wildfly.extension.undertow.AjpListenerService;
import org.wildfly.extension.undertow.HttpListenerService;
Expand All @@ -45,7 +44,7 @@
import org.xnio.OptionMap;

public class UndertowConnectorTestCase {
private final ListenerService<?> listener = mock(ListenerService.class);
private final ListenerService listener = mock(ListenerService.class);
private final Connector connector = new UndertowConnector(this.listener);

@Test
Expand All @@ -62,10 +61,8 @@ public void getAddress() throws UnknownHostException {
NetworkInterfaceBinding interfaceBinding = new NetworkInterfaceBinding(Collections.<NetworkInterface>emptySet(), expected);
SocketBindingManager bindingManager = mock(SocketBindingManager.class);
SocketBinding binding = new SocketBinding("socket", 1, true, null, 0, interfaceBinding, bindingManager, Collections.<ClientMapping>emptyList());
InjectedValue<SocketBinding> bindingValue = new InjectedValue<SocketBinding>();

bindingValue.inject(binding);
when(this.listener.getBinding()).thenReturn(bindingValue);
when(this.listener.getSocketBinding()).thenReturn(binding);

InetAddress result = this.connector.getAddress();

Expand All @@ -78,10 +75,8 @@ public void getPort() throws UnknownHostException {
NetworkInterfaceBinding interfaceBinding = new NetworkInterfaceBinding(Collections.<NetworkInterface>emptySet(), InetAddress.getLocalHost());
SocketBindingManager bindingManager = mock(SocketBindingManager.class);
SocketBinding binding = new SocketBinding("socket", expected, true, null, 0, interfaceBinding, bindingManager, Collections.<ClientMapping>emptyList());
InjectedValue<SocketBinding> bindingValue = new InjectedValue<SocketBinding>();

bindingValue.inject(binding);
when(this.listener.getBinding()).thenReturn(bindingValue);
when(this.listener.getSocketBinding()).thenReturn(binding);

int result = this.connector.getPort();

Expand Down
Expand Up @@ -39,7 +39,7 @@ class AjpListenerAdd extends ListenerAdd {
}

@Override
ListenerService<? extends ListenerService> createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
ListenerService createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
ModelNode schemeNode = AjpListenerResourceDefinition.SCHEME.resolveModelAttribute(context, model);
String scheme = null;
if (schemeNode.isDefined()) {
Expand All @@ -51,7 +51,7 @@ ListenerService<? extends ListenerService> createService(String name, final Stri
}

@Override
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends ListenerService> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends UndertowListener> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
ModelNode redirectBindingRef = ListenerResourceDefinition.REDIRECT_SOCKET.resolveModelAttribute(context, model);
if (redirectBindingRef.isDefined()) {
serviceBuilder.addDependency(SocketBinding.JBOSS_BINDING_NAME.append(redirectBindingRef.asString()), SocketBinding.class, service.getRedirectSocket());
Expand Down
Expand Up @@ -42,7 +42,7 @@
/**
* @author <a href="mailto:tomaz.cerar@redhat.com">Tomaz Cerar</a> (c) 2013 Red Hat Inc.
*/
public class AjpListenerService extends ListenerService<AjpListenerService> {
public class AjpListenerService extends ListenerService {

private volatile AcceptingChannel<StreamConnection> server;
private final String scheme;
Expand Down Expand Up @@ -95,7 +95,7 @@ protected void preStart(final StartContext context) {
}

@Override
protected String getProtocol() {
public String getProtocol() {
return "ajp";
}
}
Expand Up @@ -43,7 +43,7 @@ public class HttpListenerAdd extends ListenerAdd {
}

@Override
ListenerService<? extends ListenerService> createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
ListenerService createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
final boolean certificateForwarding = HttpListenerResourceDefinition.CERTIFICATE_FORWARDING.resolveModelAttribute(context, model).asBoolean();
final boolean proxyAddressForwarding = HttpListenerResourceDefinition.PROXY_ADDRESS_FORWARDING.resolveModelAttribute(context, model).asBoolean();
OptionMap.Builder listenerBuilder = OptionMap.builder().addAll(listenerOptions);
Expand All @@ -66,7 +66,7 @@ static void handleHttp2Options(OperationContext context, ModelNode model, Option
}

@Override
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends ListenerService> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends UndertowListener> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
ModelNode redirectBindingRef = ListenerResourceDefinition.REDIRECT_SOCKET.resolveModelAttribute(context, model);
if (redirectBindingRef.isDefined()) {
serviceBuilder.addDependency(SocketBinding.JBOSS_BINDING_NAME.append(redirectBindingRef.asString()), SocketBinding.class, service.getRedirectSocket());
Expand Down
Expand Up @@ -54,7 +54,7 @@
* @author Stuart Douglas
* @author Tomaz Cerar
*/
public class HttpListenerService extends ListenerService<HttpListenerService> {
public class HttpListenerService extends ListenerService {
private volatile AcceptingChannel<StreamConnection> server;

private final ChannelUpgradeHandler httpUpgradeHandler = new ChannelUpgradeHandler();
Expand Down Expand Up @@ -153,7 +153,7 @@ public InjectedValue<ListenerRegistry> getHttpListenerRegistry() {
}

@Override
protected String getProtocol() {
public String getProtocol() {
return PROTOCOL;
}
}
Expand Up @@ -50,7 +50,7 @@ public class HttpsListenerAdd extends ListenerAdd {
}

@Override
ListenerService<? extends ListenerService> createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
ListenerService createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException {
OptionMap.Builder builder = OptionMap.builder().addAll(socketOptions);
HttpsListenerResourceDefinition.VERIFY_CLIENT.resolveOption(context, model, builder);
ModelNode value = HttpsListenerResourceDefinition.ENABLED_CIPHER_SUITES.resolveModelAttribute(context, model);
Expand All @@ -72,7 +72,7 @@ ListenerService<? extends ListenerService> createService(String name, final Stri
}

@Override
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends ListenerService> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends UndertowListener> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException {
serviceBuilder.addDependency(HttpListenerAdd.REGISTRY_SERVICE_NAME, ListenerRegistry.class, ((HttpListenerService) service).getHttpListenerRegistry());

ModelNode sslContextModel = HttpsListenerResourceDefinition.SSL_CONTEXT.resolveModelAttribute(context, model);
Expand Down
Expand Up @@ -156,7 +156,7 @@ protected void stopListening() {
}

@Override
protected String getProtocol() {
public String getProtocol() {
return PROTOCOL;
}

Expand Down
Expand Up @@ -71,7 +71,7 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod
OptionMap socketOptions = OptionList.resolveOptions(context, model, ListenerResourceDefinition.SOCKET_OPTIONS);
String serverName = parent.getLastElement().getValue();
final ServiceName listenerServiceName = UndertowService.listenerName(name);
final ListenerService<? extends ListenerService> service = createService(name, serverName, context, model, listenerOptions,socketOptions);
final ListenerService service = createService(name, serverName, context, model, listenerOptions,socketOptions);
if (peerHostLookup) {
service.addWrapperHandler(new HandlerWrapper() {
@Override
Expand Down Expand Up @@ -101,7 +101,7 @@ public HttpHandler wrap(HttpHandler handler) {
final ServiceName socketBindingServiceName = context.getCapabilityServiceName(ListenerResourceDefinition.SOCKET_CAPABILITY, bindingRef, SocketBinding.class);
final ServiceName workerServiceName = context.getCapabilityServiceName(ListenerResourceDefinition.IO_WORKER_CAPABILITY, workerName, XnioWorker.class);
final ServiceName bufferPoolServiceName = context.getCapabilityServiceName(ListenerResourceDefinition.IO_BUFFER_POOL_CAPABILITY, bufferPoolName, Pool.class);
final ServiceBuilder<? extends ListenerService> serviceBuilder = context.getServiceTarget().addService(listenerServiceName, service);
final ServiceBuilder<? extends UndertowListener> serviceBuilder = context.getServiceTarget().addService(listenerServiceName, service);
serviceBuilder.addDependency(workerServiceName, XnioWorker.class, service.getWorker())
.addDependency(socketBindingServiceName, SocketBinding.class, service.getBinding())
.addDependency(bufferPoolServiceName, (Injector) service.getBufferPool())
Expand All @@ -112,8 +112,8 @@ public HttpHandler wrap(HttpHandler handler) {

}

abstract ListenerService<? extends ListenerService> createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException;
abstract ListenerService createService(String name, final String serverName, final OperationContext context, ModelNode model, OptionMap listenerOptions, OptionMap socketOptions) throws OperationFailedException;

abstract void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends ListenerService> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException;
abstract void configureAdditionalDependencies(OperationContext context, ServiceBuilder<? extends UndertowListener> serviceBuilder, ModelNode model, ListenerService service) throws OperationFailedException;

}
Expand Up @@ -271,7 +271,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat
return;
}
String op = operation.get(NAME).asString();
ListenerService<?> service = listenerSC.getValue();
ListenerService service = listenerSC.getValue();
ConnectorStatistics stats = service.getOpenListener().getConnectorStatistics();
if(stats != null) {
ConnectorStat element = ConnectorStat.getStat(op);
Expand Down Expand Up @@ -318,7 +318,7 @@ protected boolean applyUpdateToRuntime(OperationContext context, ModelNode opera
// may be different now than it was before (different system props, or vault contents)
// Instead we consider the previous setting to be enabled if the service Mode != Mode.NEVER
final ServiceController<?> controller = context.getServiceRegistry(true).getRequiredService(listenerServiceName);
ListenerService<?> listenerService = (ListenerService<?>) controller.getService();
ListenerService listenerService = (ListenerService) controller.getService();
boolean currentEnabled = listenerService.isEnabled();
handbackHolder.setHandback(currentEnabled);
listenerService.setEnabled(enabled);
Expand All @@ -331,7 +331,7 @@ protected void revertUpdateToRuntime(OperationContext context, ModelNode operati

final ServiceName listenerServiceName = UndertowService.listenerName(context.getCurrentAddressValue());
final ServiceController<?> controller = context.getServiceRegistry(true).getRequiredService(listenerServiceName);
ListenerService<?> listenerService = (ListenerService<?>) controller.getService();
ListenerService listenerService = (ListenerService) controller.getService();
listenerService.setEnabled(handback);
}
}
Expand Down

0 comments on commit 0efa9f9

Please sign in to comment.