# Ignition 8.1 Jetty 12 Upgrade

**URL:** <https://forum.inductiveautomation.com/t/ignition-8-1-jetty-12-upgrade/105482>\
**Category:** Ignition Early Access\
**Created:** [April 23, 2025, 7:51pm UTC](https://forum.inductiveautomation.com/t/ignition-8-1-jetty-12-upgrade/105482 "2025-04-23T19:51:58Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [May 16, 2025, 12:53pm UTC](https://forum.inductiveautomation.com/t/ignition-8-1-jetty-12-upgrade/105482/8 "2025-05-16T12:53:53Z")

</div>

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

```python
        <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:

```python
        <!-- 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:

```python
        <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>

```

```python
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:**

```python
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);
        }
    }

```

@paul-griffith help me a lot:

> [@Module with embedded jetty server for websockets break Ignition GAN connections](https://forum.inductiveautomation.com/t/module-with-embedded-jetty-server-for-websockets-break-ignition-gan-connections/87343/3):
>
> Can you please share an exemple, for adding a websocket ? Sure it will be better if I can avoid to start a whole new jetty server. or perhaps someone at IA ? @paul-griffith ? can share a snipped to add some custom WebSocket without launching another jetty server.

---

_[View the full topic](https://forum.inductiveautomation.com/t/ignition-8-1-jetty-12-upgrade/105482)._
