1

データベースには、起動時にアプリケーションから一度読み取られる定義テーブルがあります。この定義テーブルはめったに変更されないため、一度読み取り、変更のたびにアプリケーションを再起動することは理にかなっています。

ただし、テーブルが読み取られる (ResultSet に入れられる) 後は、独自のスレッドで実行されている複数のハンドラーによって読み取られます。

これを達成するためにどのように提案しますか?

私のアイデアは、CachedRowSet に値を設定し、新しいリクエストが来るたびに各ハンドラーに対して (createCopy() メソッドを使用して) このセットのコピーを作成することでした。

これは賢明だと思いますか?これは良いパフォーマンスを提供しますか?

ありがとう。

4

3 に答える 3

1

シングルトンパターンを使用する方がよい場合があります。これにより、すべてのスレッドが必要なオブジェクトを取得するためにアクセスできる単一のクラスを作成できます。これにより、変更が加えられるたびにアプリケーションをシャットダウンする必要がなくなる可能性もあります。これを実現する1つの方法は、必要な情報のメソッドを取得および設定するクラスを作成することです。そして、そのオブジェクトの参照を提供する別のクラス。

参照を提供するクラスには、プライベートコンストラクターと、それ自体への参照を返し、1つだけが存在することを確認するgetInstanceメソッドを含めることができます。これにより、状況が変化したときに何ができるかについて、他のいくつかのオプションも提供されます。

于 2010-03-27T19:25:22.760 に答える
1

結果セットへのアクセスを制御していて、アプリケーションを再起動するまで結果セットを更新したくない場合は、カスタム クラスで CachedRowSet をラップすることをお勧めします。これを行う 1 つの可能な方法は、singleTon であるラッパー クラスを用意し、getter メソッドを提供して、他のスレッドまたはクラスがそれにアクセスできるようにすることです。そうすれば、コピーを作成する必要がなくなり、CachedRowSet 実装への依存がなくなります。コピーを作成すると、不要なオーバーヘッドが発生します。上記の方法で、1000 のスレッドが結果セットにアクセスしている場合、createCopy() を 1000 回呼び出して、同じ結果セットの 1000 のコピーを作成すると想像してください。

于 2010-03-27T19:49:08.273 に答える
0

ConcurrentHashMap構成テーブルを静的データ構造( )に読み込んでから、スレッドに検索させるパターンだと思います。

から参照マップを作成することにより、起動時に書き込み競合が発生しないようにすることができServlet.init()ます。サーブレットごとに1回実行されることが保証されています。

于 2010-03-30T19:08:43.893 に答える