2010-11-17 21 views
2

Supposons qu'un code jdbc exécute certaines opérations CRUD. Maintenant, dans un scénario particulier, il y avait un verrou de ligne et la session devenait bloquante pour les autres sessions de base de données.La suppression d'une session au niveau du serveur de la base de données ferme-t-elle également la connexion et rend l'objet de connexion jdbc nul?

Dans ce cas, si la session de blocage a été supprimée du côté de la base de données, qu'adviendrait-il de l'objet java Connection correspondant? Cet objet deviendrait-il nul après avoir donné une exception? Quel pourrait être le comportement si cet objet de connexion est utilisé plus tard dans le code sans placer les contrôles?

Je sais que nous devrions obtenir une connexion à partir du pool et la fermer lorsque vous avez terminé, mais il y a beaucoup de code ancien écrit dans l'autre sens qui prendra un certain temps à nettoyer.

Quelle serait la réponse si la connexion ci-dessus est créée via une source de données, en gérant le pool de connexions, plutôt que via une connexion jdbc simple? Toutes les opérations en cours lanceront un SQLException et tous les appels à la méthode Connection.isClosed() retourneront true.

+0

Quel serveur de base de données est-ce? Non pas que ce soit important, c'est le pilote JDBC que vous utilisez, qui pourrait être plus important. –

+0

Le serveur de base de données Oracle 10g est utilisé via le pilote thin jdbc. – user510927

Répondre

2

Toute tentative ultérieure d'utilisation de l'objet de connexion lancera également SQLException avec l'erreur indiquant que la connexion est fermée.

Cela ne définira pas votre objet de connexion à null. Rien ne peut le faire, sauf si vous écrivez du code explicite pour définir l'objet sur null si une exception est levée ou si Connection.isClosed() renvoie la valeur true. Vous devriez le faire manuellement.

+0

Cavaet - _If_ le pilote et/ou le serveur app/seb contrôlant votre pool de connexions n'est pas bogué. J'ai été pris à plus d'une occasion, surtout quand les txns sont impliqués. :( –

+0

Oui, tester c'est une bonne idée Les pilotes SQL ne sont pas tous créés égaux –

+0

Dans un tel cas, que ferait le serveur d'application? Vérifie-t-il périodiquement les connexions qu'il a dans le pool et remplace-t-il ceux qui sont défectueux? – user510927