IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Fermer les ressources d'un singleton


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Fermer les ressources d'un singleton
    Bonjour,

    Je dois faire en sorte de créer une fois pour toutes une connection qui sera utilisée périodiquement pendant le fonctionnement de mon programme, en théorie cette connection doit être fermée, mais en pratique elle ne le sera jamais avant la fermeture du programme. Je pensais donc faire un singleton, mais je ne sais pas trop ce qui lui arrive à l'arrêt du programme (volontaire ou non), notamment je ne suis pas sûr que la méthode finalize() soit toujours appelée si je ne mets pas explicitement l'instance à null. Pouvez-vous m'aider à lever le doute ou bien proposer une autre famille de solution ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je dirais qu'il faut ajouter une méthode close() sur ce singleton, et penser à l'appeler à la fin de ton programme (genre, interdit d'utiliser System.exit(), et garder à l'esprit une méthode, possiblement main(), qui ne se termine que quand le programme se termine. Ajouter un appel à close() dedans.)

    Citation Envoyé par tnarol Voir le message
    notamment je ne suis pas sûr que la méthode finalize() soit toujours appelée si je ne mets pas explicitement l'instance à null.
    Ni même si tu mets l'instance à null explicitement. On ne peut pas compter sur finalize().
    Elle ne se déclenche qu'avant qu'un objet soit collecté par le garbage collector, et on ne peut pas compter sur le fait que ça arrive (la fermeture du programme ne nécessite pas de choisir quelle mémoire libérer, il faut libérer toute la mémoire, donc pas de garbage collector.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Merci

    Le close() ne me convient pas car je veux aussi gérer les cas de crash. Je sais que j'aurais la possibilité de gérer ça depuis le programme qui utilise ma connection mais je préfèrerais que ma classe puisse se débrouiller toute seule sans intervention extérieure. Je ne veux pas être invasif sur le code appelant.

    L'utilisation de "Autocloseable" est-elle possible dans mon cas ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Je continue mes recherches, est-ce que finalement ce n'est pas un shutdown hook dont j'ai besoin ?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Oui c'est une bonne idée, mais en cas de plantage de la JVM, le shutdown hook ne sera pas forcément appelé.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Oui c'est une bonne idée, mais en cas de plantage de la JVM, le shutdown hook ne sera pas forcément appelé.
    OK mais est-ce que j'ai moyen d'écrire du code qui permettrait de parer à cette éventualité ?

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu parles d'un connexion à une base de données ?
    Car je pense que si ton programme plante, elle devrait être libérée sans que tu aies à t'en occuper.

  8. #8
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Tu parles d'un connexion à une base de données ?
    Car je pense que si ton programme plante, elle devrait être libérée sans que tu aies à t'en occuper.
    C'est une connection JMS. Comme je ne m'occupe pas des détails d'implémentation et que l'API fournit une méthode close() sur la connection je me sens obligé de l'appeler. Même si dans quelques cas tordus je ne le fais pas c'est toujours mieux que de ne rien faire.

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Là nous sommes bien d'accord.
    Tu dois autant que possible fermer la connexion quand ton programme n'en a plus besoin.
    Après, les cas où l'application plante sévèrement, je pense que tu ne pourras pas faire grand chose, et que ça ne vaut pas le coup d'essayer de faire des hacks dans tous les sens.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 10/03/2006, 11h12
  2. Réponses: 5
    Dernier message: 16/07/2005, 00h01
  3. besoin d'un ou deux tuyaux sur les ressources svp
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 23/06/2005, 11h41
  4. Libérer les ressources lors de la fermeture d'un programme
    Par Heliopraetor dans le forum DirectX
    Réponses: 10
    Dernier message: 14/09/2004, 19h15
  5. Les ressources .NET à votre dispositon
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 12/12/2002, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo