Ignition 8.1 Jetty 12 Upgrade

Hello, in a module with websockets managed by Ignition Jetty werserver, we are using the following artifact:

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>10.0.15</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-api</artifactId>
            <version>10.0.15</version>
            <scope>provided</scope>
        </dependency>
		
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-server</artifactId>
            <version>10.0.15</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-servlet</artifactId>
            <version>10.0.15</version>
            <scope>provided</scope>
        </dependency>

I try to upgrade them for Ignition 8.1.49,

it works for:

        <!-- Core Jetty server -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>12.0.17</version>
            <scope>provided</scope>
        </dependency>

but not with:

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>12.0.17</version>
        </dependency>
        
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-api</artifactId>
            <version>12.0.17</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-server</artifactId>
            <version>12.0.17</version>
            <scope>provided</scope>
        </dependency>
Could not find artifact org.eclipse.jetty:jetty-servlet:pom:12.0.17 in releases (https://nexus.inductiveautomation.com/repository/inductiveautomation-releases)

I'm not sure I have selected the right new articfact ?

My code with Jetty 10:

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;

import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
import org.eclipse.jetty.websocket.server.JettyWebSocketCreator;

import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;

....

    public void createServer(int maxClient) {
        try {
            this.maxClient = maxClient;
            WebResourceManager web = gatewayContext.getWebResourceManager();
            web.addServlet(wsPath, PerspectiveWebSocketServlet.class);
            logger.info("createServer : {} servlet added",wsPath);
            this.executorProcessReception = Executors.newFixedThreadPool(maxClient);
        } catch (Exception e) {
            logger.error("createServer : Exception : ", e);
        }
    }

...

    public static class PerspectiveWebSocketServlet extends JettyWebSocketServlet {

        public PerspectiveWebSocketServlet() {
        }

        @Override
        protected void configure(JettyWebSocketServletFactory jettyWebSocketServletFactory) {
            jettyWebSocketServletFactory.setMaxTextMessageSize(65536);
            jettyWebSocketServletFactory.setCreator(new PerspectiveWebSocketCreator());
        }
    }

    public static class PerspectiveWebSocketCreator implements JettyWebSocketCreator {

        private final Logger logger = LoggerFactory.getLogger(getClass());

        @Override
        public Object createWebSocket(JettyServerUpgradeRequest jettyServerUpgradeRequest, JettyServerUpgradeResponse jettyServerUpgradeResponse) {
            logger.info("createWebSocket");
            return new WebSocketChannel();
        }
    }

    @WebSocket
    public static class WebSocketChannel
    {
        private final Logger logger = LoggerFactory.getLogger(getClass());

        public Session getSession() {
            return memoSession;
        }

        private Session memoSession;

        @OnWebSocketConnect
        public void onWebSocketConnect(Session session)
        {
            try {
                this.memoSession = session;
                String sessionId = String.valueOf(session.hashCode());
                logger.debug("sessionId = {} - onConnect", sessionId);
                sendMessage(session, createSignalingMessage(MESSAGE_READY, ""));
            } catch (Exception e) {
                logger.error("onConnect : Exception : ", e);
            }
        }

        @OnWebSocketMessage
        public void onWebSocketText(String message)
        {
            String sessionId = String.valueOf(getSession().hashCode());
            Session wsSession = getSession();
            try {
                if (!message.equals("HEARTBEAT")) {
                    logger.debug("sessionId = {} - onWebSocketText - LocalAddress = {} - RemoteAddress = {} - message = {}",
                            sessionId,
                            wsSession.getLocalAddress(),
                            wsSession.getRemoteAddress(),
                            message);
                }
                if (message.equals("HEARTBEAT")) {
                    // réponse au heartbeat envoyé par le client JS
                    onWebSocketText_heartbeat(sessionId,message,wsSession);
                } else if (message.startsWith("STOP")) {
...
                }
            } catch (Exception e) {
                logger.error("sessionId = {} - onWebSocketText : Exception : ",sessionId, e);
            }
        }

        @OnWebSocketClose
        public void onWebSocketClose(int statusCode, String reason)
        {
            try {
                String sessionId = String.valueOf(getSession().hashCode());
                logger.debug("sessionId = {} - onWebSocketClose", sessionId);
                stopPipeline(sessionId);
            } catch (Exception e) {
                logger.error("onClose : onWebSocketClose : Exception : ", e);
            }
        }

        @OnWebSocketError
        public void onWebSocketError(Throwable cause)
        {
            //super.onWebSocketError(cause);
        }
    }

@PGriffith help me a lot: