Re-examine the risks of JDK-8264770 breaking third party libraries and applications.
Frederic Thevenet
thevenet.fred at free.fr
Thu Aug 26 07:29:38 UTC 2021
Hi,
A change was introduced In JDK-8264770 that swaps the use of
ChangeListeners to InvalidationListeners within the internal
implementation of BidirectionalBinding [1].
While this change shouldn't normally affect third party applications, it
turned out to break the scrolling facilities used by the widely used
rich text widget RichTextFX [2].
After a short investigation, I believe the root cause lies within
another library by the same author called ReactFX [3], which aims to
bring reactive programming techniques to JavaFX; in order to do so it
seems to expands on but also sometime overrides the built-in bindings
and events mechanisms.
Now, I do believe that this is probably an exceptional case, and it is
also quite possible that it is the result of an unsafe/incorrect use of
internal implementations by the third party library, but with that said
I can't help but feeling a bit nervous about the wider implications of
that change with regard to compatibility of existing apps and OpenJFX
17. At the very least I believe it is important to raise awareness about
potential compatibility issues among the community.
For your information, I reached out to the maintainers of RichTextFX and
proposed a workaround (replacing the use of a bidirectional binding by a
pair of explicit ChangeListeners), which, while not very elegant, seems
to fix the particular issue I discovered [4], but unfortunately it seems
development on the underlying ReactFX is no longer active (last commit
in 2016).
-- Fred
[1] https://bugs.openjdk.java.net/browse/JDK-8264770
[2] https://github.com/FXMisc/RichTextFX
[3] https://github.com/ReactFX/reactfx.github.io
[4] https://github.com/FXMisc/Flowless/issues/97
More information about the openjfx-dev
mailing list