http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/MiscAPI/Preferences/Preferences.html

Java で、Windowsのレジストリを検索する。

標準の java.util.prefs.WindowsPreferences では、Software\\JavaSoft\\Prefs 以下の
レジストリに対して、読み書きします。

今回は、EXCELのプリンタ名を取得する為に、別のレジストリを読み出す必要があります。

WindowsPreferences の WINDOWS_ROOT_PATH を、Software に設定することで、
対応できますが、このクラスは、パッケージローカルな為、直接拡張が出来ません。
また、native メソッドも使用しているため、ソースをコピーして別クラスで
作成することもできません。
そこで、このクラスそのものを書き換える事で、対応しました。

検索した結果、Keyは、小文字でないと受け付けないのですが、データとして、
大文字のKeyが検索されます。この関係で、１回目の検索時と、２回目以降の検索時で、
検索データが異なってしまう現象が発生しました。
これは、java.util.prefs.AbstractPreferences.java で、子ノードをキャッシュしている
HashMap から、Key情報 を TreeSet に移すときに、発生しており、toLowerCase() して
セットすれば、解消されます。

これらの２つのクラスを、修正後、Javaのシステムよりも早くロードさせる為に、
endorsed を利用します。

endorsed は、jar 化したクラスを、<JAVA_HOME>/jre/lib/endorsed 以下にコピーすることで、
システムクラスと置き換える（先に読み込ませる）ことが出来ます。

※１
   <JAVA_HOME>/lib/endorsed/ 以下でも出来るはずですが、うまくいきませんでした。
   現状は、<JAVA_HOME>/jre/lib/endorsed 以下におくか、java 起動時の引数で
$ java -Djava.endorsed.dirs=<プロダクトのjarファイルがあるディレクトリ> ...
   で起動するか、どちらかの方法が有効でした。

java full version "1.4.1_01-b01"


※２
  Tomcatは、bin\setclasspath.bat で、endorsed ディレクトリを設定しています。

rem Set the default -Djava.endorsed.dirs argument
set JAVA_ENDORSED_DIRS=%BASEDIR%\bin;%BASEDIR%\common\lib

BASEDIR は、CATALINA_HOME が、セットされています。

よって、Tomcatで使用する場合は、<CATALINA_HOME>/common/lib フォルダに、
ogPrif.jar を配置する必要があります。


