Unterstützung neuer Oracle-Java-Versionen und OpenJDK

Produktunabhängige Information

Dieser Artikel enthält Aussagen zur Unterstützung künftiger Java-Versionen der jadice-Produktfamilie.

Stand Februar 2024

Oracle Java SE 8

Java 8 wird in aktuellen Produkten ab März 2024 nicht mehr unterstützt. Extended Support für Java SE 8 ist lt. Oracle bis Ende 2030 erhältlich. Der jadice viewer kann bis inklusive Version 5.6 mit Java 8 betrieben werden.

Oracle Java SE 9 und später

Mit Versionen ab Java 9 ergeben sich weitreichende Änderungen, was die Funktionalität, Lizenzierung und den Update-Zyklus von Oracle Java betrifft. 

Neben der neuen Modulstruktur, durch die primär die Entwicklungsseite von Java-Anwendungen betroffen ist, ändert sich ab Java 11 auch das Supportmodell, unter dem Oracle Java-Versionen zur Verfügung stellt. Neue Java-Versionen mit eingeschränkter Supportdauer werden zukünftig halbjährlich erscheinen. Versionen mit langfristiger Unterstützung durch Oracle erscheinen zukünftig in mehrjährigem Abstand.

Ausführliche Informationen zum neuen Lizenzmodell finden sich unter anderem bei heise.de bzw. direkt bei Oracle.

Unterstützte Versionen 

Aktuell unterstützen die Produkte der jadice-Familie die Long-Term-Support-Version (LTS) Java 17, Java 11. Künftig werden die Produkte der jadice-Familie nur LTS-Versionen unterstützen. Die Unterstützung von Nicht-LTS-Versionen ist nicht vorgesehen. Die nächste unterstützte Version der jadice-Produktfamilie nach Oracle Java SE 17 wird damit Oracle Java SE 21 sein.

OpenJDK

Stand 11.02.2019:

Umfangreiche Untersuchungen zur Identifikation von Einschränkungen und Problemen sind abgeschlossen. Dabei wurde die Version OpenJDK-8u181 verwendet.

Ergebnis: Die Produkte der jadice-Familie unterstützen grundsätzlich OpenJDK 11. Eine für Ihr System passende Version können Sie unter https://adoptopenjdk.net/ herunterladen.

Vorbehalt:

Es existieren leichte Unterschiede in der Bildverarbeitung, da OpenJDK 8 und Oracle Java SE 8 intern unterschiedliche Renderer einsetzen (siehe https://github.com/bourgesl/marlin-renderer). Oracle 8 verwendet den Pisces Renderer, neuere Versionen von Oracle und alle Versionen von OpenJDK verwenden den Marlin Renderer, jedoch nicht in der neusten Version.

Bei der Verwendung von Pisces kann es bei bestimmten Dokumenten und Zoomstufen zu Fehlern kommen, sodass ausschließlich der Einsatz des Marlin Renderer empfohlen wird - dieser konnte bei Testszenarien in allen Fällen gleichartige oder bessere Ergebnisse erzielen als Pisces, was das korrekte Rendern von Dokumenten betrifft.

Update 14.05.2020:

Die Untersuchungen wurden zusätzlich mit Azul Zulu-OpenJDK durchgeführt. Auch diese Ausprägung des OpenJDK wird unterstützt.

Hierbei wurde auch ein Vergleich der unterschiedlichen OraclJDK/OpenJDK Versionen durchgeführt → siehe https://levigo.de/info/x/yroTBw.


Verbesserungsmöglichkeiten bei bestimmten Renderingfehlern.

Bei einer Kundeninstallation kam es zu einem Fehler, sodass bei sehr dünnen Linien diese nicht mehr angezeigt wurden (siehe

Fehler beim Rendern des Makros 'jira': Der Jira-Server für dieses Makro konnte nicht gefunden werden. Das könnte an der Konfiguration des Anwendungslinks liegen.
). Dieser Fehler im Subpixelbereich lässt sich über eine Einstellmöglichkeit im Marlin Renderer beheben. Für eine Übersicht über alle Einstellungen siehe https://github.com/bourgesl/marlin-renderer/wiki/Tuning-options

Im konkreten Fall wird die Einstellung sun.java2d.renderer.subPixel_log2_Y betrachtet.

Wert der VariableAb ca. welcher Zoomstufe ist ein Fehlverhalten sichtbar?In welchem Profil wird diese Variable verwendet?
2ca. 190%speed 
3ca. 90%quality 
4ca. 50%-
5ca. 20%-

Im Vorfeld des Einsatzes von openjdk sollte man daher verifizieren, ob es zum Einsatz solcher Dokumente kommt.

Für eine Verwendung von openjdk bei Benutzung solcher Dokumente können wir im Moment  weder die Profile "speed" noch "quality" uneingeschränkt bzw. ohne Anpassung empfehlen. Stattdessen wird der Faktor 4 oder 5 vermutlich zu einem besseren Ergebnis führen, was aber auch wiederum zulasten der Geschwindigkeit beim Rendern geht - diese Entscheidung liegt in der Hand der Integratoren von jadice Produkten.


Zur Aktivierung von Marlin beachten Sie bitte die Hinweise unter https://github.com/bourgesl/marlin-renderer/wiki/How-to-use

Um zu verifizieren, dass Marlin tatsächlich aktiv ist, kann die folgende JVM-Option beim Start der Anwendung mitgegeben werden: -Dsun.java2d.renderer.log=true
Es müsste dann eine Ausgabe ähnlich der folgenden im Log erscheinen:

 Klicken Sie hier, um zu erweitern...

INFO: ===============================================================================
INFO: Marlin software rasterizer           = ENABLED
INFO: Version                              = [marlin-0.9.4.3-Unsafe]
INFO: sun.java2d.renderer                  = org.marlin.pisces.MarlinRenderingEngine
INFO: sun.java2d.renderer.useThreadLocal   = true
INFO: sun.java2d.renderer.useRef           = soft
INFO: sun.java2d.renderer.edges            = 4096
INFO: sun.java2d.renderer.pixelWidth       = 4096
INFO: sun.java2d.renderer.pixelHeight      = 2176
INFO: sun.java2d.renderer.profile          = quality
INFO: sun.java2d.renderer.subPixel_log2_X  = 8
INFO: sun.java2d.renderer.subPixel_log2_Y  = 3
INFO: sun.java2d.renderer.tileSize_log2    = 5
INFO: sun.java2d.renderer.tileWidth_log2   = 5
INFO: sun.java2d.renderer.blockSize_log2   = 5
INFO: sun.java2d.renderer.forceRLE         = false
INFO: sun.java2d.renderer.forceNoRLE       = false
INFO: sun.java2d.renderer.useTileFlags     = true
INFO: sun.java2d.renderer.useTileFlags.useHeuristics = true
INFO: sun.java2d.renderer.rleMinWidth      = 64
INFO: sun.java2d.renderer.useSimplifier    = false
INFO: sun.java2d.renderer.usePathSimplifier= false
INFO: sun.java2d.renderer.pathSimplifier.pixTol = 0.125
INFO: sun.java2d.renderer.clip             = true
INFO: sun.java2d.renderer.clip.runtime.enable = false
INFO: sun.java2d.renderer.clip.subdivider  = true
INFO: sun.java2d.renderer.clip.subdivider.minLength = 100.0
INFO: sun.java2d.renderer.doStats          = false
INFO: sun.java2d.renderer.doMonitors       = false
INFO: sun.java2d.renderer.doChecks         = false
INFO: sun.java2d.renderer.useLogger        = false
INFO: sun.java2d.renderer.logCreateContext = false
INFO: sun.java2d.renderer.logUnsafeMalloc  = false
INFO: sun.java2d.renderer.curve_len_err    = 0.01
INFO: sun.java2d.renderer.cubic_dec_d2     = 1.0
INFO: sun.java2d.renderer.cubic_inc_d1     = 0.2
INFO: sun.java2d.renderer.quad_dec_d2      = 0.5
INFO: Renderer settings:
INFO: MergeSort: DPQS_THRESHOLD: 256
INFO: MergeSort: DISABLE_ISORT_THRESHOLD: 1000
INFO: SORT         = DPQS_20191112
INFO: CUB_DEC_BND  = 256.0
INFO: CUB_INC_BND  = 51.2
INFO: QUAD_DEC_BND = 128.0
INFO: INITIAL_EDGES_CAPACITY               = 98304
INFO: INITIAL_CROSSING_COUNT               = 1024
INFO: ===============================================================================


Auslieferung und Deployment

Java Web Start

In manchen Einsatzszenarien wird der jadice viewer basierend auf Java Web Start verteilt. Ab Java SE 11 wird Java Web Start jedoch nicht mehr unterstützt. Damit entfällt die Möglichkeit, den jadice viewer auf diese Weise auszurollen.  

Sollten Sie vor diesem Problem stehen, so bieten wir Ihnen mit dem jadice web toolkit eine rein webbasierte Viewer-Lösung zum integrierten Einsatz an. Alternativ empfehlen wir das Evaluieren alternativer Technologien (z.B. https://github.com/threerings/getdown/).

Self-contained application

Aktuell ist nicht beabsichtigt, die Produkte jadice viewer, jadice web toolkit und jadice server als "self-contained application" inklusive einer Java-Laufzeitumgebung auszuliefern.