Findbugs 및 PMD의 Ruleset을 사용하여 SonarQube (버전 4.3.2)를 설정했습니다. Connection 객체 (java.sql.Connection)를 생성하는 클래스가있는 애플리케이션이 있으며이 객체는 ArrayDescriptor.createDescriptor 메소드에 연결 객체를 명백하게 전달합니다. ArrayDescriptor 클래스는 내부 Oracle 클래스 (oracle.sql.ArrayDescriptor)입니다. 이제 코드는 연결 객체를 사용하여 다른 작업을 수행하지 않습니다. 코드가 누수 연결로 이어질 수있는 메서드에 전달하기 위해 만든 연결을 닫지 않았습니다 (필자의 지식). 연결이 닫힌 곳에서 (다행히!) finally 블록에서는 완료되지 않습니다. 이제 Findbugs의 이상적인 규칙이이를 잡아 냈습니다. 내 다음 활성 규칙을 understandting에서 이 침해되었다고한다 :Findbugs가 데이터베이스 연결을 감지하지 못하는 Sonar 방식
- 나쁜 연습 - 방법은 데이터베이스 리소스를
- 나쁜 관행을 닫 실패 할 수 있습니다 - 방법 예외
- 나쁜 연습에 데이터베이스 리소스를 닫 실패 할 수 있습니다 - 방법은 예외
에 스트림을 닫 실패 할 수 있습니다 그러나이 중 어느 것도 코드에 대해보고되지 않았다 - 방법은 스트림을
public void nameOfMethod() throws SQLException {
try {
InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup("DS");
Connection connnew = ds.getConnection();
}
이이 closeResource가보고 만 연결 객체가 메소드 레벨의 변수, 즉 뭔가처럼 어디를 사용할 때 CloseResource : 키 pmd의 : 저장소 -
우리는 다음 규칙을 포함하는 PMD 플러그인을 설치
그러나 Connection 객체가 클래스 수준 변수 인 경우에도이 규칙은 문제를 감지하지 못합니다. (Connection을 클래스 수준 변수로 유지하는 것은 좋은 습관이 아니며, 사용하지 않는 것에 대해 교육하려고 노력하고 있지만, 연결을 끊는 것이 이상적으로 감지되어야한다고 생각합니다.)
그러므로 내 질문 is : 1. 내 기대는 위의 모든 규칙이 a. Conenction 객체가 생성되고 닫히지 않거나 Connection 객체가 생성되어 내부 메소드 (ArrayDescriptor.createDescriptor)로 전달됩니다. c) conenction이 생성되었지만 finally 블록에서 닫히지 않았습니다. 이 예상치가 잘못 되었습니까? 2. 기대치가 맞다면, 왜 Findbugs가 그것을 탐지하지 못합니까? 3. PMD가 메소드 레벨 변수에 대해서만이를 감지하거나 다른 문제가있는 이유는 무엇입니까?
감사합니다.
SonarQube 버전 - 4.3.2
정보 : 플러그인 버전 Checkmarx - 7.1.2-3.0.1 Findbugs - 2.1 JaCoCo - 2.1 자바 - 2.1 오징어 Java 용 - 2.1 확실한 - 2.1 웹 - 당신을 도움이된다면 2.1