2011-07-17 2 views
1

クライアントが更新をリクエストするたびに、web-appsフォルダ内のxmlファイルを更新する必要があるサーブレットを作成しようとしています。しかし、このファイルは一般的なリソースであるため、mvn:jettyサーバーで以下のerronを取得します。 Transformer例外が発生しました。基本的にファイルが見つからないというのは、要求された操作が、ユーザーマップセクションが開いているファイルに対して実行できないためです。私はこれがスレッドの安全を確保するためのWindowsシステムメッセージだと考えています。トランス例外なしでサーブレットの書き込みを共通XMLファイルリソースに同期する方法

javax.xml.transform.TransformerException: java.io.FileNotFoundException: C:\User 
s\Anubhav\workspace2\blogping-dist (eng)\dreamapp\src\main\webapp\xyz.xml (T 
he requested operation cannot be performed on a file with a user-mapped section      
open) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutpu 
tHandler(TransformerImpl.java:489) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor 
m(TransformerImpl.java:298) 

アクセスを同期させるためのアドバイスはありますか?

私は変圧器のボトルネックを見つけました...しかし、それについてはあまり見つけられませんでした。

おかげ

答えて

3
  • ファイル(fileOutputStream.close()
  • 同期の書き込みにストリームを閉じていることを確認します。共通のファイルへの書き込みは、各要求に必要とされる場合は、アプリの設計が良好であれば、私は疑問ですsynchronized(lockObject)またはlock.lock()

を使用してください。これは潜在的なボトルネックであり、回避する必要があります。たとえば、ファイルではなくトランザクションデータベースを考えてみましょう。

+0

+1 5人のユーザーしかいない場合を除き、HTTP要求をパラレルではなくシリアルに進めることは災害のレシピです。 –

+0

これがすべての要求に対して発生しない場合は、正常かもしれません。しかし、それ以外の場合はトランザクションデータベースを考慮する必要があります – Bozho

+0

Bozhoありがとうございます。しかし、私は、要求された変更を反映するクライアントプログラムにアクセス可能でなければならないxmlファイルを更新する必要があります。そして、このXMLファイルは、それを見たいすべてのクライアントに共通です。私は試しました[http://serghei.net/docs/programming/java/devel%20java%20enterprise%20apps/ch07/07-12.html]。しかし、まだ動作しません。 – bohav

関連する問題