Ich stand und stehe immer noch der Implementierung des Modulsystems in Java9 ablehnend gegenüber. Neulich war es draußen so, dass ich lieber drin blieb und ich erinnerte mich an eine Test-Suite, die ich bei der Umstellung auf Java8 dazu nutzte, Imkompatibilitäten meiner Anwendungen festzustellen und auszumerzen.
Zu den Test-Themen zählten unter anderem:
Ich reaktivierte also diese kleinen Tests und ließ mich überraschen. Tatsächlich wurde ich auch überrascht: der JAAS-Test schlug fehl. Ich brauchte einige Zeit, dahinterzukommen warum er fehlschlug.
Dazu vielleicht zunächst ein wenig Hintergrund: Das JAAS-Szenario sah so aus, dass ich darüber die Authentifizierung realisierte. Dadurch wird ein Principal aufgebaut, der dann vom SecurityManager benutzt wird um zu prüfen, ob der Code, der gerade ausgeführt wird, auch über die entsprechende Permission verfügt.
Ich benutzte zur Erstellung des Prinzipals den com.sun.security.auth.module.UnixLoginModule. Unter Java8 funktionierte der Test problemlos, unter Java9 wurden keinerlei Permissions vergeben.
Nach langwieriger Suche stellte sich die Situation für mich so dar, dass Oracle selbst das neue Modulsystem nicht restlos durchschaut, denn im Zuge der Arbeit des SecurityManager wird an den Principals die Methode hashCode aufgerufen - die wiederum die Methode toString aufruft, um den Hash aus dem resultierenden String zu errechnen.
Da die Methode toString jedoch die Stringrepräsentation aus ResourceBundles (Stichwort I18n) zusammensetzt, fliegt unter Java9 eine ResourceNotFoundException, weil das benötigte ResourceBundle nicht im Klassenpfad gefunden werden kann.
Das wirklich witzige daran ist, dass man diesen Fehler umgehen kann, wenn man direkt nach dem Login alle Principals des Subject holt und an jedem vorsorglich einmal die toString-Methode aufruft. Zu diesem Zeitpunkt weiß Java noch, wo das ResourceBundle im ClassPath liegt und das sorgt dafür, dass die Ressourcen dann auch gefunden werden, wenn der SecurityManager sie benötigt.
Die Dateien zum Nachvollziehen sind angehängt: Unter Java8 funktioniert die Beispielanwendung mit oder ohne Kommandozeilen-Parameter, unter Java9 funktioniert sie nur mit Kommandozeilenparameter - das schaltet nämlich den Workaround an...
Die Anwendung muss mit den drei System-Properties
Ich habe nicht versucht, ob derselbe Mechanismus mit denselben fatalen Folgen unter Windows zum Tragen kommt.
Ein entsprechender Bug wurde gemeldet und ist zur Zeit intern unter Review.
04.11.2018
Eine Klarstellung zum Thema Java, SecurityManager, Principals und Permissions
16.04.2018
Die Umstellung auf Java9 in meinen eigenen Projekten ist abgeschlossen
25.02.2018
Nachdem ich bereits über den einen oder anderen Bug in Verbindung mit Java 9 berichtet habe, habe ich bereits wieder einen gefunden - und wieder verbunden mit der ach so tollen Erfindung des Java-Modulsystems
25.02.2018
Ich habe bereits über einen Bug in Java9 berichtet, der mich ziemlich überrascht hat. Wer aber beschreibt meine Überraschung, dass der Bug, der mich beim Umstieg von Java7 auf Java8 bereits angespuckt hat, wieder Speichel gesammelt hat?
Testdatengeneratoren als Microservices mit Docker
02.11.2019
Ich habe die verschiedenen Testdatengeneratoren mittels Microservices über HTTP zugänglich gemacht, um sie unabhängig von der verwendeten Programmiersprache und/ oder Version (Java 11) verwenden zu können.
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Git(lab|hub) Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Nachdem ich neulich auf einen sehr interessanten Link gestoßen war, habe ich mich dafür interessiert, ob es möglich wäre - und falls ja: wie einfach - GIF-Animationen aus Java heraus zu erzeugen - und zwar mit Bordmitelln und ohne Zuhilfenahme externer Biblioheken
Weiterlesen...Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:
Weiterlesen...Nachdem es nun bereits seit einiger Zeit ein wenig stiller um meine diversen Generatoren für Testdaten geworden ist, habe ich über den Feiertag in Thüringen einen neuen begonnen.
Weiterlesen...Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.