This is an automated email from the ASF dual-hosted git repository.

tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git


The following commit(s) were added to refs/heads/main by this push:
     new 723ccb39 PROTON-2923 Move to Netty 4.2.x as base Netty version
723ccb39 is described below

commit 723ccb39e2f323587af8c94980265d515a80918c
Author: Timothy Bish <[email protected]>
AuthorDate: Tue Mar 24 16:58:25 2026 -0400

    PROTON-2923 Move to Netty 4.2.x as base Netty version
    
    Update code and dependencies to netty 4.2.10 as the base version and
    remove the deprecated usages of netty 4.1.x
---
 pom.xml                                            | 10 +--
 protonj2-client/pom.xml                            | 12 +--
 .../qpid/protonj2/client/TransportOptions.java     |  7 +-
 .../client/transport/netty4/EpollSupport.java      |  5 +-
 .../client/transport/netty4/IOUringSupport.java    | 89 ++++------------------
 .../client/transport/netty4/KQueueSupport.java     |  5 +-
 .../client/transport/netty4/Netty4IOContext.java   |  5 +-
 .../client/transport/netty4/TcpTransport.java      |  2 +-
 .../qpid/protonj2/client/impl/ConnectionTest.java  | 68 +++++++++++++++++
 .../client/transport/netty4/NettyServer.java       |  7 +-
 .../client/transport/netty4/SslSupportTest.java    |  3 -
 protonj2-test-driver/pom.xml                       |  5 --
 12 files changed, 107 insertions(+), 111 deletions(-)

diff --git a/pom.xml b/pom.xml
index 029259da..93de8fda 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,8 +40,7 @@
     <proton.version>0.34.1</proton.version>
     <slf4j.version>2.0.17</slf4j.version>
     <hamcrest.version>3.0</hamcrest.version>
-    <netty.version>4.1.131.Final</netty.version>
-    <netty.iouring.version>0.0.26.Final</netty.iouring.version>
+    <netty.version>4.2.10.Final</netty.version>
     <netty.tcnative.version>2.0.75.Final</netty.tcnative.version>
 
     <!-- Plugin versions -->
@@ -52,7 +51,6 @@
     <surefire.runOrder>filesystem</surefire.runOrder>
     <proton.trace.frames>false</proton.trace.frames>
 
-    <netty-scope>compile</netty-scope>
     
<netty-transport-native-io-uring-classifier>linux-x86_64</netty-transport-native-io-uring-classifier>
     
<netty-transport-native-epoll-classifier>linux-x86_64</netty-transport-native-epoll-classifier>
     
<netty-transport-native-kqueue-classifier>osx-x86_64</netty-transport-native-kqueue-classifier>
@@ -155,9 +153,9 @@
         <classifier>${netty-transport-native-kqueue-classifier}</classifier>
       </dependency>
       <dependency>
-        <groupId>io.netty.incubator</groupId>
-        <artifactId>netty-incubator-transport-native-io_uring</artifactId>
-        <version>${netty.iouring.version}</version>
+        <groupId>io.netty</groupId>
+        <artifactId>netty-transport-native-io_uring</artifactId>
+        <version>${netty.version}</version>
         <classifier>${netty-transport-native-io-uring-classifier}</classifier>
       </dependency>
       <!--  Testing only Uber Jar inclusion -->
diff --git a/protonj2-client/pom.xml b/protonj2-client/pom.xml
index 5700e1bf..d887e6eb 100644
--- a/protonj2-client/pom.xml
+++ b/protonj2-client/pom.xml
@@ -43,45 +43,37 @@
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-buffer</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-common</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-handler</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-codec-http</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport-native-epoll</artifactId>
       <classifier>${netty-transport-native-epoll-classifier}</classifier>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
-      <groupId>io.netty.incubator</groupId>
-      <artifactId>netty-incubator-transport-native-io_uring</artifactId>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-transport-native-io_uring</artifactId>
       <classifier>${netty-transport-native-io-uring-classifier}</classifier>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport-native-kqueue</artifactId>
       <classifier>${netty-transport-native-kqueue-classifier}</classifier>
-      <scope>${netty-scope}</scope>
     </dependency>
     <!-- Test dependencies -->
     <dependency>
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/TransportOptions.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/TransportOptions.java
index 47e4f3c7..475e0bd0 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/TransportOptions.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/TransportOptions.java
@@ -42,7 +42,12 @@ public class TransportOptions implements Cloneable {
     public static final boolean DEFAULT_USE_WEBSOCKETS = false;
     public static final boolean DEFAULT_WEBSOCKET_COMPRESSION = false;
     public static final int DEFAULT_WEBSOCKET_MAX_FRAME_SIZE = 65535;
-    private static final String[] DEFAULT_NATIVEIO_PREFERENCES_ARRAY = { 
"EPOLL", "KQUEUE" };
+    public static final String NATIVE_EPOLL_TRANSPORT = "EPOLL";
+    public static final String NATIVE_KQUEUE_TRANSPORT = "KQUEUE";
+    public static final String NATIVE_IO_URING_TRANSPORT = "IO_URING";
+    private static final String[] DEFAULT_NATIVEIO_PREFERENCES_ARRAY = { 
NATIVE_EPOLL_TRANSPORT,
+                                                                         
NATIVE_KQUEUE_TRANSPORT,
+                                                                         
NATIVE_IO_URING_TRANSPORT };
     public static final List<String> DEFAULT_NATIVEIO_PREFERENCES =
         Collections.unmodifiableList(Arrays.asList( 
DEFAULT_NATIVEIO_PREFERENCES_ARRAY ));
 
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/EpollSupport.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/EpollSupport.java
index c9408652..557b0b98 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/EpollSupport.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/EpollSupport.java
@@ -24,8 +24,9 @@ import org.slf4j.LoggerFactory;
 
 import io.netty.channel.Channel;
 import io.netty.channel.EventLoopGroup;
+import io.netty.channel.MultiThreadIoEventLoopGroup;
 import io.netty.channel.epoll.Epoll;
-import io.netty.channel.epoll.EpollEventLoopGroup;
+import io.netty.channel.epoll.EpollIoHandler;
 import io.netty.channel.epoll.EpollSocketChannel;
 
 public final class EpollSupport {
@@ -50,7 +51,7 @@ public final class EpollSupport {
     public static EventLoopGroup createGroup(int nThreads, ThreadFactory 
ioThreadFactory) {
         ensureAvailability();
 
-        return new EpollEventLoopGroup(nThreads, ioThreadFactory);
+        return new MultiThreadIoEventLoopGroup(nThreads, ioThreadFactory, 
EpollIoHandler.newFactory());
     }
 
     public static Class<? extends Channel> getChannelClass() {
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/IOUringSupport.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/IOUringSupport.java
index 2ea08040..373e71c8 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/IOUringSupport.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/IOUringSupport.java
@@ -16,8 +16,6 @@
  */
 package org.apache.qpid.protonj2.client.transport.netty4;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
 import java.util.concurrent.ThreadFactory;
 
 import org.apache.qpid.protonj2.client.TransportOptions;
@@ -26,105 +24,44 @@ import org.slf4j.LoggerFactory;
 
 import io.netty.channel.Channel;
 import io.netty.channel.EventLoopGroup;
+import io.netty.channel.MultiThreadIoEventLoopGroup;
+import io.netty.channel.uring.IoUring;
+import io.netty.channel.uring.IoUringIoHandler;
+import io.netty.channel.uring.IoUringSocketChannel;
 
-@SuppressWarnings("unchecked")
 public final class IOUringSupport {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(IOUringSupport.class);
 
     public static final String NAME = "IO_URING";
 
-    private static final boolean AVAILABLE;
-    private static final boolean INCUBATOR_VARIANT;
-    private static final Class<? extends Channel> SOCKET_CHANNEL_CLASS;
-    private static final Constructor<?> EVENTLOOP_CONSTRUCTOR;
-    private static final Method IOHANDLER_FACTORY;
-
-    static {
-        boolean available = false;
-        boolean incubator = false;
-        Class<? extends Channel> socketChannelClass = null;
-        Constructor<?> constructor = null;
-        Method ioHandlerFactory = null;
+    public static boolean isAvailable(TransportOptions transportOptions) {
+        return transportOptions.allowNativeIO() && isAvailable();
+    }
 
-        // Try for new Netty built in IoUring before falling back to incubator 
checks
+    public static boolean isAvailable() {
         try {
-            final Class<?> ioUring = 
Class.forName("io.netty.channel.uring.IoUring");
-            final Method isAvailable = 
ioUring.getDeclaredMethod("isAvailable", (Class<?>[])null);
-            final Class<?> eventLoopGroup = 
Class.forName("io.netty.channel.MultiThreadIoEventLoopGroup");
-            final Class<?> ioUringHandler = 
Class.forName("io.netty.channel.uring.IoUringIoHandler");
-            final Class<?> ioUringHandlerFactory = 
Class.forName("io.netty.channel.IoHandlerFactory");
-
-            constructor = eventLoopGroup.getDeclaredConstructor(int.class, 
ThreadFactory.class, ioUringHandlerFactory);
-            ioHandlerFactory = ioUringHandler.getDeclaredMethod("newFactory");
-            socketChannelClass = (Class<? extends Channel>) 
Class.forName("io.netty.channel.uring.IoUringSocketChannel");
-            available = (boolean) isAvailable.invoke(null);
+            return IoUring.isAvailable();
         } catch (UnsatisfiedLinkError | Exception e) {
             LOG.debug("Unable to enable netty io_uring support due to error", 
e);
+            return false;
         }
-
-        if (!available) {
-            try {
-                final Class<?> ioUring = 
Class.forName("io.netty.incubator.channel.uring.IOUring");
-                final Method isAvailable = 
ioUring.getDeclaredMethod("isAvailable");
-                final Class<?> eventLoopGroup = 
Class.forName("io.netty.incubator.channel.uring.IOUringEventLoopGroup");
-
-                socketChannelClass = (Class<? extends Channel>) 
Class.forName("io.netty.incubator.channel.uring.IOUringSocketChannel");
-                constructor = eventLoopGroup.getDeclaredConstructor(int.class, 
ThreadFactory.class);
-                available = (boolean) isAvailable.invoke(null);
-                incubator = true;
-            } catch (UnsatisfiedLinkError | Exception e) {
-                LOG.debug("Unable to enable netty incubator io_uring support 
due to error", e);
-            }
-        }
-
-        AVAILABLE = available;
-        INCUBATOR_VARIANT = incubator;
-        SOCKET_CHANNEL_CLASS = socketChannelClass;
-        EVENTLOOP_CONSTRUCTOR = constructor;
-        IOHANDLER_FACTORY = ioHandlerFactory;
-    }
-
-    public static boolean isAvailable(TransportOptions transportOptions) {
-        return transportOptions.allowNativeIO() && AVAILABLE;
-    }
-
-    public static boolean isAvailable() {
-        return AVAILABLE;
     }
 
     public static EventLoopGroup createGroup(int nThreads, ThreadFactory 
ioThreadFactory) {
         ensureAvailability();
 
-        Exception createError = null;
-
-        if (INCUBATOR_VARIANT) {
-            try {
-                return (EventLoopGroup) 
EVENTLOOP_CONSTRUCTOR.newInstance(nThreads, ioThreadFactory);
-            } catch (Exception e) {
-                LOG.debug("Unable to create Netty incubator io_uring 
EventLoopGroup due to error", e);
-                createError = e;
-            }
-        } else {
-            try {
-                return (EventLoopGroup) 
EVENTLOOP_CONSTRUCTOR.newInstance(nThreads, ioThreadFactory, 
IOHANDLER_FACTORY.invoke(null));
-            } catch (Exception e) {
-                LOG.debug("Unable to create Netty io_uring EventLoopGroup due 
to error", e);
-                createError = e;
-            }
-        }
-
-        throw (Error) new UnsupportedOperationException("Netty io_uring failed 
to create resource").initCause(createError);
+        return new MultiThreadIoEventLoopGroup(nThreads, ioThreadFactory, 
IoUringIoHandler.newFactory());
     }
 
     public static Class<? extends Channel> getChannelClass() {
         ensureAvailability();
 
-        return SOCKET_CHANNEL_CLASS;
+        return IoUringSocketChannel.class;
     }
 
     public static void ensureAvailability() {
-        if (!AVAILABLE) {
+        if (!isAvailable()) {
             throw new UnsupportedOperationException(
                 "Netty io_ring support is not enabled because the Netty 
library indicates it is not present or disabled");
         }
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/KQueueSupport.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/KQueueSupport.java
index 4c8ef723..040782ff 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/KQueueSupport.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/KQueueSupport.java
@@ -24,8 +24,9 @@ import org.slf4j.LoggerFactory;
 
 import io.netty.channel.Channel;
 import io.netty.channel.EventLoopGroup;
+import io.netty.channel.MultiThreadIoEventLoopGroup;
 import io.netty.channel.kqueue.KQueue;
-import io.netty.channel.kqueue.KQueueEventLoopGroup;
+import io.netty.channel.kqueue.KQueueIoHandler;
 import io.netty.channel.kqueue.KQueueSocketChannel;
 
 public final class KQueueSupport {
@@ -50,7 +51,7 @@ public final class KQueueSupport {
     public static EventLoopGroup createGroup(int nThreads, ThreadFactory 
ioThreadFactory) {
         ensureAvailability();
 
-        return new KQueueEventLoopGroup(nThreads, ioThreadFactory);
+        return new MultiThreadIoEventLoopGroup(nThreads, ioThreadFactory, 
KQueueIoHandler.newFactory());
     }
 
     public static Class<? extends Channel> getChannelClass() {
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/Netty4IOContext.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/Netty4IOContext.java
index c1b87797..20cd0a6d 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/Netty4IOContext.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/Netty4IOContext.java
@@ -33,7 +33,8 @@ import org.slf4j.LoggerFactory;
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.MultiThreadIoEventLoopGroup;
+import io.netty.channel.nio.NioIoHandler;
 import io.netty.channel.socket.nio.NioSocketChannel;
 
 /**
@@ -100,7 +101,7 @@ public final class Netty4IOContext implements IOContext {
 
         if (selectedGroup == null) {
             LOG.trace("Netty Transports will be using NIO mode");
-            selectedGroup = new NioEventLoopGroup(1, threadFactory);
+            selectedGroup = new MultiThreadIoEventLoopGroup(1, threadFactory, 
NioIoHandler.newFactory());
             selectedChannelClass = NioSocketChannel.class;
         }
 
diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransport.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransport.java
index 13d2c55e..c8e0c6ea 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransport.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransport.java
@@ -428,7 +428,7 @@ public class TcpTransport implements Transport {
 
         if (options.receiveBufferSize() != -1) {
             bootstrap.option(ChannelOption.SO_RCVBUF, 
options.receiveBufferSize());
-            bootstrap.option(ChannelOption.RCVBUF_ALLOCATOR, new 
FixedRecvByteBufAllocator(options.receiveBufferSize()));
+            bootstrap.option(ChannelOption.RECVBUF_ALLOCATOR, new 
FixedRecvByteBufAllocator(options.receiveBufferSize()));
         }
 
         if (options.trafficClass() != -1) {
diff --git 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
index bb5afaa9..b2bea64a 100644
--- 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
+++ 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.io.IOException;
 import java.net.URI;
@@ -45,6 +46,7 @@ import org.apache.qpid.protonj2.client.ReceiverOptions;
 import org.apache.qpid.protonj2.client.Sender;
 import org.apache.qpid.protonj2.client.Session;
 import org.apache.qpid.protonj2.client.Tracker;
+import org.apache.qpid.protonj2.client.TransportOptions;
 import 
org.apache.qpid.protonj2.client.exceptions.ClientConnectionRedirectedException;
 import 
org.apache.qpid.protonj2.client.exceptions.ClientConnectionRemotelyClosedException;
 import org.apache.qpid.protonj2.client.exceptions.ClientException;
@@ -52,6 +54,9 @@ import 
org.apache.qpid.protonj2.client.exceptions.ClientIOException;
 import 
org.apache.qpid.protonj2.client.exceptions.ClientUnsupportedOperationException;
 import org.apache.qpid.protonj2.client.test.ImperativeClientTestCase;
 import org.apache.qpid.protonj2.client.test.Wait;
+import org.apache.qpid.protonj2.client.transport.netty4.EpollSupport;
+import org.apache.qpid.protonj2.client.transport.netty4.IOUringSupport;
+import org.apache.qpid.protonj2.client.transport.netty4.KQueueSupport;
 import org.apache.qpid.protonj2.test.driver.ProtonTestServer;
 import org.apache.qpid.protonj2.test.driver.ProtonTestServerOptions;
 import org.apache.qpid.protonj2.test.driver.codec.messaging.TerminusDurability;
@@ -1892,6 +1897,69 @@ public class ConnectionTest extends 
ImperativeClientTestCase {
         }
     }
 
+
+    @Test
+    public void testOpenDurableReceiverFromConnectionEpoll() throws Exception {
+        assumeTrue(EpollSupport.isAvailable());
+
+        
doTestConnectionToPeerUsingNativeTransport(TransportOptions.NATIVE_EPOLL_TRANSPORT);
+    }
+
+    @Test
+    public void testOpenDurableReceiverFromConnectionKQueue() throws Exception 
{
+        assumeTrue(KQueueSupport.isAvailable());
+
+        
doTestConnectionToPeerUsingNativeTransport(TransportOptions.NATIVE_KQUEUE_TRANSPORT);
+    }
+
+    @Test
+    public void testOpenDurableReceiverFromConnectionIoUring() throws 
Exception {
+        assumeTrue(IOUringSupport.isAvailable());
+
+        
doTestConnectionToPeerUsingNativeTransport(TransportOptions.NATIVE_IO_URING_TRANSPORT);
+    }
+
+    private void doTestConnectionToPeerUsingNativeTransport(String nativeIO) 
throws Exception {
+        final String address = "test-topic";
+        final String subscriptionName = "mySubscriptionName";
+
+        try (ProtonTestServer peer = new ProtonTestServer()) {
+            peer.expectSASLAnonymousConnect();
+            peer.expectOpen().respond();
+            peer.expectBegin().respond();
+            peer.expectAttach().ofReceiver()
+                               .withName(subscriptionName)
+                               .withSource()
+                                   .withAddress(address)
+                                   
.withDurable(TerminusDurability.UNSETTLED_STATE)
+                                   
.withExpiryPolicy(TerminusExpiryPolicy.NEVER)
+                                   .withDistributionMode("copy")
+                               .and().respond();
+            peer.expectFlow();
+            peer.expectDetach().respond();
+            peer.expectClose().respond();
+            peer.start();
+
+            URI remoteURI = peer.getServerURI();
+
+            LOG.info("Test started, peer listening on: {}", remoteURI);
+
+            Client container = Client.create();
+            ConnectionOptions options = new ConnectionOptions();
+            options.transportOptions().allowNativeIO(true);
+            options.transportOptions().nativeIOPreference(nativeIO);
+            Connection connection = container.connect(remoteURI.getHost(), 
remoteURI.getPort(), options);
+            Receiver receiver = connection.openDurableReceiver(address, 
subscriptionName);
+
+            receiver.openFuture().get();
+            receiver.closeAsync().get();
+
+            connection.closeAsync().get();
+
+            peer.waitForScriptToComplete(6, TimeUnit.SECONDS);
+        }
+    }
+
     @Disabled("Disabled due to requirement of hard coded port")
     @Test
     public void testLocalPortOption() throws Exception {
diff --git 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java
 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java
index 52b7273e..eda5ad55 100644
--- 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java
+++ 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java
@@ -49,7 +49,8 @@ import io.netty.channel.ChannelOption;
 import io.netty.channel.ChannelOutboundHandlerAdapter;
 import io.netty.channel.ChannelPromise;
 import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.MultiThreadIoEventLoopGroup;
+import io.netty.channel.nio.NioIoHandler;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.handler.codec.http.DefaultFullHttpResponse;
 import io.netty.handler.codec.http.FullHttpRequest;
@@ -195,8 +196,8 @@ public abstract class NettyServer implements AutoCloseable {
         if (started.compareAndSet(false, true)) {
 
             // Configure the server.
-            bossGroup = new NioEventLoopGroup(1);
-            workerGroup = new NioEventLoopGroup();
+            bossGroup = new MultiThreadIoEventLoopGroup(1, 
NioIoHandler.newFactory());
+            workerGroup = new MultiThreadIoEventLoopGroup(1, 
NioIoHandler.newFactory());
 
             ServerBootstrap server = new ServerBootstrap();
             server.group(bossGroup, workerGroup);
diff --git 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java
 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java
index 33630e4e..7da1df8f 100644
--- 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java
+++ 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java
@@ -48,7 +48,6 @@ import io.netty.handler.ssl.SslHandler;
 /**
  * Tests for the TransportSupport class.
  */
-@SuppressWarnings("deprecation")
 public class SslSupportTest extends ImperativeClientTestCase {
 
     public static final String PASSWORD = "password";
@@ -878,7 +877,6 @@ public class SslSupportTest extends 
ImperativeClientTestCase {
     public void testIsOpenSSLPossibleWhenHostNameVerificationConfigured() 
throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
-        assumeTrue(OpenSsl.supportsHostnameValidation());
 
         SslOptions options = new SslOptions();
         options.allowNativeSSL(true);
@@ -894,7 +892,6 @@ public class SslSupportTest extends 
ImperativeClientTestCase {
     public void testIsOpenSSLPossibleWhenKeyAliasIsSpecified() throws 
Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
-        assumeTrue(OpenSsl.supportsHostnameValidation());
 
         SslOptions options = new SslOptions();
         options.allowNativeSSL(true);
diff --git a/protonj2-test-driver/pom.xml b/protonj2-test-driver/pom.xml
index 4fcfd6d8..de85b9c4 100644
--- a/protonj2-test-driver/pom.xml
+++ b/protonj2-test-driver/pom.xml
@@ -32,27 +32,22 @@
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-buffer</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-common</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-handler</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-codec-http</artifactId>
-      <scope>${netty-scope}</scope>
     </dependency>
     <!-- All other test peer dependencies -->
     <dependency>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to