2017-06-20 36 views
1

我正在測試聲納以確保關閉數據庫連接。爲什麼sonarqube不會爲未關閉的連接生成問題?

我正在執行eclipse的嵌入maven版本3.3.9的maven目標「sonar:sonar」。 sonarqube 6.2與sonar-java-plugin-4.10.0.10260.jar。

有了這個代碼

package servlet; 

import java.io.IOException; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

import javax.naming.InitialContext; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.sql.DataSource; 

public class STestClosingResources extends HttpServlet{ 

    private static final long serialVersionUID = 1L; 

    public final void service(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException 
    { 
     Connection con = null; 
     ResultSet rsGet = null; 
     PreparedStatement psGet = null; 
     try { 
      InitialContext ctx = new InitialContext(); 
      DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/testci"); 
      con = ds.getConnection(); 

      psGet = con.prepareStatement("SELECT * FROM TEST"); 
      rsGet = psGet.executeQuery(); 
      int counter = 0; 
      while (rsGet.next()) { 
       counter++; 
       System.err.println(counter); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (rsGet != null) { 
        rsGet.close(); 
       } 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
      rsGet = null; 
      try { 
       if (psGet != null) { 
        psGet.close(); 
       } 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
      psGet = null; 
     } 
    } 
} 

我不明白這個問題,我預計:

關閉在一個 「終於」 條款這種 「連接」。

爲什麼?

非常感謝您

回答

1

負責分析Java代碼,並發現這個問題不承認DataSource.getConnection返回Connection需要被關閉SonarJava分析。我創建了修復它的票https://jira.sonarsource.com/browse/SONARJAVA-2355

+0

好的,謝謝@Tibor – elamas

+0

嗨@Tibor,我看到版本4.11的Java插件已經發布。我已經測試過它,並且因爲沒有使用ds.getConnection()關閉連接而引發了一個問題。非常感謝您的幫助。 – elamas

相關問題