2012-04-10 3 views
1

Je suis confronté à un problème, en fait, j'utilise c3p0 pour le regroupement de connexions dans mon projet, il utilise également Spring, Hibernate et JSF. Mon problème est que dans ma page Web, nous avons un lien nommé "déconnexion" Je veux quand l'utilisateur clique sur la déconnexion, la connexion devrait être libérée et www.google.com retour à la piscine comment est-ce possible.Libération de la connexion dans le pool de connexion c3p0

Merci à l'avance Prashant

+0

J'augmente ma réponse à l'acceptation si vous savez que –

+0

Je ne comprends pas très bien la question, puisque votre pool c3p0 est indépendant des demandes de vos utilisateurs. Le pool est auto-géré (lorsqu'une connexion n'est pas utilisée après un certain laps de temps, la connexion est soit fermée, soit remise dans le pool). –

+0

oui u r right pool est indépendant des demandes des utilisateurs mais sur notre page web nous avons un lien nommé logout. Dans un scénario si j'ai un maxPoolSize 2 et 2 utilisateurs se connecte alors quand le 3ème utilisateur essaye de se connecter alors il devrait attendre que la connexion soit libre. Je veux faire cela si je clique sur mon lien de déconnexion puis utilisateur déconnecté et aussi libérer la connexion de sorte que l'autre utilisateur en attente d'acquérir la connexion obtient la connexion et faire son travail. –

Répondre

1

ce que vous attendez est de contrôler le nombre d'utilisateurs simultanés se connecter à votre système

lorsque le 3ème utilisateur essaie de se connecter alors il doit attendre la connexion pour libérer

maintenant, vous pouvez mettre en œuvre cette aide d'un compteur simultané

  • créer un filtre qui filtre toutes les demandes.
  • chaque fois qu'une nouvelle demande est incrément créé le compteur
  • lorsqu'un utilisateur se déconnecte décrémenter le compteur
  • lorsque le compteur atteint la valeur max faire cette attente de fil jusqu'à ce que les fentes sont disponibles.

Vous pouvez contrôler le nombre maximal d'utilisateurs via JMX ou une console d'administration séparée. également, une connexion doit être libérée lorsque le thread qui la gère se termine (puisque l'objet de session n'a aucune référence, il peut être GC et après un timeout il sera réutilisé dans le pool).

Il est toujours préférable de ne pas créer de goulot d'étranglement en utilisant une ressource DB.

+0

Non, en fait, j'essaie de le faire quand un utilisateur se déconnecte puis rentre dans le pool –

+0

je comprends, mais une connexion est une ressource liée à un thread en cours d'exécution, si le thread est mort puis la connexion est retournée au pool (tôt ou tard). –

+0

vous voulez dire qu'il n'y a aucun moyen de le faire avec précaution? –