2010-09-01 23 views
1

Spring et Apache J'utilise le BasicDataSource Apache pour les DBCP communes et une piscine connexion:JDBC reconnectez problèmes avec pilote Teradata à l'aide DataSource

org.apache.commons.dbcp.BasicDataSource 

et sa gestion par Spring:

org.springframework.jdbc.datasource.DataSourceTransactionManager 

Bien que en utilisant cette combinaison avec le pilote Teradata JDBC si ma base de données tombe en panne ou il y a un problème de réseau, je reçois l'erreur suivante:

08S01 804 : I/O Error, Socket closed. Packet stream write error

Ce qui reflète la situation correctement, mais le problème est avec la reconnexion. Lorsque l'erreur est corrigée physiquement ou lorsque DB réapparaît et que mon programme tente de l'interroger, je finis toujours par obtenir la même erreur pendant une certaine période, qui varie par exemple. 20 minutes, heures, jamais. Le problème disparaît lorsque je redémarre ma machine virtuelle Java ou que vous modifiez la chaîne de connexion, par exemple. utilise l'adresse IP au lieu du nom d'hôte.

Existe-t-il un paramètre dans DataSource ou le gestionnaire de transactions de Spring qui peut le corriger? ou peut-être un paramètre TCP/IP?

Répondre

1

Je regarde dans les paramètres Apache DBCP:

http://commons.apache.org/dbcp/configuration.html

SELECT 1 peut être une requête de validation efficace. Test au retour doit être défini.

Je demande également qu'il supprime et connecte les connexions abandonnées afin que vous puissiez voir ce qui se passe.

+0

Nous utilisons déjà la commons pool de connexion (j'ai édité cela dans la question, merci) Ceci fonctionne sur la JVM simple sous un Java Service Wrapper (http://wrapper.tanukisoftware.com) pour l'exécuter en tant que service Windows/démon Unix. –

+0

Je les ai vérifiés. Il y a des paramètres pour l'inactivité, attendez mais rien pour l'erreur ou reconnectez –

1

Voyez-vous cette erreur sur Windows et Linux? Si vous ne le voyez que sous Linux, je vous recommande de consulter le Guide Teradata JDBC. Lors de la connexion, ils utilisent un algorithme qui est lent sur la version Linux de la JVM. Essayez d'ajouter la ligne suivante à Teh début de votre commande de service pour voir si vous obtenez une amélioration

-Djava.security.edg=file:/dev/./urandom 

Note: ceci a été pris de la partie de dépannage du Guide de l'utilisateur du pilote JDBC Teradata

+0

Nous avons observé ce problème sur des bases de données pour Linux et Windows. Toutefois, le système sur lequel la machine virtuelle Java est exécutée est Windows. –