2011-03-22 6 views
0

Mon application utilise un pool de connexions mysql jdbc. Lorsque je fais un ping sur la base de données via le site d'administration glassfish, j'obtiens une bonne réponse. Quand j'utilise mon application, tout fonctionne bien.pool de connexion JDBC glassfish

Mon problème se produit lorsque, pour une raison quelconque, le serveur mysql se bloque. Après un plantage, je redémarre le serveur mysql et lorsque je fais un ping sur la base de données via le site d'administration de glassfish, j'obtiens une bonne réponse, mais quand j'utilise mon application, j'obtiens une erreur.

Je cherche un moyen de dire à glassfish pour rétablir les connexions. Des idées?

Répondre

1

vous êtes probablement accroché à vos connexions au sein de votre application plutôt que de les renvoyer à la piscine dès que vous avez terminé avec eux.

1

avait un regard autour de la documentation GlassFish et trouvé ce qui suit:

com.sun.appserv.jdbc.DataSource ds= 
    (com.sun.appserv.jdbc.DataSource)context.lookup("dataSource"); 
Connection con = ds.getConnection(); 
Statement stmt = null; 
try{ 
    stmt = con.createStatement(); 
    stmt.executeUpdate("Update"); 
} 
catch (BadConnectionException e){ 
    ds.markConnectionAsBad(con) //marking it as bad for removal 
} 
finally{ 
    stmt.close();  
    con.close(); //Connection will be destroyed during close. 
} 

vient de this page Recherchez la rubrique: Marquage de mauvaises connexions, il est environ les deux tiers de la page.

0

Parfois, GlassFish ne réalise pas que les connexions dans le pool ne sont plus bonnes. Par conséquent, il peut continuer à donner la connexion fermée à l'application pendant un certain temps (j'ai vu cela se produire jusqu'à 20 minutes).

Dans ce cas, vous pouvez forcer GF à fermer les anciennes connexions & créer de nouvelles connexions en vidant le pool de connexions.

Extrait de http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html.

Vous pouvez rincer un pool de connexion JDBC dans une de ces façons:

Dans la console d'administration, ouvrez le volet Ressources, ouvrez le composant JDBC, sélectionnez pools de connexion, et sélectionnez la connexion piscine vous vouloir vider. Ensuite, sélectionnez le bouton Flush dans le coin supérieur gauche de la page. Pour plus de détails, cliquez sur le bouton Aide dans la console d'administration .

Utilisez la commande asadmin flush-connection-pool. Pour plus de détails, voir le Manuel de référence Oracle GlassFish Server 3.0.1 .

Une autre option consiste à activer la validation dans le pool de connexions. Cela forcera GF à vérifier si la connexion fonctionne avant de la donner à l'application. Une fois qu'il se rend compte que la connexion est fermée, il va remplacer cela avec une nouvelle connexion.

Questions connexes