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: