2013-07-13 4 views
3

DBCP 대신 연결 풀링으로 BoneCP을 실험하고 있습니다. 내 런타임 클래스 경로에 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); 

이클립스 (주노)

자원 누출 : 'connectionPool'

폐쇄되지 않습니다 나에게 컴파일러 경고를주고있다

그런 다음 "@SuppressWarnings 'resource'을 newConnectionManager에 추가합니다."(newConnectionManager()은이 클래스를 참조합니다).

어떻게 가능합니까?!?! Eclipse는 BoneCP 오브젝트에 대해 어떤 점을 알고 있으며, 닫아야한다는 것을 어떻게 알 수 있습니까? BoneCP 라이브러리와 함께 제공되는 "맞춤 경고"입니까? 그렇다면 다운 스트림 개발자에게 라이브러리를 올바르게 사용하지 않는다는 경고를 내 프로젝트에 코드에 추가하거나 주석을 추가하는 방법은 무엇입니까? 미리 감사드립니다! 인터페이스 java.io.Closeable (JDK 1.7 이후), 외부 자원을 나타내는 것으로 간주하고 java.lang.AutoCloseable (JDK 1.5 이상)을 구현해야

+0

BoneCp 용 Javadoc이 있습니까? – NINCOMPOOP

+0

나는 똑같은 짓을했지만 재현 할 수는 없다. – johnchen902

답변

1

경고는이 명령에 의해 발생합니다 :

connection = connectionPool.getConnection(); 

는 판단 할 수없는 경우 자바 7. 이클립스는이 경고를 생성하기 때문에 java.lang.AutoCloseable를 구현하는 유형 java.sql.Connection의 객체를 반환 getConnection() 방법 여부 중 하나를 구현하는 자원 java.io.Closeable 또는 java.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

클래스 더 이상 필요없는 경우 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() 메소드가 있습니다. 어떻게됩니까? –