Menü

Oracle will den Zugriff auf den Klassenpfad in Java 9 milder regulieren

Mark Reinhold schlägt vor, dass Reflexionszugriff auf den Klassenpfad standardmäßig in Java 9 erlaubt und erst in künftigen Versionen verboten sein soll. Beim Übergang soll eine variable Einstellung helfen.

Lesezeit: 1 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 44 Beiträge
Von

Die größte Sorge vieler Java-Entwickler bezüglich des für Ende Juli geplanten Java 9 ist, dass ihre Anwendungen aufgrund zahlreicher Änderungen nicht mehr ohne Weiteres laufen. Bedenken bereitet dabei unter anderem, dass der Reflective Access, also Zugriff über Reflexion auf den Klassenpfad, künftig verboten ist. Grund dafür ist, dass die internen Java-APIs von der Außenwelt abgeschirmt sein sollen.

Nun schlägt Mark Reinhold, Leiter der Java Platform Gropu bei Oracle, in einer OpenJDK-Mail vor, den Zugriff in Java 9 zunächst standardmäßig zu erlauben. Die von ihm als "Big Kill Switch" bezeichnete Option --permit-illegal-access soll damit das Standardverhalten der JDK-Runtime werden. Änderungen beim Kompilieren sind weiterhin nicht vorgesehen.

Die oben genannte Option möchte Reinhold gleichzeitig umbenennen, um die Steuerung eines abgestuften Zugriffs in die Hände der Nutzer zu legen. Sein Vorschlag sieht folgende Optionen für den Reflective Access vor:

  • --illegal-access=permit soll die Standardeinstellung werden. Damit können beliebige Pakete auf den Klassenpfad zugreifen. Das System gibt anschließend lediglich eine Warnung beim ersten eigentlich unerlaubten Zugriff aus mit dem Hinweis darauf, wie sich detaillierte Warnung ausgeben lassen.
  • --illegal-access=warn ist das exakte Pendant zum heutigen --permit-illegal-access, indem es den Zugriff erlaubt, aber bei jedem entsprechenden Zugriff eine Warnung ausgibt.
  • --illegal-access=debug erzeugt neben einem Warnhinweis einen Stack Trace und entspricht damit der bisherigen Einstellung --permit-illegal-access mit der zusätzlichen Verwendung von -Dsun.reflect.debugModuleAccessChecks.
  • --illegal-access=deny verbietet den Zugriff vollständig. Ausnahmen lassen sich jedoch wie auch bisher über weitere Optionen wie --add-opens oder --add-exports steuern. Für künftige Java-Releases soll diese Einstellung standardmäßig gelten.

Die Optionen sollen Entwicklern bei einer sanfteren Migration helfen, statt wie nach der bisherigen Planung einen harten Schnitt für den Zugriff zu bringen. Selbst nachdem die letzte Option zum Standard wird, soll die manuelle Erlaubnis über die erste Option weiterhin für mindestens ein weiteres Release möglich sein.

Der Vorschlag darf durchaus auch als eine Reaktion auf die mehrheitliche Ablehnung des Modulsystems verstanden werden. Gleichzeitig räumt Reinhold ein, dass die Änderungen nicht "magisch alle Probleme der Einführung des JDK 9 löse". Falls die Änderungsvorschläge angenommen werden, muss das JEP 260 (Encapsulate Most Internal APIs) angepasst werden. (rme)