Получение драйвера TDS — java.lang.NullPointerException. это исключение не соответствует

Я получаю исключение, когда метод вызывается из 3 или 4 потоков. Этот метод получает соединение с базой данных внутри метода и заполняет некоторые значения из БД, а затем соединение (соединение, набор результатов и prepareStatement) корректно закрывается только внутри метода. Все еще получаю исключение.

Thread_1 - вызван метод abc(). соединение открывается и закрывается внутри метода.
Thread_2 - вызывается метод abc(). соединение открывается и закрывается внутри метода.
Thread_3 - вызывается метод abc(). соединение открыто и закрыто внутри метода.

Я не понимаю, почему возникает исключение, хотя соединение открывается и закрывается правильно. База данных — MS SQL, Java — 1.6, apache-tomcat 6.

Главное, что это непоследовательно, иногда возникает исключение, а иногда нет.

1. Exception -
com.inet.tds.am: 
[TDS Driver]java.lang.NullPointerException                                                                                                                                                
        at com.inet.tds.aj.a(Unknown Source)                                                                                                                                                               
        at com.inet.tds.r.g(Unknown Source)                                                                                                                                                                
        at com.inet.tds.r.executeQuery(Unknown Source)                                                                                                                                                     
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)


2. Exception -
java.sql.SQLException: Connection is closed.                                                                                                                                                               
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.checkOpen(PoolingDataSource.java:175)                                                                                  
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:301)

Пожалуйста, сообщите об этом.


person Santosh    schedule 23.02.2012    source источник


Ответы (2)


Соединение с базой данных, вероятно, не является потокобезопасным. Хотя из трассировки стека видно, что вы пытаетесь использовать пул соединений (dbcp), возможно, он не настроен должным образом. Если вы обновите вопрос, указав больше своей конфигурации и код, в котором вы делаете вызов БД, возможно, кто-то сможет обнаружить проблему.

person artbristol    schedule 24.02.2012
comment
Я согласен с этим ответом. Ваше приложение не является потокобезопасным, и где-то у вас может возникнуть состояние гонки. - person tom; 25.02.2012

Пожалуйста, найдите файл конфигурации/контекста -

 <Resource name="jdbc/mysqlDS" auth="Container" type="javax.sql.DataSource"
            driverClassName="com.inet.tds.TdsDriver"
            url="jdbc:inetdae7://194.0.0.1:1433/july"
            username="team" password="!team!"
            maxActive="50" maxIdle="2" maxWait="10000"
            removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
person Santosh    schedule 24.02.2012
comment
Вы должны отредактировать исходный вопрос и добавить туда эту информацию. Таким образом, вся предоставленная информация централизована. - person tom; 25.02.2012