2012-04-20 32 views
14

Tôi đang tải các nguồn dữ liệu thông qua JNDI sử dụng:Unknown NullPointerException trong JdbcOdbcDriver.finalize() dòng: 96

JDK 1.6.0_31 Tomcat 6.0.30

Khi tôi khởi động Eclipse (Indigo SR 2) trình gỡ lỗi, tính năng này vi phạm:

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 

Tôi thực sự không biết gì về điều này. Hơn nữa, nó dường như không ảnh hưởng đến thực hiện của tôi cả. Nguồn dữ liệu của tôi được khởi tạo và sử dụng như bình thường và tôi nhận được tất cả các kết quả mà tôi mong đợi. Từ những gì tôi đã đọc, điều này có thể liên quan đến một vấn đề trình điều khiển Oracle?

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

Mọi người có thể muốn xem mã nguồn JdbcOdbcDriver (http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/jdbc/odbc/JdbcOdbcDriver.java.html) để tham khảo. – adarshr

+0

@adarshr Liên kết mà bạn đưa ra có vẻ như trỏ đến spam/câu cá (hoặc máy tính của tôi bị nhiễm?). Tôi tìm thấy [liên kết khác] (http://j6a.ru/_jdbc_odbc_driver_8java_source.html) với nó. – Matthieu

+0

Bạn sử dụng phiên bản Oracle JDBC Driver nào? –

Trả lời

3

Cuối cùng tôi đã bỏ qua ngoại lệ này vì nó không kết thúc thực hiện. Trong khi tôi không biết chính xác nguyên nhân, nó dường như không gây tử vong.

+1

Tôi ước gì bạn đã tìm được lời giải thích cho nó, nhưng dường như không ai hiểu rõ nó .. – Periback

+1

Đây là câu trả lời rất có hại vì các ngoại lệ bị bỏ qua trong phương thức hoàn thiện dẫn đến rò rỉ bộ nhớ. –

+0

@ Gregory.K, tôi đồng ý, nhưng như bạn có thể thấy, không ai khác trả lời và tôi chưa bao giờ tìm thấy giải pháp thực sự. –

0

tôi sẽ giả sử bạn đang bỏ lỡ một cuộc gọi để khởi tạo(). Điều đó sẽ sửa một NPE thành OdbcApi.

-1

Tôi đã từng nghĩ đây là câu trả lời. Tôi đã sai.

Cuối cùng tôi đã tìm ra. Tôi đã có một số đậu được quản lý đã được hỗ trợ bởi một cơ sở dữ liệu. Các bean được quản lý này đã được chú thích @eager

Khi máy chủ khởi động ứng dụng từ nhật thực, chúng được khởi tạo và công cụ đã đi đến cơ sở dữ liệu để lấy dữ liệu. Tôi đã có một ngoại lệ được ném trong phương thức từ bean cơ sở dữ liệu (một ngoại lệ con trỏ null), và kết quả là, kết nối đến cơ sở dữ liệu đã được mở.

Bằng cách nào đó, thư mục .metadata đã bị lỗi và bị hỏng. Tôi đã thoát khỏi Eclipse. Sau đó, tôi đã đi đến không gian làm việc Eclipse và sao chép thư mục .metadata vào máy tính để bàn của tôi để có một bản sao an toàn, sau đó tôi đã xóa nó trong vùng làm việc.

Tôi đã bắt đầu lại Eclipse. Không có dự án nào. Tôi đã nhập chúng trở lại bằng cách sử dụng Nhập> Hệ thống tệp.

Tôi phải sửa đường dẫn xây dựng trong thuộc tính dự án và trong Window> Preferences, tôi phải đặt lại Tomcat Home. Thì đấy, đã thoát khỏi vấn đề siêu khó chịu này.

Đó là nguyên nhân của sự cố. Hy vọng điều này sẽ giúp một ai đó.

Các vấn đề liên quan