Skip to content

Commit a57d665

Browse files
committed
8564: Update to Eclipse 2025-12
Reviewed-by: aptmac
1 parent bde624e commit a57d665

25 files changed

Lines changed: 1058 additions & 374 deletions

File tree

application/org.openjdk.jmc.feature.flightrecorder/feature.xml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
3-
Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
3+
Copyright (c) 2018, 2026, Oracle and/or its affiliates. All rights reserved.
44
55
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
@@ -157,13 +157,6 @@
157157
version="0.0.0"
158158
unpack="false"/>
159159

160-
<plugin
161-
id="org.eclipse.jetty.ee9.websocket.servlet"
162-
download-size="0"
163-
install-size="0"
164-
version="0.0.0"
165-
unpack="false"/>
166-
167160
<plugin
168161
id="org.eclipse.jetty.websocket.server"
169162
download-size="0"
Lines changed: 1 addition & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
3-
Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
3+
Copyright (c) 2018, 2026, Oracle and/or its affiliates. All rights reserved.
44
55
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
@@ -105,144 +105,26 @@
105105
version="0.0.0"
106106
unpack="false"/>
107107

108-
<plugin
109-
id="org.eclipse.jetty.ee9.webapp"
110-
download-size="0"
111-
install-size="0"
112-
version="0.0.0"
113-
unpack="false"/>
114-
115-
<plugin
116-
id="org.eclipse.jetty.security"
117-
download-size="0"
118-
install-size="0"
119-
version="0.0.0"
120-
unpack="false"/>
121-
122108
<plugin
123109
id="org.eclipse.jetty.server"
124110
download-size="0"
125111
install-size="0"
126112
version="0.0.0"
127113
unpack="false"/>
128114

129-
<plugin
130-
id="org.eclipse.jetty.alpn.client"
131-
download-size="0"
132-
install-size="0"
133-
version="0.0.0"
134-
unpack="false"/>
135-
136-
<plugin
137-
id="org.eclipse.jetty.ee9.websocket.servlet"
138-
download-size="0"
139-
install-size="0"
140-
version="0.0.0"
141-
unpack="false"/>
142-
143115
<plugin
144116
id="org.eclipse.jetty.http"
145117
download-size="0"
146118
install-size="0"
147119
version="0.0.0"
148120
unpack="false"/>
149121

150-
<plugin
151-
id="org.eclipse.jetty.io"
152-
download-size="0"
153-
install-size="0"
154-
version="0.0.0"
155-
unpack="false"/>
156-
157122
<plugin
158123
id="org.eclipse.jetty.util"
159124
download-size="0"
160125
install-size="0"
161126
version="0.0.0"
162127
unpack="false"/>
163128

164-
<plugin
165-
id="org.eclipse.jetty.xml"
166-
download-size="0"
167-
install-size="0"
168-
version="0.0.0"
169-
unpack="false"/>
170-
171-
<plugin
172-
id="org.eclipse.jetty.websocket.core.client"
173-
download-size="0"
174-
install-size="0"
175-
version="0.0.0"
176-
unpack="false"/>
177-
178-
<plugin
179-
id="org.eclipse.jetty.websocket.core.common"
180-
download-size="0"
181-
install-size="0"
182-
version="0.0.0"
183-
unpack="false"/>
184-
185-
<plugin
186-
id="org.eclipse.jetty.websocket.core.server"
187-
download-size="0"
188-
install-size="0"
189-
version="0.0.0"
190-
unpack="false"/>
191-
192-
<plugin
193-
id="org.eclipse.jetty.websocket.common"
194-
download-size="0"
195-
install-size="0"
196-
version="0.0.0"
197-
unpack="false"/>
198-
199-
<plugin
200-
id="org.eclipse.jetty.client"
201-
download-size="0"
202-
install-size="0"
203-
version="0.0.0"
204-
unpack="false"/>
205-
206-
<plugin
207-
id="org.eclipse.jetty.ee9.security"
208-
download-size="0"
209-
install-size="0"
210-
version="0.0.0"
211-
unpack="false"/>
212-
213-
<plugin
214-
id="org.eclipse.jetty.ee9.server"
215-
download-size="0"
216-
install-size="0"
217-
version="0.0.0"
218-
unpack="false"/>
219-
220-
<plugin
221-
id="org.eclipse.jetty.ee9.servlet"
222-
download-size="0"
223-
install-size="0"
224-
version="0.0.0"
225-
unpack="false"/>
226-
227-
<plugin
228-
id="org.eclipse.jetty.ee9.websocket.api"
229-
download-size="0"
230-
install-size="0"
231-
version="0.0.0"
232-
unpack="false"/>
233-
234-
<plugin
235-
id="org.eclipse.jetty.ee9.websocket.common"
236-
download-size="0"
237-
install-size="0"
238-
version="0.0.0"
239-
unpack="false"/>
240-
241-
<plugin
242-
id="org.eclipse.jetty.ee9.websocket.server"
243-
download-size="0"
244-
install-size="0"
245-
version="0.0.0"
246-
unpack="false"/>
247129

248130
</feature>

application/org.openjdk.jmc.flightrecorder.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,7 @@ Require-Bundle: org.openjdk.jmc.rjmx,
1919
org.openjdk.jmc.commands,
2020
org.openjdk.jmc.browser,
2121
org.openjdk.jmc.ui.websocket,
22-
org.hdrhistogram.HdrHistogram,
23-
org.eclipse.jetty.io,
24-
org.eclipse.jetty.websocket.server,
25-
org.eclipse.jetty.util,
26-
org.eclipse.jetty.ee9.websocket.api,
27-
org.eclipse.jetty.ee9.servlet,
28-
org.eclipse.jetty.ee9.websocket.servlet,
29-
org.eclipse.jetty.ee9.server,
30-
org.eclipse.jetty.server,
31-
org.eclipse.jetty.ee9.websocket.server,
32-
org.eclipse.jetty.servlet-api
22+
org.hdrhistogram.HdrHistogram
3323
Bundle-ActivationPolicy: lazy
3424
Bundle-Activator: org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI
3525
Export-Package: org.openjdk.jmc.flightrecorder.ui,

application/org.openjdk.jmc.ui.websocket/META-INF/MANIFEST.MF

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@ Bundle-RequiredExecutionEnvironment: JavaSE-21
99
Require-Bundle: org.eclipse.core.runtime,
1010
org.eclipse.osgi,
1111
org.eclipse.ui,
12-
org.eclipse.jetty.ee9.server,
13-
org.eclipse.jetty.ee9.servlet,
14-
org.eclipse.jetty.ee9.websocket.api,
15-
org.eclipse.jetty.ee9.websocket.server,
12+
org.eclipse.jetty.http,
1613
org.eclipse.jetty.server,
17-
org.eclipse.jetty.servlet-api,
1814
org.eclipse.jetty.util,
15+
org.eclipse.jetty.websocket.api,
16+
org.eclipse.jetty.websocket.server,
1917
org.openjdk.jmc.common,
2018
org.openjdk.jmc.flightrecorder.serializers,
2119
org.openjdk.jmc.flightrecorder

application/org.openjdk.jmc.ui.websocket/src/main/java/org/openjdk/jmc/ui/websocket/MCWebsocketServer.java

Lines changed: 26 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
*/
3434
package org.openjdk.jmc.ui.websocket;
3535

36-
import java.io.IOException;
3736
import java.nio.channels.ClosedChannelException;
3837
import java.time.Duration;
3938
import java.util.HashMap;
@@ -46,12 +45,11 @@
4645
import java.util.logging.Level;
4746
import java.util.stream.Collectors;
4847

49-
import org.eclipse.jetty.ee9.servlet.ServletContextHandler;
50-
import org.eclipse.jetty.ee9.websocket.api.Session;
51-
import org.eclipse.jetty.ee9.websocket.api.WebSocketAdapter;
52-
import org.eclipse.jetty.ee9.websocket.server.config.JettyWebSocketServletContainerInitializer;
5348
import org.eclipse.jetty.server.Server;
5449
import org.eclipse.jetty.server.ServerConnector;
50+
import org.eclipse.jetty.websocket.api.Callback;
51+
import org.eclipse.jetty.websocket.api.Session;
52+
import org.eclipse.jetty.websocket.server.WebSocketUpgradeHandler;
5553
import org.openjdk.jmc.common.item.IItemCollection;
5654
import org.openjdk.jmc.flightrecorder.serializers.dot.DotSerializer;
5755
import org.openjdk.jmc.flightrecorder.serializers.json.FlameGraphJsonSerializer;
@@ -80,35 +78,33 @@ public void startServer(int port) {
8078
connector.setPort(port);
8179
server.addConnector(connector);
8280

83-
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
84-
context.setContextPath("/");
85-
server.setHandler(context);
86-
87-
JettyWebSocketServletContainerInitializer.configure(context, (servletContext, container) -> {
81+
WebSocketUpgradeHandler upgradeHandler = WebSocketUpgradeHandler.from(server, container -> {
8882
container.setMaxBinaryMessageSize(Long.MAX_VALUE);
89-
container.setIdleTimeout(Duration.ofMinutes(Long.MAX_VALUE));
90-
container.addMapping("/events/*", (req, resp) -> {
83+
container.setIdleTimeout(Duration.ofMillis(Long.MAX_VALUE));
84+
container.addMapping("/events/*", (req, resp, callback) -> {
9185
String eventsJson = MCWebsocketServer.toEventsJsonString(currentSelection);
9286
WebsocketConnectionHandler handler = new WebsocketConnectionHandler(eventsJson);
9387
handlers.add(handler);
9488
return handler;
9589
});
96-
container.addMapping("/tree/*", (req, resp) -> {
90+
container.addMapping("/tree/*", (req, resp, callback) -> {
9791
String treeJson = MCWebsocketServer.toTreeModelJsonString(currentSelection);
9892
WebsocketConnectionHandler handler = new WebsocketConnectionHandler(treeJson);
9993
treeHandlers.add(handler);
10094
return handler;
10195
});
102-
container.addMapping("/graph/*", (req, resp) -> {
96+
container.addMapping("/graph/*", (req, resp, callback) -> {
10397
String dot = MCWebsocketServer.toGraphModelDotString(currentSelection);
10498
WebsocketConnectionHandler handler = new WebsocketConnectionHandler(dot);
10599
graphHandlers.add(handler);
106100
return handler;
107101
});
108102
});
103+
server.setHandler(upgradeHandler);
109104

110105
try {
111106
server.start();
107+
WebsocketPlugin.getLogger().log(Level.INFO, "JMC WebSocket server listening on 127.0.0.1:" + port);
112108
} catch (Exception e) {
113109
WebsocketPlugin.getLogger().log(Level.SEVERE, "Failed to start websocket server", e);
114110
}
@@ -174,53 +170,47 @@ public void shutdown() throws Exception {
174170
server.stop();
175171
}
176172

177-
private static class WebsocketConnectionHandler extends WebSocketAdapter {
173+
public static class WebsocketConnectionHandler implements Session.Listener.AutoDemanding {
178174
private String firstMessage;
175+
private Session session;
179176

180177
WebsocketConnectionHandler(String firstMessage) {
181178
this.firstMessage = firstMessage;
182179
}
183180

181+
boolean isConnected() {
182+
return session != null && session.isOpen();
183+
}
184+
184185
public void sendMessage(String message) {
185-
if (getSession() != null && isConnected()) {
186-
WebsocketPlugin.getLogger().log(Level.INFO,
187-
"Sending message to " + getSession().getRemoteAddress().toString());
188-
try {
189-
getSession().getRemote().sendString(message);
190-
} catch (IOException e) {
191-
WebsocketPlugin.getLogger().log(Level.SEVERE, "Failed to send websocket message", e);
192-
}
186+
if (isConnected()) {
187+
WebsocketPlugin.getLogger().log(Level.INFO, "Sending message to " + session.getRemoteSocketAddress());
188+
session.sendText(message, Callback.NOOP);
193189
}
194190
}
195191

196192
@Override
197-
public void onWebSocketConnect(Session sess) {
198-
super.onWebSocketConnect(sess);
199-
WebsocketPlugin.getLogger().log(Level.INFO, "Socket connected to " + sess.getRemoteAddress().toString());
200-
try {
201-
if (firstMessage != null) {
202-
getSession().getRemote().sendString(firstMessage);
203-
firstMessage = null;
204-
}
205-
} catch (IOException e) {
206-
WebsocketPlugin.getLogger().log(Level.SEVERE, "Failed to show outline view", e);
193+
public void onWebSocketOpen(Session sess) {
194+
this.session = sess;
195+
WebsocketPlugin.getLogger().log(Level.INFO, "Socket connected to " + sess.getRemoteSocketAddress());
196+
if (firstMessage != null) {
197+
sess.sendText(firstMessage, Callback.NOOP);
198+
firstMessage = null;
207199
}
208200
}
209201

210202
@Override
211203
public void onWebSocketText(String message) {
212-
super.onWebSocketText(message);
204+
// No-op: the server is a one-way feed; incoming text is ignored.
213205
}
214206

215207
@Override
216208
public void onWebSocketClose(int statusCode, String reason) {
217-
super.onWebSocketClose(statusCode, reason);
218209
WebsocketPlugin.getLogger().log(Level.INFO, "Socket closed: [" + statusCode + "] " + reason);
219210
}
220211

221212
@Override
222213
public void onWebSocketError(Throwable cause) {
223-
super.onWebSocketError(cause);
224214
if (cause instanceof TimeoutException) {
225215
WebsocketPlugin.getLogger().log(Level.INFO, "Websocket timed out");
226216
} else if (cause instanceof ClosedChannelException) {

application/org.openjdk.jmc.ui.websocket/src/main/java/org/openjdk/jmc/ui/websocket/WebsocketPlugin.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ public void start(BundleContext bundleContext) throws Exception {
6868
this.getPreferenceStore().addPropertyChangeListener(preferenceChangeListener);
6969
plugin = this;
7070
startServer(getCryostatPort());
71-
LOGGER.log(Level.INFO, "JMC Websocket Server is live!");
7271
}
7372

7473
public void stop(BundleContext bundleContext) throws Exception {
@@ -88,17 +87,22 @@ public void notifyAll(IItemCollection events) {
8887

8988
private void startServer(int port) {
9089
if (getServerEnabled()) {
90+
LOGGER.log(Level.INFO, "Creating JMC WebSocket server on port " + port);
9191
server = new MCWebsocketServer(port);
92+
} else {
93+
LOGGER.log(Level.INFO, "JMC WebSocket server disabled by preference; not creating");
9294
}
9395
}
9496

9597
private void stopServer() {
9698
if (server != null) {
99+
LOGGER.log(Level.INFO, "Stopping JMC WebSocket server");
97100
try {
98101
server.shutdown();
99102
} catch (Exception e) {
100103
LOGGER.log(Level.WARNING, "Error shutting down the Jetty WebSocket server", e);
101104
}
105+
server = null;
102106
}
103107
}
104108

0 commit comments

Comments
 (0)