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

Java Discussion :

Vérifier qu'un programme ne tourne pas déjà


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 114
    Points
    114
    Par défaut Vérifier qu'un programme ne tourne pas déjà
    Bonjour,

    J'ai une application basée sur Quartz qui me permet de lancer des mises à jour de base de données sur mon serveur. Cependant après avoir lancé par erreur deux fois cette application, les mises à jour sont faites en parallèle, et génère des doublons...

    Je voudrais donc qu'au lancement de mon application java, celle ci vérifie qu'elle n'a pas déjà été lancée. Existe il une manière propre de le faire ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Regarde ce tutoriel.

    A+.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 114
    Points
    114
    Par défaut
    Merci pour la réponse. Cependant je vois mal comment l'appliquer dans mon cas.

    Ce que je veut c'est que la commande java -jar monAppli.jar execute normalement le programme, mais que si je la relance, il ne relance pas une seconde fois l'application tant que la première s'exécute.

    Le synchronized peut marcher sur une application lancée deux fois ?

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    J'ai cru que tu relances le mise à jour une seconde fois depuis la même instance. Dans ce cas fait une petite recherche sur l'utilisation de FileLock. Ou fait une petite recherche google avec "run single instance java application".

    A+.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 114
    Points
    114
    Par défaut
    C'est ça !

    Je vais me baser sur cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    private static boolean lockInstance(final String lockFile) {
        try {
            final File file = new File(lockFile);
            final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
            final FileLock fileLock = randomAccessFile.getChannel().tryLock();
            if (fileLock != null) {
                Runtime.getRuntime().addShutdownHook(new Thread() {
                    public void run() {
                        try {
                            fileLock.release();
                            randomAccessFile.close();
                            file.delete();
                        } catch (Exception e) {
                            log.error("Unable to remove lock file: " + lockFile, e);
                        }
                    }
                });
                return true;
            }
        } catch (Exception e) {
            log.error("Unable to create and/or lock file: " + lockFile, e);
        }
        return false;
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Je me suis déjà posé la question et voici ce que j'ai trouvé. Deux solutions. Soit tu utilises un fichier où tu écris que ton programme tourne ou non mais cela pose problème lors d'une extinction brutale.

    Ou la mieux, c'est que tu écoute un port. Comme ça quand ton application s'ouvre, elle envoie un message sur ce port, s'il n'y a pas de réponse tu n'as pas d'application ouvert, s'il y en a une , ton application est déjà ouverte.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par druzy Voir le message
    Je me suis déjà posé la question et voici ce que j'ai trouvé. Deux solutions. Soit tu utilises un fichier où tu écris que ton programme tourne ou non mais cela pose problème lors d'une extinction brutale.
    C'est ce que je ne voulais pas faire. Mais avec la fonction donnée plus haut, le fichier semble locké tant que le programme a la main, et ne se libère seulement lorsqu'il se termine (de manière normale ou brutale). Je code certainement ça demain, je verrai si c'est fiable ou non.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Et mon idée de socket ?
    Vu sur la faq : http://java.developpez.com/faq/java/...nceApplication

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

Discussions similaires

  1. un programme qui tourne pas
    Par POWAPA84 dans le forum Général Python
    Réponses: 1
    Dernier message: 11/03/2014, 15h28
  2. programme ne tourne pas
    Par frihat mohamed dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/03/2012, 17h24
  3. Le programme compile mais ne tourne pas
    Par jarmouz dans le forum Pascal
    Réponses: 3
    Dernier message: 01/12/2010, 22h34
  4. Réponses: 2
    Dernier message: 15/03/2005, 14h24

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