Skip to content

Commit d0f4272

Browse files
committed
WIP convert CommunityRestConf to JaxRsEndpoint
This change also required us to convert LightyServerBuilder to use JettyWebServer since it is used in CommunityRestConf to initialize JaxRsEndpoint. Signed-off-by: tobias.pobocik <[email protected]>
1 parent a17c6b4 commit d0f4272

File tree

19 files changed

+359
-397
lines changed

19 files changed

+359
-397
lines changed

lighty-applications/lighty-rnc-app-aggregator/lighty-rnc-module/src/main/java/io/lighty/applications/rnc/module/RncLightyModule.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import io.lighty.openapi.OpenApiLighty;
3030
import io.lighty.server.Http2LightyServerBuilder;
3131
import io.lighty.server.HttpsLightyServerBuilder;
32-
import io.lighty.server.LightyServerBuilder;
32+
import io.lighty.server.LightyJettyServerProvider;
3333
import io.lighty.server.config.LightyServerConfig;
3434
import java.net.InetSocketAddress;
3535
import java.security.Security;
@@ -52,7 +52,7 @@ public class RncLightyModule {
5252
private CommunityRestConf lightyRestconf;
5353
private NetconfSBPlugin lightyNetconf;
5454
private AAALighty aaaLighty;
55-
private LightyServerBuilder jettyServerBuilder;
55+
private LightyJettyServerProvider jettyServerBuilder;
5656
private OpenApiLighty openApi;
5757

5858
public RncLightyModule(final RncLightyModuleConfiguration rncModuleConfig) {
@@ -127,7 +127,7 @@ private CommunityRestConf initRestconf(final RestConfConfiguration rcConfig, fin
127127
} else if (serverConfig.isUseHttps()) {
128128
jettyServerBuilder = new HttpsLightyServerBuilder(inetSocketAddress, serverConfig.getSecurityConfig());
129129
} else {
130-
jettyServerBuilder = new LightyServerBuilder(inetSocketAddress);
130+
jettyServerBuilder = new LightyJettyServerProvider(inetSocketAddress);
131131
}
132132

133133
return CommunityRestConfBuilder.from(restConfConfiguration)
@@ -143,7 +143,7 @@ private AAALighty initAAA(final AAAConfiguration config, final LightyServices se
143143
}
144144

145145
private OpenApiLighty initOpenApiLighty(final RestConfConfiguration config,
146-
final LightyServerBuilder serverBuilder, final LightyServices services) {
146+
final LightyJettyServerProvider serverBuilder, final LightyServices services) {
147147
return new OpenApiLighty(config, serverBuilder, services);
148148
}
149149

lighty-examples/lighty-community-aaa-restconf-app/src/main/java/io/lighty/kit/examples/community/aaa/restconf/Main.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import io.lighty.modules.northbound.restconf.community.impl.CommunityRestConfBuilder;
2525
import io.lighty.modules.northbound.restconf.community.impl.config.RestConfConfiguration;
2626
import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils;
27-
import io.lighty.server.LightyServerBuilder;
27+
import io.lighty.server.LightyJettyServerProvider;
2828
import java.net.InetSocketAddress;
2929
import java.nio.file.Files;
3030
import java.nio.file.Path;
@@ -108,7 +108,7 @@ private void startLighty(final ControllerConfiguration controllerConfiguration,
108108
}
109109

110110
// 2. Initialize and start Restconf server
111-
final LightyServerBuilder jettyServerBuilder = new LightyServerBuilder(new InetSocketAddress(
111+
final LightyJettyServerProvider jettyServerBuilder = new LightyJettyServerProvider(new InetSocketAddress(
112112
restconfConfiguration.getInetAddress(), restconfConfiguration.getHttpPort()));
113113
this.restconf = CommunityRestConfBuilder
114114
.from(RestConfConfigUtils.getRestConfConfiguration(restconfConfiguration,

lighty-examples/lighty-community-restconf-actions-app/src/main/java/io/lighty/examples/controllers/actions/Main.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import io.lighty.modules.southbound.netconf.impl.config.NetconfConfiguration;
3030
import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils;
3131
import io.lighty.openapi.OpenApiLighty;
32-
import io.lighty.server.LightyServerBuilder;
32+
import io.lighty.server.LightyJettyServerProvider;
3333
import java.io.IOException;
3434
import java.net.InetSocketAddress;
3535
import java.nio.file.Files;
@@ -150,7 +150,7 @@ private void startLighty(final ControllerConfiguration controllerConfiguration,
150150
}
151151

152152
//2. build RestConf server
153-
LightyServerBuilder jettyServerBuilder = new LightyServerBuilder(new InetSocketAddress(
153+
LightyJettyServerProvider jettyServerBuilder = new LightyJettyServerProvider(new InetSocketAddress(
154154
restconfConfiguration.getInetAddress(), restconfConfiguration.getHttpPort()));
155155
this.restconf = CommunityRestConfBuilder
156156
.from(RestConfConfigUtils.getRestConfConfiguration(restconfConfiguration,

lighty-examples/lighty-community-restconf-netconf-app/src/main/java/io/lighty/examples/controllers/restconfapp/Main.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import io.lighty.modules.southbound.netconf.impl.config.NetconfConfiguration;
2828
import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils;
2929
import io.lighty.openapi.OpenApiLighty;
30-
import io.lighty.server.LightyServerBuilder;
30+
import io.lighty.server.LightyJettyServerProvider;
3131
import java.io.IOException;
3232
import java.net.InetSocketAddress;
3333
import java.nio.file.Files;
@@ -143,7 +143,7 @@ private void startLighty(final ControllerConfiguration controllerConfiguration,
143143
}
144144

145145
//2. build RestConf server
146-
LightyServerBuilder jettyServerBuilder = new LightyServerBuilder(new InetSocketAddress(
146+
LightyJettyServerProvider jettyServerBuilder = new LightyJettyServerProvider(new InetSocketAddress(
147147
restconfConfiguration.getInetAddress(), restconfConfiguration.getHttpPort()));
148148
this.restconf = CommunityRestConfBuilder
149149
.from(RestConfConfigUtils.getRestConfConfiguration(restconfConfiguration,

lighty-modules/lighty-aaa-aggregator/lighty-aaa/src/main/java/io/lighty/aaa/AAALighty.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import io.lighty.aaa.config.AAAConfiguration;
1111
import io.lighty.core.controller.api.AbstractLightyModule;
12-
import io.lighty.server.LightyServerBuilder;
12+
import io.lighty.server.LightyJettyServerProvider;
1313
import java.util.concurrent.CompletableFuture;
1414
import java.util.concurrent.CountDownLatch;
1515
import org.opendaylight.aaa.api.CredentialAuth;
@@ -19,14 +19,14 @@
1919
public final class AAALighty extends AbstractLightyModule {
2020

2121
private final AAAShiroProviderHandler aaaShiroProviderHandler;
22-
private final LightyServerBuilder server;
22+
private final LightyJettyServerProvider server;
2323
private final CredentialAuth<PasswordCredentials> credentialAuth;
2424
private final DataBroker dataBroker;
2525

2626
private final AAAConfiguration aaaConfiguration;
2727

2828
public AAALighty(final DataBroker dataBroker, final CredentialAuth<PasswordCredentials> credentialAuth,
29-
final LightyServerBuilder server, final AAAConfiguration config) {
29+
final LightyJettyServerProvider server, final AAAConfiguration config) {
3030
this.dataBroker = dataBroker;
3131
this.aaaConfiguration = config;
3232
this.credentialAuth = credentialAuth;

lighty-modules/lighty-aaa-aggregator/lighty-aaa/src/main/java/io/lighty/aaa/AAALightyShiroProvider.java

+35-30
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,15 @@
88
package io.lighty.aaa;
99

1010
import io.lighty.aaa.config.AAAConfiguration;
11-
import io.lighty.server.LightyServerBuilder;
11+
import io.lighty.server.LightyJettyServerProvider;
1212
import java.util.ArrayList;
1313
import java.util.HashMap;
1414
import java.util.List;
1515
import java.util.Map;
1616
import java.util.concurrent.CompletableFuture;
1717
import org.eclipse.jetty.server.Handler;
18-
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
19-
import org.eclipse.jetty.servlet.FilterHolder;
20-
import org.eclipse.jetty.servlet.ServletContextHandler;
21-
import org.eclipse.jetty.servlet.ServletHolder;
2218
import org.eclipse.jetty.servlets.CrossOriginFilter;
2319
import org.glassfish.jersey.internal.guava.Preconditions;
24-
import org.glassfish.jersey.server.ResourceConfig;
25-
import org.glassfish.jersey.servlet.ServletContainer;
2620
import org.opendaylight.aaa.api.AuthenticationService;
2721
import org.opendaylight.aaa.api.ClaimCache;
2822
import org.opendaylight.aaa.api.CredentialAuth;
@@ -47,6 +41,9 @@
4741
import org.opendaylight.aaa.tokenauthrealm.auth.AuthenticationManager;
4842
import org.opendaylight.aaa.tokenauthrealm.auth.HttpBasicAuth;
4943
import org.opendaylight.aaa.tokenauthrealm.auth.TokenAuthenticators;
44+
import org.opendaylight.aaa.web.FilterDetails;
45+
import org.opendaylight.aaa.web.ServletDetails;
46+
import org.opendaylight.aaa.web.WebContext;
5047
import org.opendaylight.aaa.web.servlet.jersey2.JerseyServletSupport;
5148
import org.opendaylight.mdsal.binding.api.DataBroker;
5249
import org.opendaylight.yang.gen.v1.urn.opendaylight.aaa.app.config.rev170619.DatastoreConfig;
@@ -79,7 +76,7 @@ public final class AAALightyShiroProvider {
7976
private AAALightyShiroProvider(final DataBroker dataBroker,
8077
final AAAConfiguration aaaConfiguration,
8178
final CredentialAuth<PasswordCredentials> credentialAuth,
82-
final LightyServerBuilder server) {
79+
final LightyJettyServerProvider server) {
8380
this.dataBroker = dataBroker;
8481
this.certificateManager = aaaConfiguration.getCertificateManager();
8582
this.credentialAuth = credentialAuth;
@@ -127,18 +124,7 @@ private AAALightyShiroProvider(final DataBroker dataBroker,
127124
initAAAonServer(server);
128125
}
129126

130-
private void initAAAonServer(final LightyServerBuilder server) {
131-
final ContextHandlerCollection contexts = new ContextHandlerCollection();
132-
final ServletContextHandler mainHandler = new ServletContextHandler(contexts, "/auth", true, false);
133-
final IdmLightApplication idmLightApplication = new IdmLightApplication(iidmStore, claimCache);
134-
final ServletHolder idmLightServlet = new ServletHolder(new ServletContainer(ResourceConfig.forApplication(
135-
idmLightApplication)));
136-
idmLightServlet.setInitParameter("jersey.config.server.provider.packages",
137-
"org.opendaylight.aaa.impl.provider");
138-
mainHandler.addServlet(idmLightServlet, "/*");
139-
server.addContextHandler(contexts);
140-
this.handlers.add(contexts);
141-
this.handlers.add(mainHandler);
127+
private void initAAAonServer(final LightyJettyServerProvider server) {
142128
this.aaaWebEnvironment = new AAAWebEnvironment(shiroConfiguration,
143129
dataBroker,
144130
certificateManager,
@@ -151,22 +137,41 @@ private void initAAAonServer(final LightyServerBuilder server) {
151137
final CustomFilterAdapterConfigurationImpl customFilterAdapterConfig =
152138
new CustomFilterAdapterConfigurationImpl();
153139
customFilterAdapterConfig.update(properties);
154-
final FilterHolder customFilterAdapter = new FilterHolder(new CustomFilterAdapter(customFilterAdapterConfig));
155-
server.addCommonFilter(customFilterAdapter, "/*");
156140

157-
final FilterHolder shiroFilter = new FilterHolder(new AAAShiroFilter(aaaWebEnvironment));
158-
server.addCommonFilter(shiroFilter, "/*");
141+
final var webContextBuilder = WebContext.builder()
142+
.name("RealmManagement")
143+
.contextPath("/auth")
144+
.supportsSessions(true)
159145

160-
final FilterHolder crossOriginFilter = new FilterHolder(new CrossOriginFilter());
161-
crossOriginFilter.setInitParameter("allowedMethods", "GET,POST,OPTIONS,DELETE,PUT,HEAD");
162-
crossOriginFilter.setInitParameter("allowedHeaders",
163-
"origin, content-type, accept, authorization, Authorization");
164-
server.addCommonFilter(crossOriginFilter, "/*");
146+
.addServlet(ServletDetails.builder()
147+
.servlet(new JerseyServletSupport().createHttpServletBuilder(
148+
new IdmLightApplication(iidmStore, claimCache)).build())
149+
.addUrlPattern("/*")
150+
.build())
151+
152+
.addFilter(FilterDetails.builder()
153+
.filter(new CustomFilterAdapter(customFilterAdapterConfig))
154+
.addUrlPattern("/*")
155+
.build())
156+
157+
.addFilter(FilterDetails.builder()
158+
.filter(new AAAShiroFilter(aaaWebEnvironment))
159+
.addUrlPattern("/*")
160+
.build())
161+
162+
.addFilter(FilterDetails.builder()
163+
.filter(new CrossOriginFilter())
164+
.addUrlPattern("/*").putInitParam("allowedMethods", "GET,POST,OPTIONS,DELETE,PUT,HEAD").putInitParam(
165+
"allowedHeaders", "origin, content-type, accept, authorization, Authorization")
166+
.build());
167+
168+
169+
server.addContextHandler(webContextBuilder.build());
165170
}
166171

167172
public static CompletableFuture<AAALightyShiroProvider> newInstance(final DataBroker dataBroker,
168173
final AAAConfiguration aaaConfig, final CredentialAuth<PasswordCredentials> credentialAuth,
169-
final LightyServerBuilder server) {
174+
final LightyJettyServerProvider server) {
170175
final CompletableFuture<AAALightyShiroProvider> completableFuture = new CompletableFuture<>();
171176
INSTANCE = new AAALightyShiroProvider(dataBroker, aaaConfig, credentialAuth, server);
172177
completableFuture.complete(INSTANCE);

lighty-modules/lighty-aaa-aggregator/lighty-aaa/src/main/java/io/lighty/aaa/LocalHttpServer.java

+17-16
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,37 @@
77
*/
88
package io.lighty.aaa;
99

10-
import io.lighty.server.LightyServerBuilder;
10+
import io.lighty.server.LightyJettyServerProvider;
1111
import java.util.Dictionary;
1212
import java.util.HashMap;
1313
import java.util.Map;
1414
import javax.servlet.Servlet;
15-
import org.eclipse.jetty.server.Handler;
16-
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
17-
import org.eclipse.jetty.servlet.ServletContextHandler;
18-
import org.eclipse.jetty.servlet.ServletHolder;
15+
import org.opendaylight.aaa.web.ServletDetails;
16+
import org.opendaylight.aaa.web.WebContext;
1917

2018
final class LocalHttpServer {
21-
private final LightyServerBuilder server;
22-
private final Map<String, Handler> handlers;
19+
private final LightyJettyServerProvider server;
20+
private final Map<String, WebContext> handlers;
2321

24-
LocalHttpServer(final LightyServerBuilder server) {
22+
LocalHttpServer(final LightyJettyServerProvider server) {
2523
this.server = server;
2624
this.handlers = new HashMap<>();
2725
}
2826

2927
@SuppressWarnings("rawtypes")
30-
public void registerServlet(final String alias, final Servlet servlet, final Dictionary initparams) {
31-
final ServletHolder servletHolder = new ServletHolder(servlet);
32-
final ContextHandlerCollection contexts = new ContextHandlerCollection();
33-
final ServletContextHandler mainHandler = new ServletContextHandler(contexts, alias, true, false);
34-
mainHandler.addServlet(servletHolder, "/*");
35-
this.server.addContextHandler(contexts);
36-
this.handlers.put(alias, contexts);
28+
public void registerServlet(final String alias, final Servlet servlet, final Dictionary<String, String> initParam) {
29+
WebContext webContext = WebContext.builder()
30+
.name("name")
31+
.contextPath(alias)
32+
.supportsSessions(true)
33+
.putContextParam("exampleKey", "exampleValue")
34+
.addServlet(ServletDetails.builder().servlet(servlet).addUrlPattern("/*").build())
35+
.build();
36+
37+
this.server.addContextHandler(webContext);
38+
this.handlers.put(alias, webContext);
3739
}
3840

3941
public void unregister(final String alias) {
40-
this.handlers.get(alias).destroy();
4142
}
4243
}

lighty-modules/lighty-aaa-aggregator/lighty-aaa/src/test/java/io/lighty/aaa/LocalHttpServerTest.java

+32-9
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@
77
*/
88
package io.lighty.aaa;
99

10-
import io.lighty.server.LightyServerBuilder;
10+
import io.lighty.server.LightyJettyServerProvider;
11+
import java.lang.reflect.Field;
1112
import java.net.InetAddress;
1213
import java.net.InetSocketAddress;
14+
import java.security.AccessController;
15+
import java.security.PrivilegedAction;
1316
import javax.servlet.Servlet;
1417
import org.eclipse.jetty.server.Server;
1518
import org.mockito.Mock;
1619
import org.mockito.MockitoAnnotations;
20+
import org.opendaylight.aaa.web.jetty.JettyWebServer;
1721
import org.testng.Assert;
1822
import org.testng.annotations.BeforeClass;
1923
import org.testng.annotations.Test;
2024

2125
public class LocalHttpServerTest {
2226

23-
private static final String TEST_SERVLET = "TestServlet";
27+
private static final String TEST_SERVLET = "/TestServlet";
2428

2529
@Mock
2630
Servlet servlet;
@@ -33,17 +37,36 @@ public void init() {
3337
@Test
3438
public void initLocalHttpServerTest() throws Exception {
3539
InetSocketAddress socketAddress = new InetSocketAddress(InetAddress.getLocalHost(), 8888);
36-
LightyServerBuilder serverBuilder = new LightyServerBuilder(socketAddress);
37-
Server server = serverBuilder.build();
40+
LightyJettyServerProvider serverBuilder = new LightyJettyServerProvider(socketAddress);
41+
JettyWebServer server = new LightyJettyServerProvider(socketAddress).getServer();
42+
Server jettyServer = null;
43+
try {
44+
// Use AccessController.doPrivileged to allow access to the private field
45+
Field serverField = AccessController.doPrivileged((PrivilegedAction<Field>) () -> {
46+
try {
47+
Field field = JettyWebServer.class.getDeclaredField("server");
48+
field.setAccessible(true);
49+
return field;
50+
} catch (NoSuchFieldException e) {
51+
throw new RuntimeException("Field not found", e);
52+
}
53+
});
54+
55+
jettyServer = (Server) serverField.get(server);
56+
57+
// Only set the handler if no handler is already set by JaxRsEndpoint
58+
59+
} catch (IllegalAccessException e) {
60+
throw new RuntimeException("Failed to set handler on JettyWebServer", e);
61+
}
3862
LocalHttpServer localHttpServer = new LocalHttpServer(serverBuilder);
3963
localHttpServer.registerServlet(TEST_SERVLET, servlet, null);
40-
localHttpServer.unregister(TEST_SERVLET);
4164

4265
server.start();
43-
Assert.assertTrue(server.isStarted());
44-
Assert.assertTrue(server.isRunning());
66+
Assert.assertTrue(jettyServer.isStarted());
67+
Assert.assertTrue(jettyServer.isRunning());
4568
server.stop();
46-
Assert.assertFalse(server.isStarted());
47-
Assert.assertFalse(server.isRunning());
69+
Assert.assertFalse(jettyServer.isStarted());
70+
Assert.assertFalse(jettyServer.isRunning());
4871
}
4972
}

lighty-modules/lighty-aaa-aggregator/lighty-aaa/src/test/java/io/lighty/aaa/ShiroInitializationTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import io.lighty.aaa.config.AAAConfiguration;
1616
import io.lighty.aaa.config.CertificateManagerConfig;
1717
import io.lighty.aaa.util.AAAConfigUtils;
18-
import io.lighty.server.LightyServerBuilder;
18+
import io.lighty.server.LightyJettyServerProvider;
1919
import java.net.InetSocketAddress;
2020
import java.util.Optional;
2121
import java.util.concurrent.TimeUnit;
@@ -44,7 +44,7 @@ public class ShiroInitializationTest {
4444
private static final AAAConfiguration AAA_CONFIGURATION = AAAConfigUtils.createDefaultAAAConfiguration();
4545
private static final String BUNDLE_NAME = "opendaylight";
4646
@Mock
47-
private LightyServerBuilder server;
47+
private LightyJettyServerProvider server;
4848
@Mock
4949
private DataBroker bindingDataBroker;
5050
@Mock
@@ -108,7 +108,7 @@ public void testSuccessfulInitialization() throws InterruptedException {
108108
CertificateManagerConfig.getDefault(bindingDataBroker, rpcProviderService));
109109

110110
// Create a LightyServerBuilder object
111-
final LightyServerBuilder serverBuilder = new LightyServerBuilder(
111+
final LightyJettyServerProvider serverBuilder = new LightyJettyServerProvider(
112112
new InetSocketAddress("localhost/127.0.0.1", 8182));
113113

114114
// Create an AAALighty object

0 commit comments

Comments
 (0)