use of org.glassfish.grizzly.nio.SelectorRunner in project Payara by payara.
the class ServiceInitializerFilter method handleAccept.
@Override
public NextAction handleAccept(final FilterChainContext ctx) throws IOException {
final NIOConnection nioConnection = (NIOConnection) ctx.getConnection();
final SelectableChannel channel = nioConnection.getChannel();
// The LazyServiceInitializer's name we're looking for should be equal
// to either listener or protocol name
final String listenerName = listener.getName();
final String protocolName = listener.getNetworkListener().getProtocol();
if (targetInitializer == null) {
synchronized (LOCK_OBJ) {
if (targetInitializer == null) {
LazyServiceInitializer targetInitializerLocal = null;
for (final ActiveDescriptor<?> initializer : initializerImplList) {
String serviceName = initializer.getName();
if (serviceName != null && (listenerName.equalsIgnoreCase(serviceName) || protocolName.equalsIgnoreCase(serviceName))) {
targetInitializerLocal = (LazyServiceInitializer) locator.getServiceHandle(initializer).getService();
break;
}
}
if (targetInitializerLocal == null) {
logger.log(Level.SEVERE, "NO Lazy Initialiser implementation was found for port = {0}", String.valueOf(listener.getPort()));
nioConnection.close();
return ctx.getStopAction();
}
if (!targetInitializerLocal.initializeService()) {
logger.log(Level.SEVERE, "Lazy Service initialization failed for port = {0}", String.valueOf(listener.getPort()));
nioConnection.close();
return ctx.getStopAction();
}
targetInitializer = targetInitializerLocal;
}
}
}
final NextAction nextAction = ctx.getSuspendAction();
ctx.completeAndRecycle();
// Deregister channel
final SelectorRunner runner = nioConnection.getSelectorRunner();
final SelectorHandler selectorHandler = ((NIOTransport) nioConnection.getTransport()).getSelectorHandler();
selectorHandler.deregisterChannel(runner, channel);
// Underlying service rely the channel is blocking
channel.configureBlocking(true);
targetInitializer.handleRequest(channel);
return nextAction;
}
Aggregations