2

私は大学のプロジェクトのための小さなフォーラムの形でウェブサービスを作っています。Webサービスは、データベースにアクセスして変更するための一連のメソッドを提供し、JSP/サーブレットはそのWebサービスを使用してフォーラムをユーザーに提示します。

すべてのメソッドを設定しましたが、データベース接続を正しく設定する方法がまだわかりません。現在Connection、Webサービスクラスファイルにオブジェクトがあり、クラスのコンストラクターで接続が確立されています。私はすべてのメソッドでその接続オブジェクトを使用しているので、すべてのメソッドは実行中のコンストラクターに依存しています。それが正しいかどうかはわかりません。

これを行うためのより良い方法はありますか?インストラクターから、誰かがページにアクセスするたびにWebサービスのインスタンスが作成されると言われましたが、これは私にとってはコストのかかる操作のように思えます。

編集:接続プールとこれまでに見つけたすべてのものを調べました(これには追加のライブラリが必要です。追加のライブラリのないストックJava SE / EEに制限されているため、問題外です。

4

3 に答える 3

1

これは非常に悪い考えです。Connection共有されているオブジェクトは使用しないでください。そのように拡張することはできず、スレッドセーフではありません。

より良いアプローチは、接続プールを使用することです。必要なときに接続を取得して使用し、同じメソッドのスコープで閉じます。

あなたの友人は誤った情報を持っていると思います。Webサービスは、どのページからも分離して、スタンドアロンにする必要があります。コンテナで管理されています。シングルトンまたはプールされたオブジェクトの場合がありますが、ページごとに1つ作成するわけではありません。

于 2012-09-13T11:33:55.897 に答える
0

いくつかのコードを投稿するのが最善ですが、簡単な説明からいくつかの問題が思い浮かびます。

  1. 実際の負荷の下ではあまり効果的ではない接続をプールしない。
  2. 接続の作成にはコストがかかるため、コンストラクターを頻繁に実行すると、多くの接続が作成されます。
  3. どこで接続を閉じますか?
  4. SQLインジェクションを防ぐようにしてください。
于 2012-09-13T11:36:32.933 に答える
0

非アクティブ、接続状態、ioの問題など、多くの問題が発生する可能性が高いため、コンストラクターで接続を作成しないでください。

むしろ、などのApacheライブラリのデータソースを使用したいと思いますBasicDataSource

BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:...");
dataSource.setUser(...);
dataSource.setPassword(...);

次に、Webサービスの各メソッドでdataSource.getConnection()、接続を取得するために呼び出します。内部的には、別の回答で提案されているように、接続プールを使用します。

于 2012-09-13T11:37:21.037 に答える