After another full week of searching exhaustively for a real-time protocol alternative, I have now capitulated to rewrite our entire app from using SSE to use polling.
While the Apache Felix platform Jira runs on supports pretty much every technology there is, the Plugin System (in particular the
atlassian-plugin-plugin) that wraps third-party plugins when running in Jira sets the following restrictions:
- Asynchronous Servlets are not supported: they should be possible to configure (there is a mechanism for this in
atlassian-plugin-plugin), but this configuration simply does not work. Right now
atlassian-plugin-plugin intercepts all Servlet calls an throws an exception if
async functionality is used.
- Jersey 2 is not supported. Atlassian adding support for this at one point, but gave up. Only Jersey 1.19 is available. While Jersey 2 supports SSE, Jersey 1 does not.
- WebSockets is not supported. While Tomcat 8.x supports WebSockets (and Jira runs on Tomcat 8), the default
server.xml - file running in Jira 8 does not contain the required configuration for Tomcat 8’s WebSocket-functionality to work.
- Spring MVC/REST cannot be configured (or if it can, I didn’t manage to do it properly). Spring is the foundation for pretty much every SSE alternative I have found so far (Spring WebFlux, Reactor, Reactive Streams, SseEmitter etc.)
Each of the restrictions above can be lifted by manually manipulating the
server.xml files found inside the Jira installation folder. If you are developing plugins for in-house use, this might be the solution for you.
As of 07.08.2020 there does not seem to be any available options for real-time communication when developing for Jira Server 8.5 (LTS). If anyone find something that works, please share!
Environment: Jira 8.5, Java 11