3

DBCPに代わる接続プーリングとしてBoneCPを試しています。をランタイム クラスパスに追加しbonecp-0.8.0rc-1.jar、コードをサンプル ページからテスト ドライバーにコピー アンド ペーストしました。

Connection connection = null;
BoneCP connectionPool;
try {
    Class.forName(config.getDatabaseLogger().getJDBCDriver());

    BoneCPConfig boneConfig = configureBoneCP(config);

    connectionPool = new BoneCP(boneConfig);

    connection = connectionPool.getConnection();    // fetch a connection
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

次の行で:

connectionPool = new BoneCP(boneConfig);

Eclipse (Juno) からコンパイラの警告が表示されます:

リソース リーク: 'connectionPool' は決して閉じられません

次に、「 @SuppressWarnings 'resource' を newConnectionManager に追加する」オプションが表示されます(newConnectionManager()これが含まれているクラスを参照します)。

これはどのように可能ですか?!?! Eclipse はオブジェクトについてどのように認識し、BoneCPオブジェクトを閉じる必要があることをどのように認識しますか? これは、BoneCP ライブラリに同梱されている「カスタム警告」のようなものですか? もしそうなら、自分のプロジェクトにコードを追加/注釈を付けて、下流の開発者が私のライブラリを正しく使用していないことを警告するにはどうすればよいですか? 前もって感謝します!

4

2 に答える 2

1

警告は、次のステートメントによって発生します。

connection = connectionPool.getConnection();

このメソッドは、Java 7 以降のjava.lang.AutoCloseableを実装するタイプjava.sql.ConnectiongetConnection()のオブジェクトを返します。 Eclipse は、いずれかを実装するリソースまたは可能なすべてのコード パスによって閉じられるリソースを判別できない場合に、この警告を生成します。java.io.Closeablejava.lang.AutoCloseable

于 2013-07-13T16:34:58.500 に答える