Sonarツールを使用して、Sonarルールを満たしていた既存のアプリケーションでコーディング標準を分析しています:Connectionのオブジェクトconnが原因の「リソースを閉じる」。finallyブロックのメソッドを使用して他のクラスの接続オブジェクトを閉じる
私たちが知っているように、conn.close();
を使用してConnectionオブジェクトを閉じる必要がありますが、アプリケーションでは接続を解放するメソッドが呼び出されました。
以下は、最後にブロック内のreleaseConnection()
という名前のメソッドでConnectionオブジェクトが閉じられているコードです。
finally {
try {
OtherClass.releaseConnection(conn); // Line: 50 Here is the call to close the conn
}
catch (SomeException se) {
LOGGER.error(" Exception while releaseConnection in add() method : ",se);
}
}
閉会方法:
public static void releaseConnection(Connection conn) throws DBException {
if (conn!=null) {
try {
if (!conn.isReadOnly()){
conn.commit();
}
} catch (SQLException e) {
LOGGER.error("Error while commiting the connection. " + e);
rollback(conn);
throw new SomeException(e,SOMETHING);
} finally {
try {conn.close();} catch (SQLException se){
LOGGER.error("releaseConnection() Error " + se);
}
}
}
}
は、ここに私の懸念のリストです:
この既存の実装が正しいことをやっていると(私が間違っているなら、私を修正して)それでありますソナーの提案に従ってコードを変更する必要があります。
本当に私はソナーの提案に従う必要がある場合、何が最善の方法でなければならないのですか?
UPDATE:
どのように私はちょうど/バイパスにいくつかの特定のコードまたはルールを無視して、私の上記のコードに適用することができます。 Line:50を無視したいと言いますが、どうすればいいですか?
私は上記のコードを混乱させたくありませんが、私はこれを無視して問題を少なくしたいと考えています。前もって感謝します。
返信いただきありがとうございます!だから、コードのこの特定の部分を無視する方法がありますか、またはソナーをfinallyブロックで呼び出されたメソッド{releaseConnection()}に移動させることができます。 Sonarの予期せぬ邪魔な制限です。 @ben – MonsterJava
この非常に簡単な回避策はありません。問題を偽陽性としてマークする必要があります。動作に関しては、実行フローをエミュレートすることは例外的に非常に複雑な問題です。私たちは毎日エンジンを改善するよう努めています。 – benzonico
素早い応答ありがとう@ben。あなたはオプション "私は偽陽性として問題をマークする必要があります"と私を助けることができます、あなたはソナーがこのタイプのオプションを提供することを意味しましたか? – MonsterJava