クラス SingleConnectionDataSource

実装されたすべてのインターフェース:
AutoCloseableSEWrapperSECommonDataSourceSEDataSourceSEDisposableBeanSmartDataSource

public class SingleConnectionDataSource extends DriverManagerDataSource implements SmartDataSource, AutoCloseableSE, DisposableBean
使用後に閉じられない単一の JDBC 接続をラップする SmartDataSource の実装。明らかに、これはマルチスレッド対応ではありません。

シャットダウン時に、誰かが close() メソッドを介して基礎となる接続を閉じる必要があることに注意してください。SmartDataSource に対応している(たとえば DataSourceUtils.releaseConnection を使用している)場合、クライアントコードは接続ハンドルで close を呼び出しません。

永続化ツールを使用する場合など、プールされた接続を想定してクライアントコードが close() を呼び出す場合は、"suppressClose" を "true" に設定します。これにより、物理的な接続ではなく、クローズ抑制プロキシが返されます。

これは主にテスト用です。例: DataSource で動作することを期待するコードについて、アプリケーションサーバーの外で簡単にテストできます。DriverManagerDataSource とは対照的に、常に同じ接続を再利用し、物理接続の過剰な作成を回避します。

作成者:
Rod Johnson, Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • SingleConnectionDataSource

      public SingleConnectionDataSource()
      Bean スタイルの構成のコンストラクター。
    • SingleConnectionDataSource

      public SingleConnectionDataSource(StringSE url, StringSE username, StringSE password, boolean suppressClose)
      指定された標準 DriverManager パラメーターで新しい SingleConnectionDataSource を作成します。
      パラメーター:
      url - DriverManager へのアクセスに使用する JDBC URL
      username - DriverManager へのアクセスに使用する JDBC ユーザー名
      password - DriverManager へのアクセスに使用する JDBC パスワード
      suppressClose - 返された接続がクローズ抑制プロキシまたは物理接続である場合
      関連事項:
    • SingleConnectionDataSource

      public SingleConnectionDataSource(StringSE url, boolean suppressClose)
      指定された標準 DriverManager パラメーターで新しい SingleConnectionDataSource を作成します。
      パラメーター:
      url - DriverManager へのアクセスに使用する JDBC URL
      suppressClose - 返された接続がクローズ抑制プロキシまたは物理接続である場合
      関連事項:
    • SingleConnectionDataSource

      public SingleConnectionDataSource(ConnectionSE target, boolean suppressClose)
      指定された接続で新しい SingleConnectionDataSource を作成します。
      パラメーター:
      target - 基になるターゲット接続
      suppressClose - Connection を close() 呼び出しを抑制する Connection でラップする必要がある場合 (プールされた接続を予期しているが、SmartDataSource インターフェースを知らないアプリケーションで、通常の close() の使用を可能にする)
  • メソッドの詳細

    • setSuppressClose

      public void setSuppressClose(boolean suppressClose)
      返される接続がクローズ抑制プロキシである必要があるか、物理接続である必要があるかを指定します。
    • isSuppressClose

      protected boolean isSuppressClose()
      返された接続がクローズ抑制プロキシか物理接続かを返します。
    • setRollbackBeforeClose

      public void setRollbackBeforeClose(boolean rollbackBeforeClose)
      共有接続を閉じる前に明示的にロールバックするかどうかを指定します (自動コミットモードでない場合)。

      これは、テストシナリオの Oracle JDBC ドライバーに推奨されます。

      導入:
      6.1.2
    • isRollbackBeforeClose

      protected boolean isRollbackBeforeClose()
      共有接続を閉じる前に明示的にロールバックする必要があるかどうかを返します (自動コミットモードでない場合)。
      導入:
      6.1.2
    • setAutoCommit

      public void setAutoCommit(boolean autoCommit)
      返された接続の "autoCommit" 設定をオーバーライドするかどうかを指定します。
    • getAutoCommitValue

      @Nullable protected BooleanSE getAutoCommitValue()
      返された Connection の "autoCommit" 設定をオーバーライドする必要があるかどうかを返します。
      戻り値:
      "autoCommit" 値、または何も適用されない場合は null 
    • getConnection

      public ConnectionSE getConnection() throws SQLExceptionSE
      クラスからコピーされた説明: AbstractDriverBasedDataSource
      この実装は、この DataSource のデフォルトのユーザー名とパスワードを使用して getConnectionFromDriver に委譲します。
      次で指定:
      インターフェース DataSourceSEgetConnection 
      オーバーライド:
      クラス AbstractDriverBasedDataSourcegetConnection 
      例外:
      SQLExceptionSE
      関連事項:
    • getConnection

      public ConnectionSE getConnection(StringSE username, StringSE password) throws SQLExceptionSE
      カスタムのユーザー名とパスワードを指定しても、単一の接続では意味がありません。同じユーザー名とパスワードが与えられた場合、単一の接続を返します。それ以外の場合は SQLException をスローします。
      次で指定:
      インターフェース DataSourceSEgetConnectionSE 
      オーバーライド:
      クラス AbstractDriverBasedDataSourcegetConnection 
      例外:
      SQLExceptionSE
      関連事項:
    • shouldClose

      public boolean shouldClose(ConnectionSE con)
      これは単一の接続です。「プール」に戻るときに接続を閉じないでください。
      次で指定:
      インターフェース SmartDataSourceshouldClose 
      パラメーター:
      con - 確認する接続
      戻り値:
      指定された接続を閉じるかどうか
      関連事項:
    • close

      public void close()
      基になる接続を閉じます。この DataSource のプロバイダーは、適切なシャットダウンに注意する必要があります。

      このクラスは AutoCloseableSE を実装しているため、try-with-resource ステートメントとともに使用できます。

      次で指定:
      インターフェース AutoCloseableSEclose 
      導入:
      6.1.2
    • destroy

      public void destroy()
      基になる接続を閉じます。この DataSource のプロバイダーは、適切なシャットダウンに注意する必要があります。

      この Bean は DisposableBean を実装しているため、Bean ファクトリは Bean の破棄時にこれを自動的に呼び出します。

      次で指定:
      インターフェース DisposableBeandestroy 
    • initConnection

      public void initConnection() throws SQLExceptionSE
      DriverManager を介して基になる接続を初期化します。
      例外:
      SQLExceptionSE
    • resetConnection

      public void resetConnection()
      基礎となる共有接続をリセットして、次のアクセスで再初期化します。
    • prepareConnection

      protected void prepareConnection(ConnectionSE con) throws SQLExceptionSE
      公開する前に、所定の接続を準備します。

      デフォルトの実装では、必要に応じて自動コミットフラグが適用されます。サブクラスでオーバーライドできます。

      パラメーター:
      con - 準備する接続
      例外:
      SQLExceptionSE
      関連事項:
    • closeConnection

      protected void closeConnection(ConnectionSE con)
      基礎となる共有接続を閉じます。
      導入:
      6.1.2
    • getCloseSuppressingConnectionProxy

      protected ConnectionSE getCloseSuppressingConnectionProxy(ConnectionSE target)
      すべてのメソッド呼び出しを委譲するプロキシを使用して、指定された接続をラップしますが、クローズ呼び出しを抑制します。
      パラメーター:
      target - ラップする元の接続
      戻り値:
      ラップされた接続