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

avec Java Discussion :

quelque chose qui m'echappe avec le singleton.


Sujet :

avec Java

  1. #1
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut quelque chose qui m'echappe avec le singleton.
    Voilà je cherche a implémenter un singleton pour une application j'ai donc regarder ces tutoriaux:

    1. http://christophej.developpez.com/tu...n/multithread/
    2. http://smeric.developpez.com/java/uml/singleton/

    j'ai donc ma class Singleton
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class Singleton {
      private static Singleton instance;
      private Singleton(String[] myChaine) throws IOException {
             vlcManager vlc = null;
     
            if(myChaine[0].matches("start")){
                try{
                    init fileinit = new init();
                    runner redWire = new runner();
                    creatPlaylist play = new creatPlaylist();
                }
                catch(IOException e){
                    System.out.print("Le disque dur n'est pas accessible.");
                }
               vlc = new vlcManager("start");
            }
            else if(myChaine[0].matches("stop")){
     
                try{
                    vlc = new vlcManager("stop");
                }
                catch(Exception e){
                }
           }
      }
     
      public static Singleton getInstance(String[] chaine) throws IOException {
        if (null == instance) {
          instance = new Singleton(chaine);
        }
        return instance;
      }
    }
    et mon main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws IOException {
           Singleton singleApp = Singleton.getInstance(args);
        }
     
    }
    je lance donc mon appli argument start > tout demarre bien
    je lance l'appli argument start de nouveau et là, en mode pas à pas mon instance de singleton est "null" alors que celle ci est instancié d'où mon incompréhension.

    Que fais je mal?

    merci de votre aide
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Citation Envoyé par turican2 Voir le message
    je lance donc mon appli argument start > tout demarre bien
    je lance l'appli argument start de nouveau et là, en mode pas à pas mon instance de singleton est "null" alors que celle ci est instancié d'où mon incompréhension.

    Que fais je mal?
    Bonjour,

    Si l'application est lancée une deuxième fois, elle est lancée dans une autre JVM.
    Donc le singleton n'est pas encore instancié. Le singleton est créé pour chaque machine virtuel.

  3. #3
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    Pour lancer une application je fais

    java -jar monappli.jar start

    comment puis je en ligne de commande faire pour communiquer avec la jvm de l'instance créé par ma précédente ligne de commande?? afin de pouvoir faire un start ou stop?


    merci de ta réponse
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  4. #4
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Tu ne peux pas, un lancement = une JVM, et deux JVM ne peuvent pas partager leur espace mémoire.
    Un singleton n'a de sens qu'au sein de la même JVM, afin de s'assurer que la classe Singleton ne soit pas instanciée deux fois pendant une même exécution.
    Ce ne concerne pas une autre exécution. Si tu veux t'assurer que la classe n'est instanciée qu'une seule fois "en même temps", même par deux programme différents, il te faudra utiliser un autre mécanisme.
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Sauf erreur de ma part c'est impossible, et tant mieux d'ailleurs, sinon pirater une appli serait un jeu d'enfant.

    Après si tu veux faire en sorte d'avoir un singleton partagé par toutes les applis, tu peux utiliser le principe de fichier .lock.

  6. #6
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    une JVM est donc complètement sourde au requettage extérieur?

    je trouve ça dingue qu'une fois instanciée je ne puis ce plus communiquer avec !!!
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  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
    Si tu peux communiquer entre deux JVM, via socket par exemple.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben si
    comme n'importe quelle application, tu peux lui parler

    - par des sockets réseau si elle en a
    - par des ficheir si elle en surveille
    - par stdin si tu garde le pipe ouvert

  9. #9
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    vos réponses me vont bien merci de toutes ces informations.
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Si tu nous expliquais ce que tu veux faire (je ne comprend pas l'intérêt du Singleton dans ton exemple).

    a++

  11. #11
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Oui on peut tout à fait communiquer avec la JVM, mais pas par ligne de commande.
    Une fois une jvm lancée, on ne peut pas appeler directement une fonction du programme depuis un programme extérieur.

    Si tu nous expliquais ce que tu veux faire (je ne comprend pas l'intérêt du Singleton dans ton exemple).
    Je suppose, que l'OP a mal compris le principe du singleton, et pensait que ca créait une seule instance pour tout l'ordinateur, et qu'il était après possible d'accéder à cette instance depuis n'importe quelle autre appli.

  12. #12
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    Pour le détail de l'application:

    mon application se lance et doit se lancer qu'une fois pur des souci de concurrence d'acces à des fichiers que je ne saurais pas gérer (le singleton me certifie qu'il n'y a pas 2 instances java qui sont entrain de telecharger ou supprimer des medias alors que vlc par exemple essaie d'y acceder). Quand elle se lance, elle décrit l'ensemble des médias qu'elle possède en local et la compare à une liste de média qui se trouve sur un serveur distant. Je fais le delta en téléchargeant ou supprimant les bons medias puis génère une playlist.

    De là, je lance la playlist par vlc. Mais voilà, maintenant pour effacer des fichiers, il faut etre sur que vlc n'est pas entrain de le lire d'où mon intention d'envoyer une requête STOP a mon application et régénérer ma playlist en fonction des bons media.
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par turican2 Voir le message
    mon application se lance et doit se lancer qu'une fois pur des souci de concurrence d'acces à des fichiers que je ne saurais pas gérer (le singleton me certifie qu'il n'y a pas 2 instances java qui sont entrain de telecharger ou supprimer des medias alors que vlc par exemple essaie d'y acceder).
    Mauvais départ : le singleton te certifie uniquement que ton objet est unique dans ton application... mais certainement pas que ton application soit unique...

    Il y a d'autres solutions pour cela :
    Comment avoir une seule instance de mon application qui tourne ?


    a++

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

Discussions similaires

  1. Afficher quelque chose qui suive l'ascenseur
    Par Zebulon777 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 28/01/2015, 08h17
  2. ToolTip ou quelque chose qui ressemble
    Par tifsa dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 09/12/2014, 16h18
  3. unittest : tester quelque chose qui marche
    Par rambc dans le forum Général Python
    Réponses: 1
    Dernier message: 25/10/2010, 00h07
  4. Réponses: 22
    Dernier message: 27/10/2009, 10h05
  5. Quelque chose ne va pas avec Flash
    Par totoz dans le forum Flash
    Réponses: 2
    Dernier message: 03/03/2009, 18h46

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