Forces of Change: JDK 8, JavaFX, and the future of ICEpdf
When ICEpdf 1.0 was release in 2005 it supported JDK 1.3 and was as single jar weighing in at a mere 260 KB. At the time, we were wrestling with a move to JDK 1.4 to take advantage of the new collections, IO, imaging and print APIs which had the potential to significantly improve the product. Dropping API support for a JDK version is a big deal. On one hand the move might attract new customers with new features but on the other hand there is significant risk that existing customers will be left unsupported.
Turn the clock forward ten years and we are facing some of the same product issues related to JDK features and versioning. JDK 9 is just around the corner and there is significant evidence that JavaFX is finally gaining some traction on the desktop and might even be a viable migration path to mobile. Oracle has been pushing hard to move its clients to Java 8 ending general support for Java 7 in spring of 2015 and, incredibly, Java 5 gained EOL status back in 2009. Historically the Java community has moved very slowly when adopting new Java version regardless of major security exploits or the potential to take advantage of significant performance gains. Our problem boils down to compromise; how do we continue to move the ICEpdf library forward without leaving existing customers behind.
ICEpdf has made its way into countless Java projects with many users using our core rendering API which is based on AWT and Java2D. There are also many users that use part, or all, of our Swing Reference Implementation (RI). Oracle now recommends that new Java projects should use JavaFX over Swing, they haven’t deprecated Swing, but it’s no longer the favored child that it once was. Until Java 8 there was no easy way to include a Swing component into a JavaFX application. Java 8 has introduced the SwingNode class which makes it easier to include simple Swing based components into the JavaFX scene hierarchy .
So it sceems that Java 8 and JavaFX have reached a level of maturity that will enable the Java community to move forward with a new and very exciting technology stack. The ability to import a Swing Component into a JavaFX scene is a game changer, especially for ICEpdf and other “legacy” Swing based utilities. This will allow customers to start new project using JavaFX and still leverage a hardened PDF library.
Does this mean that ICEpdf, based on the AWT/Java2D and Swing APIs, is now a “legacy” library? Perhaps, but no more so than vast majority of existing Java desktop libraries and applications. ICEpdf in its current form will continue to be used and supported for years to come.
Change is in the air, however. We have identified an exciting number of potential capability and performance improvements that could be gained by adopting Java 8 and JavaFX as the core rendering technology for ICEpdf, as well as a complete JavaFX-based Viewer Reference Implementation. This will be a massive undertaking by our development team, and will require a substantial amount of time to achieve.
Going forward we hope to write up our findings and hopefully get community feedback as we go. So stay tuned as change is under way and ICEpdf is moving forward!
ICEpdf Development Team