Skip to content

Commit def900d

Browse files
committed
完善 solon-server-jetty-jakarta 适
1 parent b93ff68 commit def900d

File tree

8 files changed

+83
-35
lines changed

8 files changed

+83
-35
lines changed

solon-jakarta-parent/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
<cxf.version>4.1.2</cxf.version>
2929

30-
<jetty.version>12.1.0</jetty.version>
30+
<jetty.jakarta.version>12.1.1</jetty.jakarta.version>
3131
</properties>
3232

3333
<dependencyManagement>

solon-jakarta-projects/solon-server/solon-server-jetty-add-jsp-jakarta/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@
2121
<dependency>
2222
<groupId>org.eclipse.jetty.ee11</groupId>
2323
<artifactId>jetty-ee11-webapp</artifactId>
24-
<version>${jetty.version}</version>
24+
<version>${jetty.jakarta.version}</version>
2525
</dependency>
2626

2727
<dependency>
2828
<groupId>org.eclipse.jetty.ee11</groupId>
2929
<artifactId>jetty-ee11-apache-jsp</artifactId>
30-
<version>${jetty.version}</version>
30+
<version>${jetty.jakarta.version}</version>
3131
</dependency>
3232

3333
<dependency>
3434
<groupId>org.eclipse.jetty.ee11</groupId>
3535
<artifactId>jetty-ee11-glassfish-jstl</artifactId>
36-
<version>${jetty.version}</version>
36+
<version>${jetty.jakarta.version}</version>
3737
</dependency>
3838
</dependencies>
3939

solon-jakarta-projects/solon-server/solon-server-jetty-add-websocket-jakarta/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<dependency>
2222
<groupId>org.eclipse.jetty.websocket</groupId>
2323
<artifactId>jetty-websocket-jetty-server</artifactId>
24-
<version>${jetty.version}</version>
24+
<version>${jetty.jakarta.version}</version>
2525
</dependency>
2626
</dependencies>
2727

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,42 +43,42 @@
4343
<dependency>
4444
<groupId>org.eclipse.jetty</groupId>
4545
<artifactId>jetty-server</artifactId>
46-
<version>${jetty.version}</version>
46+
<version>${jetty.jakarta.version}</version>
4747
</dependency>
4848

4949
<dependency>
5050
<groupId>org.eclipse.jetty.ee11</groupId>
5151
<artifactId>jetty-ee11-servlet</artifactId>
52-
<version>${jetty.version}</version>
52+
<version>${jetty.jakarta.version}</version>
5353
</dependency>
5454

5555
<!-- jetty web socket -->
5656
<dependency>
5757
<groupId>org.eclipse.jetty.websocket</groupId>
5858
<artifactId>jetty-websocket-jetty-server</artifactId>
59-
<version>${jetty.version}</version>
59+
<version>${jetty.jakarta.version}</version>
6060
<scope>provided</scope>
6161
</dependency>
6262

6363
<!-- jetty jsp -->
6464
<dependency>
6565
<groupId>org.eclipse.jetty.ee11</groupId>
6666
<artifactId>jetty-ee11-webapp</artifactId>
67-
<version>${jetty.version}</version>
67+
<version>${jetty.jakarta.version}</version>
6868
<scope>provided</scope>
6969
</dependency>
7070

7171
<dependency>
7272
<groupId>org.eclipse.jetty.ee11</groupId>
7373
<artifactId>jetty-ee11-apache-jsp</artifactId>
74-
<version>${jetty.version}</version>
74+
<version>${jetty.jakarta.version}</version>
7575
<scope>provided</scope>
7676
</dependency>
7777

7878
<dependency>
7979
<groupId>org.eclipse.jetty.ee11</groupId>
8080
<artifactId>jetty-ee11-glassfish-jstl</artifactId>
81-
<version>${jetty.version}</version>
81+
<version>${jetty.jakarta.version}</version>
8282
<scope>provided</scope>
8383
</dependency>
8484

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/src/main/java/org/noear/solon/boot/jetty/JettyServer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.eclipse.jetty.websocket.api.UpgradeRequest;
2323
import org.eclipse.jetty.websocket.server.WebSocketUpgradeHandler;
2424
import org.noear.solon.boot.ServerLifecycle;
25-
import org.noear.solon.boot.jetty.websocket.WebSocketCreatorImpl;
25+
import org.noear.solon.boot.jetty.websocket.WebSocketConfigurator;
2626
import org.noear.solon.core.event.EventBus;
2727
import org.noear.solon.core.util.ClassUtil;
2828

@@ -74,15 +74,15 @@ protected void setup(String host, int port) throws IOException {
7474
}
7575

7676
ServletContextHandler contextHandler = buildHandler();
77-
real.setHandler(contextHandler);
77+
7878

7979
if (enableWebSocket && ClassUtil.hasClass(() -> UpgradeRequest.class)) {
80-
//real.setHandler(new HandlerHub(buildHandler()));
81-
WebSocketUpgradeHandler wsHandler = WebSocketUpgradeHandler.from(real, contextHandler);
82-
wsHandler.getServerWebSocketContainer().addMapping("/*", new WebSocketCreatorImpl());
83-
//real.setHandler(wsHandler);
80+
WebSocketUpgradeHandler wsHandler = WebSocketUpgradeHandler.from(real, contextHandler, new WebSocketConfigurator());
81+
contextHandler.setHandler(wsHandler);
8482
}
8583

84+
real.setHandler(contextHandler);
85+
8686
//1.1:分发事件(充许外部扩展)
8787
EventBus.publish(real);
8888
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright 2017-2024 noear.org and authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.noear.solon.boot.jetty.websocket;
17+
18+
import org.eclipse.jetty.websocket.server.ServerWebSocketContainer;
19+
20+
import java.util.function.Consumer;
21+
22+
/**
23+
* WebSocket 配置器
24+
*
25+
* @author noear
26+
* @since 3.5
27+
*/
28+
public class WebSocketConfigurator implements Consumer<ServerWebSocketContainer> {
29+
30+
@Override
31+
public void accept(ServerWebSocketContainer serverWebSocketContainer) {
32+
serverWebSocketContainer.addMapping("/*", new WebSocketCreatorImpl());
33+
}
34+
}

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/src/main/java/org/noear/solon/boot/jetty/websocket/WebSocketCreatorImpl.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package org.noear.solon.boot.jetty.websocket;
1717

18-
//import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
19-
//import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
20-
//import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
2118
import org.eclipse.jetty.util.Callback;
2219
import org.eclipse.jetty.websocket.server.ServerUpgradeRequest;
2320
import org.eclipse.jetty.websocket.server.ServerUpgradeResponse;
@@ -36,18 +33,23 @@
3633
public class WebSocketCreatorImpl implements WebSocketCreator {
3734
private final WebSocketRouter webSocketRouter = WebSocketRouter.getInstance();
3835

39-
4036
@Override
4137
public Object createWebSocket(ServerUpgradeRequest serverUpgradeRequest, ServerUpgradeResponse serverUpgradeResponse, Callback callback) throws Exception {
4238
//添加子协议支持
43-
String path = DecodeUtils.rinseUri(serverUpgradeRequest.getHttpURI().getPath());
44-
SubProtocolCapable subProtocolCapable = webSocketRouter.getSubProtocol(path);
45-
if (subProtocolCapable != null) {
46-
String protocols = subProtocolCapable.getSubProtocols(serverUpgradeRequest.getSubProtocols());
39+
try {
40+
String path = DecodeUtils.rinseUri(serverUpgradeRequest.getHttpURI().getPath());
41+
SubProtocolCapable subProtocolCapable = webSocketRouter.getSubProtocol(path);
42+
if (subProtocolCapable != null) {
43+
String protocols = subProtocolCapable.getSubProtocols(serverUpgradeRequest.getSubProtocols());
4744

48-
if (Utils.isNotEmpty(protocols)) {
49-
serverUpgradeResponse.setAcceptedSubProtocol(protocols);
45+
if (Utils.isNotEmpty(protocols)) {
46+
serverUpgradeResponse.setAcceptedSubProtocol(protocols);
47+
}
5048
}
49+
50+
callback.succeeded();
51+
} catch (Exception ex) {
52+
callback.failed(ex);
5153
}
5254

5355
return new WebSocketListenerImpl();

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/src/main/java/org/noear/solon/boot/jetty/websocket/WebSocketListenerImpl.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@
2424

2525
import java.nio.ByteBuffer;
2626

27-
public class WebSocketListenerImpl implements Session.Listener {
27+
/**
28+
* WebSokcet 监听器
29+
*
30+
* @author noear
31+
* @since 3.5
32+
* */
33+
public class WebSocketListenerImpl implements Session.Listener.AutoDemanding {
2834
static final Logger log = LoggerFactory.getLogger(WebSocketListenerImpl.class);
2935

3036
private WebSocketImpl webSocket;
@@ -64,14 +70,20 @@ public void onWebSocketText(String text) {
6470
}
6571

6672
@Override
67-
public void onWebSocketClose(int statusCode, String reason) {
68-
if (webSocket.isClosed()) {
69-
return;
70-
} else {
71-
RunUtil.runAndTry(webSocket::close);
72-
}
73+
public void onWebSocketClose(int statusCode, String reason, Callback callback) {
74+
try {
75+
if (webSocket.isClosed()) {
76+
return;
77+
} else {
78+
RunUtil.runAndTry(webSocket::close);
79+
}
7380

74-
webSocketRouter.getListener().onClose(webSocket);
81+
webSocketRouter.getListener().onClose(webSocket);
82+
callback.succeed();
83+
} catch (Throwable e) {
84+
log.warn(e.getMessage(), e);
85+
callback.fail(e);
86+
}
7587
}
7688

7789
@Override

0 commit comments

Comments
 (0)