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 :

Enregistrement dans le registry


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 19
    Points
    19
    Par défaut Enregistrement dans le registry
    Bonjour,
    ça fait 10 jours que je suis bloqué sur un problème d'RMI et j'ai rien trouvé sur le net:
    je dois développer un factory qui crée des agents avec des coordonnées qui bougent arbitrairement.
    la compilation est clean, mais l'exécution se bloque au moment d'enregistrement de l'agent dans le registre. même quand je désactive mon pare-feu

    ***************************************************************
    la classe de l'agent distant:
    ***************************************************************

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package fr.cnamp.agent;
    import java.lang.Thread.*;
    import java.util.*;
    import java.rmi.*;
    import java.rmi.Remote.*;
    import java.rmi.server.*;
     
    public class  AgentOD extends UnicastRemoteObject implements AgentODInt, Runnable
    {
     
        int tailleGrille=20;                // initialisation de la taille du grille
        public Thread th =new Thread(this);
        public int x=10;public int y=10; 	// déclaration des coordonées
        int color;                          // déclaration du couleur de l'agent
        int port=9100;
     
        // j'ai mis la fonction moveit en type "char" car avec l'implementation du tread il n'a pas accépté le type "void"
        public char  moveit() throws RemoteException
        {
            try{
                    Random l_rdm =new Random();
                    int l_sensX = (int)(Math.abs(l_rdm.nextInt())%3) - 1;
                    int l_sensY = (int)(Math.abs(l_rdm.nextInt())%3) - 1;
                    x = x + l_sensX;
                    y = y + l_sensY;
                    if (x<0) x=tailleGrille-1;
                    if (y<0) y=tailleGrille-1;
                    if (x>tailleGrille-1) x=0;
                    if (y>tailleGrille-1) y=0;
                    try
                    {                                       // pour attendre une seconde
                    Thread.sleep(1000);			// avant de changer les valeur
                    }					// de x et y.
                     catch (InterruptedException e)
                    {
                            System.out.println(e.getMessage());
                    }
            }
            catch (Exception e){System.out.println(e.getMessage());}
        //j'ai besoin d'un caractere comme retour, alors j'ai pris une lettre au hazard 'O'
       // il n'accepte pas la fonctionde type voide, et je ne sais pas pq???
        return 'O';
        }
        public void run()
        {
            try
            {
                while(true)  {moveit();}
            }
            catch(Exception e){e.getMessage();}
            finally {System.out.println("fin de run :   ");
            }
        }
        // pour envoyer les coordonné au factory s'il la demande
        public int getX(){return this.x;}
        public int getY(){return this.y;}
        public AgentOD(int new_x,int new_y,int reqcolor)throws RemoteException
        {
        x=new_x;y=new_y;	// mettre les coordonnées demandé par l'exterieur.
        color= reqcolor;
        }
     
    }
    *******************************************************************
    la classe du factory:
    ***************************************************************

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    package fr.cnamp.factory;
    import java.lang.Thread.*;
    import java.rmi.Remote.*;
    import java.rmi.server.*;
    import fr.cnamp.agent.*;
    import fr.cnamp.factory.*;
    import java.rmi.registry.*;
    import java.rmi.*;
     
    public class FactoryJeuAgentOD extends UnicastRemoteObject implements FactoryJeuAgentODInt
    {
        // Attributs de FactoryJeuAgentOD
        private String name;
        private int nb;
        private int color;
        private int port;
        private AgentOD[] listAgent; // tableau des agents
     
        //constructeur FactoryJeuAgentOD
        public FactoryJeuAgentOD(String reqname,int reqnb, int reqcolor, int reqport) throws Exception{
            name=reqname;
            nb=reqnb;
            color=reqcolor;
            port=reqport;
            listAgent=new AgentOD[reqnb+1];
     
            System.out.println("Execution de FactoryJeuAgentOD :");
            try
            {
                // création des agents dans le tableau.
                for (int i=1;i<=reqnb;i++)
                {
                System.out.println("Creation de l'Agent "+ i+"/"+reqnb);
                listAgent[i]=new AgentOD(10,10, reqcolor);
                System.out.println("Creation de l'Agent "+i+" termine ds factory");
     
                //enregistrement de l'agent dans le registry
                Naming.rebind("rmi://localhost:"+port+ "/"+"factory"+i ,this);
                }
     
                // pour faire bouger  les agents dans le factory et pas dans l'AgentOD
                moveAgent();
            }
            catch(Exception e){System.out.println(e.getMessage());}
            }
        // la fonction qui appellera le thread de deplacement de chaque agent.
            public void moveAgent()throws RemoteException{
                System.out.println("demarage de moveAgent() pour "+this.nb+" agents: ");
                for (int i=1; i<=this.nb;i++)
                {
                    System.out.println("demarage du tread " + i);
                    listAgent[i].th.start();
                }
            }
            // afficher les coordonnées en appellant les fonction getX() et getY() dans AgentOD
            public void printXY()throws RemoteException{
     
                 try{
               //boucle d'affichage et de deplacement.
                System.out.print("\n");
                for (int i=1; i<=this.nb;i++){System.out.print("agent " + i+" \t");}System.out.println();
                System.out.println();
     
                while(true){
                    for (int i=1; i<=nb;i++){
                        System.out.print(listAgent[i].x + " - " + listAgent[i].y+"\t\t"  );
                    }
                    try{					 // pour attendre une seconde
                        Thread.sleep(1000);			 // avant de charger les valeur
                    }					 // de x et y, 
                     catch (InterruptedException e){
                        System.out.println(e.getMessage());
                    }System.out.println();
                }
            }catch (Exception e){e.getMessage();}
     
            }
            public void creatFactory(String reqname,int rnb, int rcolor, int rport)throws RemoteException{
            try{
                     FactoryJeuAgentOD fact=new FactoryJeuAgentOD( reqname, rnb, rcolor, rport);
                     fact.printXY();
            }catch (Exception e){e.getMessage();}}
     
        public static void main(String argv[]) throws Exception
        {
            try
                            {
                                            // Creation de l'adptateur
                                            LocateRegistry.createRegistry(9101);
                            }
            catch(Exception e){
                            // si il existe deja alors inutile de le creer
            }
     
              try{
                  FactoryJeuAgentOD fact=new FactoryJeuAgentOD( "bux",5,1,9103);
                  fact.printXY();
            }catch (Exception e){e.getMessage();}
        }
    }
    j'ai cherché partout une solution pour ce problème mais j'ai pas trouvé, alors merci pour votre aide!!
    le stub et le skelton sera développer plus tard

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    j'espère que vous ne m'avez pas oublié, car j'y suis toujours bloqué, et je n'arrive pas à continuer

Discussions similaires

  1. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 01h59
  2. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 10h56
  3. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 10h37
  4. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 13h36
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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