2012-04-20 4 views
14

내가 사용 JNDI를 통해 데이터 소스를로드 해요 : 나는 이클립스 (인디고 SR을 실행하면알 수없는 경우 NullPointerException() 라인 : 96

JDK 1.6.0_31 톰캣 6.0.30

2) 디버거에서 깨지기 시작합니다 :

Daemon System Thread [Finalizer] (Suspended (exception NullPointerException)) 
    JdbcOdbcDriver.finalize() line: 96 
    Finalizer.invokeFinalizeMethod(Object) line: not available [native method] 
    Finalizer.runFinalizer() line: 83 
    Finalizer.access$100(Finalizer) line: 14  
    Finalizer$FinalizerThread.run() line: 160 

저는이 문제를 일으키는 원인이 무엇인지에 관해 정말 망각하고 있습니다. 또한, 그것은 내 처형에 전혀 영향을 미치지 않는 것처럼 보입니다. 내 데이터 소스가 초기화되고 정상적으로 사용되며 예상 한 모든 결과를 얻고 있습니다. 내가 읽은 바에 따르면 이것은 오라클 드라이버 문제와 관련이있을 것입니다.

을 myApp \ META-INF \의 context.xml에

<Resource name="jdbc/conn" auth="Container" 
    type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" 
    url="@[email protected]" username="user" password="@[email protected]" 
    initialSize="4" maxActive="8" 
    defaultAutoCommit="false" 
    accessToUnderlyingConnectionAllowed="true" 
    testOnReturn="true" 
    validationQuery="select 1 from dual" 
    poolPreparedStatements="false" 
    connectionProperties="SetBigStringTryClob=true" 
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
/> 

을 myApp \ WEB-INF \ web.xml을

<resource-ref> 
    <description>My DataSource</description> 
    <res-ref-name>jdbc/conn</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
+3

사람들은 참고 자료로 JdbcOdbcDriver [소스 코드] (http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/jdbc/odbc/JdbcOdbcDriver.java.html)를보고 싶을 수도 있습니다. – adarshr

+0

@adarshr 링크는 스팸/낚시 (또는 컴퓨터가 감염 되었습니까?)를 가리키고있는 것 같습니다. 나는 [another link] (http://j6a.ru/_jdbc_odbc_driver_8java_source.html)를 발견했다. – Matthieu

+0

어떤 버전의 Oracle JDBC 드라이버를 사용합니까? –

답변

3

결국이 예외는 실행을 종료하지 않으므로 무시하게됩니다. 정확한 원인을 알지 못하더라도 치명적이지는 않습니다.

+1

나는 그것에 대한 설명을 찾았 으면 좋겠지 만, 아무도 잘 이해하지 못하는 것 같습니다. – Periback

+1

finalization 메서드에서 무시 된 예외가 메모리 누수로 이어질 것이므로 이것은 매우 위험한 답변입니다. –

+0

@ Gregory.K, 동의합니다. 그러나 알 수 있듯이 아무도 응답하지 않았고 실제 해결책을 찾지 못했습니다. –

0

난 당신이 초기화 전화를 놓치고 가정 것이다(). NPE를 OdbcApi로 수정해야합니다.

-1

나는 이것이 이전에 대답이라고 생각했다. 내가 틀렸어.

마지막으로 알아 냈습니다. 데이터베이스에 의해 지원되는 관리 Bean이 있습니다. 이 관리 Bean에 주석이 달렸습니다 @eager

이클립스에서 서버를 시작하면 서버가 인스턴스화되고 도구가 데이터베이스로 이동하여 데이터를 가져옵니다. 데이터베이스 bean (널 포인터 예외)의 메소드에서 예외가 발생하여 결과적으로 데이터베이스에 대한 연결이 열린 채로 남아 있습니다.

어떻게 든 .metadata 폴더가 손상되어 손상되었습니다. 나는 Eclipse를 종료했다. 그런 다음 Eclipse 작업 공간으로 이동하여 .metadata 폴더를 내 바탕 화면에 복사하여 안전한 복사본을 만든 다음 작업 영역에서 삭제했습니다.

Eclipse를 다시 시작했습니다. 프로젝트가 없습니다. 가져 오기> 파일 시스템을 사용하여 다시 가져 왔습니다.

프로젝트 속성 아래의 빌드 경로를 수정해야하고 Window> Preferences에서 Tomcat 홈을 재설정해야했습니다. 빌라,이 성가신 문제를 해결했습니다.

그게 문제의 원인입니다. 희망이 사람을 도움이됩니다.

관련 문제