Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FELIX-6746 Lazy initialization for servlets extending JettyWebSocketServlet #364

Merged
merged 20 commits into from
Jan 22, 2025

Conversation

paulrutter
Copy link
Contributor

@paulrutter paulrutter commented Dec 30, 2024

https://issues.apache.org/jira/projects/FELIX/issues/FELIX-6746

This PR adds lazy initialization for all servlets extending JettyWebSocketServlet.
This resolves the issue where this was needed for earlier.

It also fixes the case where the legacy HTTP service is used in combination with the ServletWrapper.
The ServletWrapper instances are checked against wrapping a JettyWebSocketServlet as well.

Two integration tests added:

  • using JettyWebSocketServlet via the whiteboard pattern.
  • using JettyWebSocketServlet via the HTTP service (by using ServletWrapper). This required passing along the websocket attributes to the servlet context, when registerServlet is called. This was already done for the whiteboard implementation earlier.

The whiteboard example has also been updated to reflect this.

@cziegeler what do you think of this approach?

- Call init lazy in case of servlets that extend JettyWebSocketServlet
- This fixes the IT as well
- Extract test methods
- Remove ServletWrapper support, as it doesn't work properly yet
- Make solution thread-safe
- Fix destroy logic
- Minor test improvements
- Add support for HttpService / ServletWrappers
- Add IT to guard it
- Update whiteboard examples; the FelixJettyWebSocketServlet is no longer needed with these fixes
- Disable HTTP service test, as it fails with "java.lang.IllegalStateException: JettyServerFrameHandlerFactory not found"
- Fix passing along shared websocket attributes to the HttpContext in SharedHttpServiceImpl, when registerServlet is called
- Enable test again
@paulrutter
Copy link
Contributor Author

@enapps-enorman would you able to review this one? Since you handled the websocket functionality earlier as well.

@cziegeler
Copy link
Contributor

The PR looks good to me in general, maybe the special handling could be moved into a subclass (see comment)?

Copy link
Contributor

@cziegeler cziegeler left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm, thanks!

- Remove util class, move method to handler
- Add unit test, add test scope dependency on jetty12
@paulrutter paulrutter merged commit 0b53823 into master Jan 22, 2025
1 check passed
@paulrutter
Copy link
Contributor Author

I made one last change, moved a method and added a unit test.
Merged it now.

@paulrutter paulrutter deleted the maintenance/FELIX-6746-websocketservlet-init-NPE branch January 22, 2025 07:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants