1

接続プールを処理する場合、通常、次のコードがあります。

connection c = pool.borrow();
try {
    business-logic-using-connection(c);
}
catch(connectionException e) {
    connectionBad = true;
} 
finally{
    if (connectionBad) {
        pool.evict(c);
    } else {
       pool.return(c);
    }
 }

問題は、このボイラープレートコードを単純にして、次のようなことができるようにする方法です。

getConnectionAndDoWork(pool, business-logic-code)

ビジネスロジックをプラグインでき、同じ接続管理コードをあちこちで繰り返す必要はありません。doWorkWithConnection1つの方法は、接続を取得して何らかの作業を行うようなビジネスロジックコードのインターフェイスを作成することです。ただし、これにより、ビジネスロジックコードが返すものが制限されます。

Javaでそれを行うためのより良い方法はありますか?

4

2 に答える 2

2

Spring がプログラムによるトランザクション管理に使用するようなコールバック パターンを使用します。

interface PooledConnectionCallback<T> {
  T doWithConnection(Connection c);
}

Pool pool = new Pool(poolParams);
Integer returnedValue = pool.execute(
  new PooledConnectionCallback<Integer>() {
    public Integer doWithConnection(Connection c) {
      int someReturnValue = businessLogicUsingConnection(c);
      return someReturnValue;
    }});

メソッドには、Pool#execute例外の処理とクリーンアップに必要なボイラープレート コードを含めることができます。

于 2012-07-21T05:52:39.573 に答える
0

Spring を使用している場合は、JdbcTemplate または NamedParameterJdbcTemplate の使用を検討してください。

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html

Spring を使用していない場合でも、同じ基本的なテンプレート メソッド パターンを使用できます。グーグル「テンプレートメソッド」だけ。それに関する記事はたくさんあります。

于 2012-07-21T06:06:43.907 に答える