2011-08-01 16 views
0

DOMパーサーを使用してXMLの解析を実装したJAVAクラスがあります。解析されるXMLファイルは、構成パラメータを持つ構成ファイルです。私のウェブサイトに来るリクエストは、このXMLファイルから返された情報に基づいてリダイレクトされます。私はこの周りに2つの質問を持っていますXMLファイルを複数回処理する

1)私はファイルの解析を毎回ではなく、1回だけしたいと思います。以来、私はファイルがすでにメモリ上で利用可能であるかどうかをチェックする方法を知りたいと思いますが、DOMパーサーはxmlをメモリにロードするので、そのように、次は毎回

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(new File(sFpath)); 

2と呼ばれていません)私は新しいchaged xmlファイルが再ロードされていることを確認しないか、XMLファイルが変更された場合。

おかげで、

答えて

0

DOMは、中間フォーマットは、 - いくつかのアプリケーション固有の(およびフレンドリ)オブジェクト構造にそれを解析し、シングルトンにそれを隠しておきます。 WebリクエストごとにDOMを狩りたくはありません。その後、定期的に(x分またはyのWebリクエストごとに)、ファイルが更新されたかどうかを確認し、再解析してシングルトンを更新します。

+0

私は、この目的のためにシングルトンを使用するこの方法を検討しています。サーブレットとJSPからクラスにアクセスできます。私はサーブレットからアクセスできますが、どのようにしてJSPからシングルトンにアクセスできますか? –

0

ファイルの読み取りは、私はあなたがstatic initialization blockに多分要求を処理またはコードと一緒にいない意味します。次に、ファイルウォッチングのためのファイルchanges.Optionsを検出するために、ファイルウォッチャーを使用することができ、別々に実装する必要があります。

  1. File Watcher
  2. WatchService API(Java 7)
  3. JFileNotify
0

あなたはアプリでDOMを保つことができます他のデータとまったく同じように、アプリケーションサーバ/フレームワークに依存します。しかし、DOMは厄介なAPIのためだけでなく、DOMがスレッドセーフではないため、すべてのアクセスを同期させる必要があるため、貧弱な選択です。一度解析されると、読み取り専用のツリーモデルを使う方がよいでしょう。このためにSaxonとXPath/XQueryを使用することを検討してください。読み取り専用のSaxonツリーにツリーを一度ロードしてから、Javaアプリケーションから呼び出されたXPathまたはXQueryを使用して繰り返しアクセスできます。

構成データをより明示的に表すためのJavaクラスをcdegrootのように作成する方法は、代わりに使用しますが、実際には必要ありません。おそらく、設定ファイルに何かを追加するたびに、より多くの作業が必要になるでしょう。

関連する問題