Schlagwort-Archiv: derby

Derby startet nicht

Immer mal wieder begegnet mir bei einem Kunden eine etwas ältere Java7-Version, was für die meisten Zwecke auch völlig ausreichend ist.

Das Datenbanksystem Derby (bzw. JavaDB) ist seit JDK 6 mit dabei und ist gerade für Demonstrationen und Tests sehr gut geeignet.

Bei konkret JDK 7u51 gibt es jedoch ein Problem: Derby startet nicht.

Stattdessen wird eine AccessControlException geworfen, und die Fehlermeldung lautet

access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")

Dieses Verhalten ist seit geraumer Zeit bekannt, an verschiedenen Stellen ausführlich beschrieben, und auch an Lösungsvorschlägen mangelt es nicht. Einige sind korrekt, einige eher Hacks, und einige funktionieren schlichtweg nicht.

Mit 7u51 wurden die Sicherheitsrichtlinien geändert: Vorher durfte jeder Prozeß an jedem Port > 1023 horchen, nun gilt das nur noch für Ports in einem weiter hinten liegenden Bereich (ab irgendwo um 40.000). Derby möchte standardmäßig Port 1527 verwenden, und das geht jetzt nur noch mit entsprechender Erlaubnis.

Um mir die Zeit und den Aufwand zu sparen, jedesmal wieder von vorn alle üblichen Verdächtigen abzuklappern, schreibe ich hier die von mir präferierte Lösung nieder, auf daß ich sie fortan immer parat haben möge.

Die JDK-Sicherheitsrichtlinien werden in der Datei java.policy gespeichert, die in $JAVA_HOME/jre/lib/security liegt.

Dort kann nun am Ende die neue Erlaubnis eingetragen werden:

grant {
    permission java.net.SocketPermission "localhost:1527", "listen";
};

Derby darf horchen, kann starten, alles wieder gut.

Das Ganze gilt nur für 7u51 – ab der nächsten Version (7u55) enthält die Derby-interne server.policy-Datei die entsprechende Erlaubnis bereits, womit die obige Ergänzung nicht mehr notwendig ist.

[twoclick_buttons]