2013-07-13 42 views
3

我正在試驗BoneCP作爲DBCP的替代連接池。我加入了bonecp-0.8.0rc-1.jar到我的運行時類路徑,並從他們的榜樣頁複印正將代碼粘貼到我的測試驅動程序:如何在Eclipse中進行自定義編譯器警告?

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(麥浚龍)是給我一個編譯器警告:

資源泄漏: '連接池' 是永遠不會關閉

它然後給我一個選項,以「Add @ SuppressWarnings'資源'newConnectionManager」(newConnectionManager()引用它所包含的類)。

這怎麼可能?!?! Eclipse如何知道關於BoneCP對象的任何信息,以及它如何知道它必須關閉?這是一種與BoneCP庫一起提供的「自定義警告」嗎?如果是這樣,我怎麼可以添加/註釋代碼到我自己的項目中,以幫助警告下游開發者他們沒有正確使用我的庫?提前致謝!

+0

您是否擁有Javadoc for BoneCp? – NINCOMPOOP

+0

我做了同樣的事情,但我無法複製它。 – johnchen902

回答

1

警告由該語句引起的:

connection = connectionPool.getConnection(); 

getConnection()返回java.sql.Connection類型的對象,它實現java.lang.AutoCloseable自爪哇7. Eclipse的生成此警告時它不能確定該方法是否它實現任一個資源java.io.Closeablejava.lang.AutoCloseable被所有可能的代碼路徑關閉。

1
How does Eclipse know anything about a BoneCP object, 
            and how does it know that it must be closed? 

Docs of eclipse says

類實現接口java.io.Closeable(自JDK 1.5)和java.lang.AutoCloseable(自JDK 1.7)被認爲代表外部資源,這應該使用方法close()關閉時,不再需要它們。

Eclipse Java編譯器能夠分析使用這種類型的代碼是否符合此策略。

對象不直接表示操作系統資源。如果包裝的資源已關閉,則包裝不需要關閉。相反,如果一個包裝被關閉,這將包括關閉包裝的資源。分析中有第二個白名單用於檢測包裝資源,並將識別底層實際資源是否將直接或通過包裝間接關閉。任何一個人都可以放棄關於資源泄漏的警告。 白名單包含來自java.io,java.util.zip,java.security,java.beans和java.sound.sampled的類。

你BoneCP CLASSE實現接口了java.io.Serializable,這可能是原因。

+1

[BoneCP](http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCP.html)沒有實現這些接口。 – johnchen902

+0

但[BoneCP](http://jolbox.com/bonecp/downloads/site/apidocs/index.html)沒有實現它們中的任何一個? – NINCOMPOOP

+0

'Connection'接口呢?它有一個方法close()..怎麼樣? –