- PR -

propertyファイルの内容をメモリーにキャッシュ

1
投稿者投稿内容
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 2003-01-15 02:34
いつもお世話になっています。

只今、サーブレット、JSPを使ってWEBのシステムを開発しております。

このシステムでJavaでのエラー処理の時入力値の属性・サイズなどを
propertyファイルに設定しその値を取得して入力値のチェックをしていますが、
その際、毎回propertyファイルを読み込んでいます。

毎回propertyファイルを読み込むのではなpropertyファイルの内容を
メモリーにキャッシュしたいのですが、何か良い方法がありましたら
ご教授願えないでしょうか。。。。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-01-15 04:01
TAKAさん、

システムの規模や用途、運用により違ってくると思います。
既にTAKAさんもご存知とは思いますが、幾つかの方法をまとめてみました。

まず、簡単な方法として,ServletContextの setAttribute, getAttributeの使
用があります。文字列以外のオブジェクトも記憶させることができますが、同一
コンテキスト上の他のサーブレットからも参照できてしまうので、1人くらいし
か使用しないシステムに限られます。

2番目の方法は、セッションの間、ユーザの振る舞いを追跡するために準備され
ている、HttpSessionの setAttribute, getAttribute を使用することです。
セッションを意識する必要があるので、最初の方法よりは手間が掛かります
が、同時に複数のセッションに対応できます。

3番目の方法は、JDBCを用いてDBに記憶させる方法です。少し大掛かりで
すが、システムを停止させても残しておきたいデータ向きです。

4番目は、EJBにデータを管理させる方法です。
ビジネスロジックを分離する必要がある程の大掛かりなシステム向きです。

エラー処理をしている間だけのデータ保持であれば、2番目の方法で良いかも
知れません。
上記は細かな注意事項を省略していますので、時間に余裕があれば J2EEの
Blue Printを読まれるのも良いと思います。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-01-15 10:01
ん?
エラーチェックに用いるサイズなどの話ですよね?
セッションごとに別々の管理する必要はありませんよね?

単純にjava.util.Propertiesとかにセットしておいてこれを使いまわせばよいという
話ではないでしょうか?
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 2003-01-15 10:26
ご返答ありがとうございます!
web層ならそうなると思いますが、ロジック層(ただのJavaのclass)で
チェック処理をしたいのです(説明不足でした。。。すいません)。

自分なりに考え以下の通りにしてみようかと思います。

下記のコードで問題あるようでしたら、ご意見お願いしますm(_ _)m

public class TestCheckProp {
private static final erroProp eProp = new erroProp();
public static void checkProp(String inData, String errCod) {
//省略
}
}
public class ErroProp extends Properties {
public static final String TEST_COD = "Test0001";
public static final String ERR_PROPERTYFILE = "D:/err.properties";
public ErroProp() {
super();
try{
InputStream in = new FileInputStream()
load(in);
}catch(IOException e){
e.printStackTrace();
}
  }
}

[ メッセージ編集済み 編集者: TAKA 編集日時 2003-01-15 11:01 ]
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2003-01-15 11:21

ただ同じ物を使いまわすというのであり、インスタンスがひとつしか必要でないのであれば、シングルトンはいかがでしょうか?
コード:
public class ErrorProp {

    private static final ERROR_PROP_FILE_PATH = "どっか";

    /*必ず使用されるErrorPopオブジェクト*/
    private static ErrorProp mInstance = null;

    /*エラーメッセージを格納するプロパティオブジェクト*/
    private Properties mErrorProp = new Properties();

    /*他からはアクセス不可のコンストラクタ*/
    private ErrorProp() {
        try{
            mErrorProp.load(new FileInputStream(ERROR_PROP_FILE_PATH));
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    /*同じインスタンスを返すクラスメソッド*/
    public static ErrorProp getInstance() {
        if(mInstance == null) {
            mInstance = new ErrorProp();
        }
        return mInstance;
    }

    /*エラーコードに対応したメッセージを取得するためのゲッターメソッド*/
    public String getErrorMessage(String errorCode) {
        return  mErrorProp.getProperty(errorCode);
    }
}

public class ErrorPropsTest {
    public static void main(String[] args) {
        ErrorProp error = ErrorProp.getInstance();
        error.getErrorMessage("HTTP501");
        ...などなど...
    }
}



これならば、ErrorPropのインスタンスがひとつだけしか作られませんのでメモリと時間の節約になるはずです。よろしければ参考にしてください。
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 2003-01-15 12:40
ありがとうございます。皆様のご意見大変参考になりました。
1

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