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 :

redémarrer une application


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut redémarrer une application
    bonsoir, mon problème est le suivant :
    mon application est une plate-forme multi-agents minimale qui sert à développer et exécuter des SMA (Systèmes Multi-Agents).
    Du point de vue de programmation, les agents sont des objets actifs (possèdent un thread de contrôle). Dés qu'un agent sera créé, il doit s'inscrire auprés AMS. et Dés qu'il sera supprimé, il annule son inscription auprés AMS.
    AMS est une classe singleton (Un seul AMS peut s'exécuter à la fois) et il possède un répertoire (HashMap) de tous les agents.
    Mon pb se pose lorsque je veux ouvrir un nouveau SMA ou fermer le SMA courant. je dois supprimer tous les agents. mais cette action ne peut être faite que si l'agent ne fais rien (Attente d'une tâche à réaliser). donc les agents actifs (sont entrain d'exécuter une tâche) ne peuvent être supprimé qu"à la fin d'exécution de cette tâche. et moi je dois réinitialiser les composant de ma plateforme surtout AMS (son répertoire doit être vide si je veux ouvrir\créer un nouveau SMA) . j'ai pensé à vider explicitement le répertoire de l'AMS, mais le pb que les agents non supprimé peut à tous moments communiquer avec AMS.
    donc j'ai pensé à demander à l'utilisateur de redémarrer l'application, mais comment faire pour redémarrer l'application?.
    j'ai pensé à faire new Application() et afficher une nouvelle fenêtre de l'application mais le pb que la nouvelle fenêtre de l'application travaille toujours avec l'ancien AMS. je dois réinitialiser toutes les classes de mon application. comment faire?

  2. #2
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Bonjour,

    Une méthode simple pour redémarrer l'application : (pour un jar par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runtime.getRuntime().exec("java -jar tonJar.jar");
    System.exit(0);
    Ainsi la commande lançant ton programme va s'exécuter juste avant que celui-ci ne se ferme.

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    J'aurais tendance à traiter ce problème comme ça :

    - tu enrichis tes agents d'un champ "terminerAction"
    - lorsque tu dois créer un nouveau SMA, tu fermes ceux qui sont inactifs et tu envoies un signal "terminerAction" aux autres, afin qu'ils ne fassent rien après avoir traité leur tâche courante (voire qu'ils la terminent rapidement, en l'annulant si possible)
    - passé un "timeout", les agents restants sont fermés (voire "tués" s'ils n'ont pas pris en compte l'ordre d'arrêt)

    Tu peux alors fermer le SMA et en démarrer un nouveau.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut merci
    bonsoir, merci pour votre réponse. La solution du muad'dib est plus simple et efficace. Cependant, votre solution, CyberChouan, exigent que je dois modifier le fonctionnement de mon agent. Un agent ne peut pas être supprimé lors d'une exécution d'une compétence ou tâche. A la fin de la tâche, que l'agent rend en compte que son cycle de vie a changé (son point interruptible). C'est ce que j'ai imposé comme contrainte.
    bref, merci à vous. ça m'a vraiment aidé.

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

Discussions similaires

  1. Killer et redémarrer une application
    Par Ghunter59 dans le forum Android
    Réponses: 4
    Dernier message: 06/09/2010, 13h27
  2. Réponses: 16
    Dernier message: 13/10/2008, 17h32
  3. Redémarrer une application
    Par rangdalf dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/03/2008, 07h13
  4. redémarrer une application
    Par reloadead dans le forum Langage
    Réponses: 5
    Dernier message: 20/06/2007, 15h12
  5. Comment redémarrer une application?
    Par liv dans le forum MFC
    Réponses: 5
    Dernier message: 24/01/2005, 14h40

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