- PR -

複数アプリケーションから共通の設定ファイル

1
投稿者投稿内容
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-06-06 11:07
複数アプリケーション(TOMCAT と 普通のJavaアプリケーションなど)から、
共通の設定ファイルを参照したいのですがいい方法が思いつきません。
UNIXでもWINDOWSでも動かしたいので絶対パスでの指定は出来ません。

各アプリケーションのカレントディレクトリにプロパティファイルを置き、
そこに絶対パスで共通のプロパティファイルのパスを記述するという方法を考えていますが、
アプリケーションが増えるたびにこれを追加するのも面倒だし、
共通のファイルのパスが変わったらすべて書き直さねばなりません。

環境変数(java.home, user.dir, user.home等)で
うまく出来ないものかと考えていますが、具体的には思いつきません。

何か良い方法はありませんか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-06-06 12:34
>Shinさんの書き込み (2003-06-06 11:07) より:
複数アプリケーション(TOMCAT と 普通のJavaアプリケーションなど)から、
共通の設定ファイルを参照したいのですがいい方法が思いつきません。
UNIXでもWINDOWSでも動かしたいので絶対パスでの指定は出来ません。

ClassLoader#getResourceAsStreamやResourceBundle#getBundleなどを使うと
リソースファイルをクラスパスから検索して読み込んでくれます。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-06-06 12:48
1.環境変数(java.home, user.dir, user.home等)を使うつもりなら、
選択肢は広いです。
・java.util.Propertiesが簡単で便利です。
 ・ 日本語混じりにするなら、XMLファイルにするのも良いと思われます。
いずれの方法も、ファイルを Unixと Windowsで持ち運びすることが
できるでしょう。

2.もし、環境変数を使わないなら、java.util.prefsパッケージが良い
でしょう。上記 Propertiesをより便利に使います。(お勧め!!)

3.さらに広域的に使うなら JNDIが良いと思われます。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-06-06 13:15
getResourceAsStream() で解決できました。
ありがとうございました.
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2003-06-06 14:33
Shinさんの書き込み (2003-06-06 13:15) より:
> getResourceAsStream() で解決できました。
> ありがとうございました.

便乗質問ですが、getResourceAsStream() は、CLASSPATH 環境変数
で定義されているパスを探索するのですよね。<あってますか?

とすると、Tomcat からこれを利用する場合、Tomcat 起動時の
CLASSPATH 環境変数にあらかじめパスを設定しておかなければ
ならないような気がするのですが。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-06-06 14:51
>とすると、Tomcat からこれを利用する場合、Tomcat 起動時の
CLASSPATH 環境変数にあらかじめパスを設定しておかなければ
ならないような気がするのですが。

common/classesとかWEB-INF/classesとかに入れておくだけでも大丈夫ですよ。
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2003-06-06 15:35
ごめんなさい。勘違いしてました。
環境変数 CLASSPATH で定義されているパスを探索するのは、
ClassLoader.getSystemResourceAsStream()
でした。m(..)m
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-06-06 15:43
「できました、ありがとうございました」だけではあれなので、
役に立つかは疑問ですがコードを載せておきます。
commons-collections パッケージの ExtendedProperties を使っています。

org.apache.commons.collections.ExtendedProperties props = new ExtendedProperties();
props.load(this.class.getResourceAsStream("common.properties"), "Shift_JIS");
1

スキルアップ/キャリアアップ(JOB@IT)