1

私は、かなり標準的なWeb /サービス/データアクセスの階層化されたデザインを使用して、楽しみ/学習のための小さなWebサイトを構築しています。

データアクセス層の場合、SQLストアドプロシージャを呼び出すためのConnectionオブジェクトの作成を処理するための最良の方法は何ですか?その理由は何ですか?私は多くのコードを手作業で書いていることを念頭に置いてください(私はHibernateなどを使用してこれをたくさん行うことができることを知っています)...

1)接続の静的インスタンスを1つ作成し、それを介してすべてのクエリを実行する必要がありますか、それとも同時実行の問題が発生しますか?

2)データベース呼び出しごとにConnectionインスタンスを作成し、パフォーマンスのオーバーヘッドを受け入れる必要がありますか?(これが当てはまる場合は、後日接続プールを調べます)

4

2 に答える 2

1

Connectionスレッドごとに1つ使用する必要があります。スレッド間で接続を共有しないでください。

ApacheDBCPの使用を検討してください。これは、データベース接続を構成してプールから引き出すための無料の標準的な方法です。これは、Tomcatのような高性能Webサーバーで使用される方法です。

さらに、DBCPを使用している場合、それはプール(読み取り:キャッシュ)であるため、接続を頻繁に作成/閉じることによるペナルティはほとんどありません。

于 2008-09-23T13:24:04.263 に答える
1

標準的な方法は、DataSource を設定することです。すべてのアプリケーション サーバーは、管理コンソールを介してこれを行うことができます。その後、プールはその JNDI 名 (「jdbc/MyDB」など) でアクセスできるようになります。

実際、データ ソースは接続プールである必要があります (通常はそうです)。接続をキャッシュし、アプリケーションに渡す前にテストし、他の多くの重要な機能を実行します。

あなたのコードでは:

  1. JNDI 名を解決して DataSource にキャストする
  2. データ ソースから接続を取得する
  3. 仕事をしなさい
  4. 接続を閉じます (ここでプールに戻ります)

(自由に利用できるプール実装を使用して) 自分でプールをセットアップできますが、アプリケーション サーバーを使用している場合は、まったく意味がありません。

PSこれはWebアプリケーションであるため、リクエストがHttpFilterを使用することになった後に接続を閉じたことを確認する良い方法です。web.xml で設定できます。リクエストが来たらコネクションを取得し、ThreadLocal に入れる。リクエスト中に ThreadLocal から接続を取得しますが、接続を閉じないでください。要求の後、フィルターで接続を閉じます。

于 2008-09-23T15:17:33.540 に答える