Java7u51でJavaDB(1527port)が起動しなくなったときの対処


Occured Error

Windows7, Java7u51 + NetBeans7.4でJavaDBのsampleを覗こうとして、NetBeansからJavaDBを起動しようとしたら
ポート1527の接続が確立できないエラーが発生して起動できず。

標準出力にもExceptionががが・・・

Wed Feb 05 20:12:51 JST 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
    ~以下省略~

Cause

Java7u51でDefault Socket Permissionsが変わったとのこと。
Java™ SE Development Kit 7, Update 51 (JDK 7u51) - Update Release Notes
確かTwitterでもアプレット使ってる場合は注意してねって言われてたような気も・・・アプレット使ってないので忘れてました。

Known IssuesにもちゃんとJavaDBについて記載ありました。

寺田佳央さんもつぶやいてました。
https://twitter.com/yoshioterada/status/423391512370483201

StackOverflowにも…
http://stackoverflow.com/questions/21154400/unable-to-start-derby-database-from-netbeans-7-4

To Fix Problem...

C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.policyを編集します。
今回は以下のような記述を追加しました。

grant codeBase "file:C:/Program Files/Java/jdk1.7.0_51/db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

環境変数JAVA_HOMEを設定してれいれば、システムプロパティ${java.home}を使えると思いますが、設定していないので絶対パスでの指定にしました。

参考: システムプロパティ${java.home}を使った場合

grant codeBase "file:${java.home}/db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

設定を追加した後でJavaDBを起動すると正常にポート1527でListenできました!