| JSP/サーブレット編 |
|
テキストファイルに対する入出力は極めて簡単なものです。しかし、複数のユーザーが同時にアクセスする可能性があるWebアプリケーションにおける活用においては、重大な落とし穴があることも知っておくべきでしょう。
つまり、ファイルに対する同時書き込みの制御です。データベースであれば、トランザクションや排他ロックなどのしくみがデータベースサーバ自体にあらかじめ備わっていますが、単なるテキストファイルとなると、そのような状況はまったく考慮されていません。そのため、もしも複数のユーザが同時に同一のファイルを開き、書き込み処理を行おうとすれば、思わぬ不整合が生じる可能性があるというわけです。
そこで、テキストファイルの処理に際しては、必ず同時書き込みを防止するロックのしくみを「アプリケーション側」で組み込む必要があります。synchronizedキーワードや、サーブレットではjavax.servlet.SingleThreadModelインターフェイス、J2SE 1.4以降ではjava.nio.FileLockなどの専用のクラスも用意されていますが、これらによって提供されるロックはあくまでアドバイザリロックと呼ばれる「紳士協定」的なロックであるにすぎません。アドバイザリロックにおいては、あくまでプロセス自身がロックを行ないますので、他プロセスによる処理についてはロックは無効です。
そこで、ここではJ2SEのバージョンにも依存せず、ある程度汎用的に適用可能なロックのしくみをご紹介することにしましょう。
■解説
ここでご紹介するのは、専用のロックファイルを生成することで同時書き込みを制御しようという試みです。書き込み時にロックファイルが生成され、そのロックファイルが存在する間はほかのコードは書き込み処理を行なうことはできません。元のプロセスは書き込み終了後にロックファイルを削除します。
<%@ page contentType="text/html;charset=Shift_JIS" |
whileループは、File#createNewFileメソッドがtrueを返す(新規ファイルの作成が成功する)か、リトライ回数(intRetry)の制限を越えるまで、1秒間隔でロックファイルlock.tmpの作成を試みます。ただし、以前の書き込みプロセスが途中で失敗している可能性も考慮する必要があります。その場合に不要なロックファイルがいつまでも残ってしまっていると、以降のプロセスでは永遠に書き込み処理を行なうことができませんので、ロックファイルの最終更新日時が現在時刻の10分以上前であった場合にはロックファイルを強制的に削除します。
whileループから制御が抜けたときにフラグ変数flagがtrueであった場合には、正常にロックファイルを作成できたことを意味しますので、実際のファイル操作に移ります。処理の終了後、ロックファイルは削除します。もしもフラグがfalseであった場合には、ほかのプロセスが書き込み中ですので、その旨をエラー表示し、処理を終了します。
| 「Java TIPS」 |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |






