12
votes

Comment reconnecter automatiquement le pool de connexion Oracle après une interruption de connexion?

Je rencontre un problème avec la mise en commun de la connexion Oracle via oracleconnectionCacheImpl. Lorsque je me connecte à un pool de connexion sur mon serveur de base de données (Oracle 10G) via le pilote mince, tout fonctionne bien jusqu'à après une heure non spécifiée, la connexion DB est supprimée (éventuellement due à des connexions inactives?) Et je reçois un message d'erreur: < / p>

Connexion fermée.

rafraîchir la page et recouvrir la connexion reconnecte la base de données. Il ne semble donc pas être un problème avec le réseau ou la base de données. Est un moyen pour le pool de connexion Oracle pour valider sa connexion et reconnecter si la connexion dans la piscine est morte pour une raison quelconque?

J'utilise Apache Tomcat 6.0.18, Java EE6 Update 11.

(il semble y avoir une fonction de ping dans le conducteur mince Oracle. Est-ce que cela aide et où puis-je le trouver?)


5 commentaires

1) Pouvez-vous ajouter l'intégralité de la trace de la pile pour une connexion fermée 2) Avez-vous défini l'inactivitéTimeout, TimeTolIpTimeout ou AbandonedConnectionTimeout à toute valeurs non par défaut? 3) Utilisez-vous validateConnection?


4) Les connexions physiques entre le serveur d'applications et le serveur DB sont-elles coupées sur le niveau de réseau, par exemple par un pare-feu?


Où dois-je définir ces paramètres? Je suis nouveau pour programmer Oracle, alors je ne suis pas sûr de savoir où trouver ces paramètres. Où puis-je trouver ValidateConnection et forcer une reconnexion? (Rafraîchissant simplement mon navigateur juste après que je vois que l'erreur fixera les choses immédiatement. Je ne suis pas sûr que ceci est une question de pare-feu.)


Reportez-vous à télécharger.oracle.com/docs/ CD / B19306_01 / Java.102 / B14355 / ... et envoyez toute la pile d'erreurs, ce serait assez utile


+1 sur la connexion validation. J'ai eu le même problème dans .net World, devait ajouter Validate Connection = true à la chaîne de connexion. Votre syntaxe peut varier avec JDBC.


3 Réponses :


-1
votes

Utilisez une autre bibliothèque de pool de connexion, telle que C3P0 et utilisez la fonctionnalité pour automatique Reconnectez-vous .


0 commentaires

0
votes

Apache DBCP (pool de connexion DB) aidera ici. Vous pouvez configurer avec un paramètre 'validationquery', qui est une requête SQL à exécuter sur une connexion retirée de la piscine avant de vous le donner. Si la requête échoue, la connexion est jetée et une nouvelle est faite et donnée à vous.

voir ici http://commons.apache.org/proper/commons-dbcp/configuration.html Pour plus de détails.

Note, la validationquera sera appelée chaque fois que vous Obtenez une connexion de la piscine, il doit donc être aussi rapide que possible. Par exemple: xxx


0 commentaires

0
votes

Vous pouvez ajouter quelques paramètres de configuration dans le contexte.xml de sorte que le pool de connexion Tomcat prendra soin des connexions mortes. Voici un exemple de contexte.xml Veuillez utiliser l'utilisateur / mot de passe / URL / ports, etc. selon vos paramètres. XXX


0 commentaires