2014-09-03 5 views
0

내 응용 프로그램에서 세션 팩토리를 사용하여 세션을 만듭니다. 이 검사를 수행 할 때 FindBug는 "sessionFactory가 dereferenced로 보장 된 null입니다"라는 경고를 표시합니다. 어떻게 해결할 수 있을까요?sessionFactory를 보여주는 findbugs가 참조 해제 된 것으로 보장 된

if (!sessionFactory.isClosed()) { 
      session.close(); 
      sessionFactory.close(); 
     } 
+1

전체 코드를 게시하십시오. http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF – m4rtin

답변

2

전체 코드는 것이다 probally이

SessionFactory sessionFactory = null; 
Session session = null; 

try{ 
    do some stuff 
catch(Exception e){ 

} finally { 
    if (!sessionFactory.isClosed()) { 
      session.close(); 
      sessionFactory.close(); 
     } 
} 

Findbugs 같은 당신의 변수로 시작하는 경우는 null이며, 당신의 try 블록에서 예외가있는 경우, 변수가 없을 수도 있다고 본다 본다 초기화되었습니다. 따라서 오류가 발생합니다. 그 널 검사 추가함으로써 쉽게 해결 :

if (sessionFactory!= null && !sessionFactory.isClosed()) { 
      if(session != null){ 
      session.close(); 
      } 
      sessionFactory.close(); 
     } 
+0

감사합니다. 감사합니다. 경고 메시지가 사라졌습니다. @ user3227602 – Killer

+0

하지만 프로그램을 실행하면 "세션이 이미 닫혔습니다"라는 예외가 발생합니다. 내가 "session.close();" 잘 작동합니다. 하지만 내 애플 리케이션에서는 세션을 명시 적으로 닫지 않습니다. 세션을 생성하기 위해 Hibernate SessionFactory를 사용하고 있습니다. – Killer

0

Findbug

는 보장 실행되는 경우에 값이 시점에서 널 있다는 것을 예외로 성명 또는 지점이 있음을 나타내고, 그리고 그 역 참조가 보장되는 값 (런타임 예외를 포함하는 순방향 경로 제외).

가능한 시나리오/유스 케이스는 다음과 같습니다.

1. 분기에 코드가 존재하고 분기에서 객체를 초기화하고 해당 객체에 null 체크없이 액세스하는 것으로 가정합니다. user3227602 코드를 보여줍니다

으로, 당신은 NULL 개체로 sessionFactory에 객체를 선언하고 시도 - 캐치 마침내 블록에 초기화했다.

초기화하기 전에 예외가 발생하면 (일부 처리로 인해) 흐름이 catch-finally 블록으로 들어오는 시나리오를 상상해보십시오. 따라서 sessionFactory는 여전히 NULL 객체로만 선언되었습니다. 따라서 null 체크이 좋습니다.

2.) 일부 문장 (if-elseif-else)이 코드에 존재하고 해당 블록 (block, elseif 블록 또는 else 블록 인 경우)에서 객체를 초기화하고 널 체크). 조건 1의 결과가 거짓 다음 sessionFactory의 객체 인 경우

if(condition1) 
{ 
     //blah blah 
     sessionFactory = new Configuration().configure().buildSessionFactory(); 
     //blah blah 
} 
else 
{ 
     //blah blah 
} 
if (!sessionFactory.isClosed()) { 
     session.close(); 
     sessionFactory.close(); 
} 

initilize 않을 것입니다. 이렇게하려면 NULL 확인이 필요합니다.