Rework jetty server implementation#2301
Conversation
There was a problem hiding this comment.
Summary of Changes
Hello @Tobianas, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
I've refactored the Jetty server implementation to improve modularity and eliminate redundant code for HTTP, HTTPS, and HTTP/2 server provisioning. This change centralizes server creation logic by introducing an abstract base class and dedicated concrete implementations for each protocol. The LightyJettyServerProvider now intelligently selects and instantiates the appropriate server type based on configuration, simplifying the overall server setup and management within the application.
Highlights
- Abstracting Jetty Web Server: I've introduced an
AbstractLightyWebServerclass, which serves as a common base for all Jetty web server implementations. This abstracts away common server setup while allowing for specific protocol configurations. - Dedicated Web Server Implementations: I've created three new concrete implementations:
HttpLightyJettyWebServer,HttpsLightyJettyWebServer, andHttp2LightyJettyWebServer. Each of these classes now encapsulates the specific Jetty configuration required for its respective protocol (HTTP, HTTPS, or HTTP/2). - Consolidated Server Provisioning: The
LightyJettyServerProviderhas been refactored to centralize the server provisioning logic. It now takes aLightyServerConfigand dynamically instantiates the correctAbstractLightyWebServersubclass (HTTP, HTTPS, or HTTP/2) based on the configuration, eliminating the need for separate provider classes. - Removal of Redundant Providers: The previously separate
Http2LightyServerProviderandHttpsLightyServerProviderclasses have been removed. Their functionality is now integrated directly into theLightyJettyServerProviderand the new dedicated web server classes, streamlining the codebase and reducing redundancy.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Code Review
This pull request provides a solid refactoring of the Jetty server implementation. The introduction of an abstract base class AbstractLightyWebServer with concrete implementations for HTTP, HTTPS, and HTTP/2 simplifies the server provider logic and eliminates the previous inefficient approach of creating and then replacing connectors. This greatly improves the design, making it more modular and maintainable. My review includes a suggestion to further reduce code duplication within the new server implementation classes, which will enhance maintainability.
...ty-modules/lighty-jetty-server/src/main/java/io/lighty/server/Http2LightyJettyWebServer.java
Outdated
Show resolved
Hide resolved
937b03f to
e5d98bb
Compare
lighty-modules/lighty-jetty-server/src/main/java/io/lighty/server/AbstractLightyWebServer.java
Outdated
Show resolved
Hide resolved
lighty-modules/lighty-jetty-server/src/main/java/io/lighty/server/AbstractLightyWebServer.java
Show resolved
Hide resolved
lighty-modules/lighty-jetty-server/src/main/java/io/lighty/server/AbstractLightyWebServer.java
Outdated
Show resolved
Hide resolved
lighty-modules/lighty-jetty-server/src/main/java/io/lighty/server/AbstractLightyWebServer.java
Outdated
Show resolved
Hide resolved
...ty-modules/lighty-jetty-server/src/main/java/io/lighty/server/LightyJettyServerProvider.java
Outdated
Show resolved
Hide resolved
...ty-modules/lighty-jetty-server/src/main/java/io/lighty/server/LightyJettyServerProvider.java
Outdated
Show resolved
Hide resolved
...ty/src/main/java/io/lighty/modules/northbound/restconf/community/impl/CommunityRestConf.java
Show resolved
Hide resolved
e089588 to
26c576d
Compare
Having a separate provider for https and http2 jetty server made no sense, also creating and then removing connector for https and http2 connection made even less sense. This patch changes the logic how we create and provide the jetty server throughout the application by having abstract server where everything common is located and then having separate classes which provide https/http2 connection. JIRA: LIGHTY-329 Signed-off-by: tobias.pobocik <[email protected]>
26c576d to
d821214
Compare
Having a separate provider for https and http2 jetty server made no sense, also creating and then removing connector for https and http2 connection made even less sense.
This patch changes the logic how we create and provide the jetty server throughout the application by having abstract server where everything common is located and then having separate classes which provide https/http2 connection.
JIRA: LIGHTY-329