ChannelInitializerExtensions Class — netty Architecture
Architecture documentation for the ChannelInitializerExtensions class in ChannelInitializerExtensions.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 0aa447fe_97b1_f1a0_eb76_9ecf6f5dcc64["ChannelInitializerExtensions"] cb29dc4b_6558_3149_3d50_2eedc0d4495a["ChannelInitializerExtensions.java"] 0aa447fe_97b1_f1a0_eb76_9ecf6f5dcc64 -->|defined in| cb29dc4b_6558_3149_3d50_2eedc0d4495a d168ed28_259d_fc41_3c7c_282c491da8f4["ChannelInitializerExtensions()"] 0aa447fe_97b1_f1a0_eb76_9ecf6f5dcc64 -->|method| d168ed28_259d_fc41_3c7c_282c491da8f4 6827123f_cb1e_696a_d42a_879a12db7365["extensions()"] 0aa447fe_97b1_f1a0_eb76_9ecf6f5dcc64 -->|method| 6827123f_cb1e_696a_d42a_879a12db7365
Relationship Graph
Source Code
transport/src/main/java/io/netty/bootstrap/ChannelInitializerExtensions.java lines 33–127
abstract class ChannelInitializerExtensions {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(ChannelInitializerExtensions.class);
private static volatile ChannelInitializerExtensions implementation;
private ChannelInitializerExtensions() {
}
/**
* Get the configuration extensions, which is a no-op implementation by default,
* or a service-loading implementation if the {@code io.netty.bootstrap.extensions} system property is
* {@code serviceload}.
*/
static ChannelInitializerExtensions getExtensions() {
ChannelInitializerExtensions impl = implementation;
if (impl == null) {
synchronized (ChannelInitializerExtensions.class) {
impl = implementation;
if (impl != null) {
return impl;
}
String extensionProp = SystemPropertyUtil.get(ChannelInitializerExtension.EXTENSIONS_SYSTEM_PROPERTY);
logger.debug("-Dio.netty.bootstrap.extensions: {}", extensionProp);
if ("serviceload".equalsIgnoreCase(extensionProp)) {
impl = new ServiceLoadingExtensions(true);
} else if ("log".equalsIgnoreCase(extensionProp)) {
impl = new ServiceLoadingExtensions(false);
} else {
impl = new EmptyExtensions();
}
implementation = impl;
}
}
return impl;
}
/**
* Get the list of available extensions. The list is unmodifiable.
*/
abstract Collection<ChannelInitializerExtension> extensions(ClassLoader cl);
private static final class EmptyExtensions extends ChannelInitializerExtensions {
@Override
Collection<ChannelInitializerExtension> extensions(ClassLoader cl) {
return Collections.emptyList();
}
}
private static final class ServiceLoadingExtensions extends ChannelInitializerExtensions {
private final boolean loadAndCache;
private WeakReference<ClassLoader> classLoader;
private Collection<ChannelInitializerExtension> extensions;
ServiceLoadingExtensions(boolean loadAndCache) {
this.loadAndCache = loadAndCache;
}
@SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
@Override
synchronized Collection<ChannelInitializerExtension> extensions(ClassLoader cl) {
ClassLoader configured = classLoader == null ? null : classLoader.get();
if (configured == null || configured != cl) {
Collection<ChannelInitializerExtension> loaded = serviceLoadExtensions(loadAndCache, cl);
classLoader = new WeakReference<ClassLoader>(cl);
extensions = loadAndCache ? loaded : Collections.<ChannelInitializerExtension>emptyList();
}
return extensions;
}
private static Collection<ChannelInitializerExtension> serviceLoadExtensions(boolean load, ClassLoader cl) {
List<ChannelInitializerExtension> extensions = new ArrayList<ChannelInitializerExtension>();
ServiceLoader<ChannelInitializerExtension> loader = ServiceLoader.load(
ChannelInitializerExtension.class, cl);
for (ChannelInitializerExtension extension : loader) {
extensions.add(extension);
}
if (!extensions.isEmpty()) {
Collections.sort(extensions, new Comparator<ChannelInitializerExtension>() {
@Override
Source
Frequently Asked Questions
What is the ChannelInitializerExtensions class?
ChannelInitializerExtensions is a class in the netty codebase, defined in transport/src/main/java/io/netty/bootstrap/ChannelInitializerExtensions.java.
Where is ChannelInitializerExtensions defined?
ChannelInitializerExtensions is defined in transport/src/main/java/io/netty/bootstrap/ChannelInitializerExtensions.java at line 33.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free