Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 11
    Points : 2
    Points
    2

    Par défaut Java RMI récupérer la liste du registry

    Bonjour, j'aimerais savoir si il est possible de récupérer la liste de tous les objets enregistrés dans le registry via Namig.rebind(String id, Object o) ;
    J'ai vu qu'il y a la méthode String[] list(String id), or, il faut au préalable connaître un identifiant, comment faire pour obtenir la liste si je ne connais pas d'identifiant.
    Dans mon code, je fais un lookup, mais je marque l'identifiant en brut et ça ne me plaît pas trop '^^
    Je ne sais pas si j'ai été assez clair, si vous souhaitez des précisions, n'hésitez pas ^^
    J'espère avoir un peu d'aide.

  2. #2
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 11
    Points : 2
    Points
    2

    Par défaut

    Voilà mon code :

    Code :
    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
    public class SiteServeur 
    {
    	public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException, NotBoundException 
    	{
    		SiteFactory sF = new SiteFactory() ;
    		SiteItf fils = null ;
     
    		if ( args.length < 2)
    		{
    			System.out.println("Erreur de le nombre d'arguments !") ;
    			System.exit(-1) ;
    		}
    		else if (args.length == 2 )
    		{   // le noeud n'a pas de pere
    			fils = sF.getSite(args[1], null) ;
    		}
    		// le noeud a un pere
    		else if ( args.length == 3)
    		{   // on recupere son pere, on lui affecte et on l'envoie
    			SiteItf pere = (SiteItf) Naming.lookup(args[2]) ;
    			fils = sF.getSite(args[1], pere) ;
     
    			pere.ajouterFils(fils) ;
    		}
    		else // le noeud a des freres
    		{
    			if ( args[2] != null) // un pere
    			{
    				SiteItf pere = (SiteItf) Naming.lookup(args[2]) ;
    				fils = sF.getSite(args[1], pere) ;
     
    				pere.ajouterFils(fils) ;
    			}
    			else // pas de pere
    			{
    				fils = sF.getSite(args[1], null) ;
    			}
     
    			for ( int i = 3 ; i < args.length ; i++)
    			{
    				SiteItf frere = (SiteItf) Naming.lookup(args[i]) ;
     
    				fils.ajouterFrere(frere) ;
    				frere.ajouterFrere(fils) ;
    			}	
    		}
     
    		Naming.rebind(args[1], fils) ;
    	}
    }
    Cette classe correspond au serveur, qui ajoute dans le registry un objet dont l'identifiant est passé en argument au lancement du programme.

    Et voilà le client :

    Code :
    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
    public class MessageDiffuseurInit
    {
    	private SiteItf arbre ;
     
    	public MessageDiffuseurInit() throws MalformedURLException, RemoteException, NotBoundException
    	{
    		arbre = (SiteItf) Naming.lookup("0") ;
     
    		while( arbre.getPere() != null)
    			arbre = arbre.getPere() ;
    	}
     
    	// on affiche l'arborescence de l'arbre
    	public void getList(SiteItf arbre, int esp) throws MalformedURLException, RemoteException, NotBoundException
    	{
    		if ( arbre != null)
    		{
    			esp++ ;
    			for (int i = 0 ; i < esp ; i++)
    			{
    				System.out.print(" ") ;
    			}
     
     
    			for ( int i = 0 ; i < arbre.getNbFils() ; i++)
    			{
    				System.out.println("fils de "+arbre.getNumero()+" : "+arbre.getFils(i).getNumero());
    				getList(arbre.getFils(i), esp) ;
    			}
     
    			for (int i = 0 ; i < esp ; i++)
    			{
    				System.out.print(" ") ;
    			}
     
    			for ( int i = 0 ; i < arbre.getNbFreres() ; i++)
    			{
    				System.out.println("frere de "+arbre.getNumero()+" : "+arbre.getFrere(i).getNumero());
    				getList(arbre.getFrere(i), esp) ;
    			}			
    		}	
    	}
     
    	public SiteItf getPere() 
    	{
    		return arbre;
    	}
     
    	public static void main(String args[]) throws MalformedURLException, RemoteException, NotBoundException 
    	{
    		MessageDiffuseurInit mD = new MessageDiffuseurInit() ;
     
    		System.out.println(mD.getPere().getNumero());
    		mD.getList(mD.getPere(), 1) ;
     
    		Scanner sc = new Scanner(System.in) ;
     
    		System.out.println("Dans quel noeud initier la diffusion ? ") ;
     
    		String rep = sc.nextLine() ;
     
    		SiteItf arbreDiff = (SiteItf) Naming.lookup(rep) ;
     
    		ArrayList<Byte> data = new ArrayList<Byte>() ;
     
    		int continuer = 1 ;
     
    		//entree des donnees a diffuser
    		while ( continuer == 1 )
    		{
    			System.out.println("Entrer les donnees a diffuser : ") ;
    			data.add(sc.nextByte()) ;
     
    			System.out.println("Continuer d'entrer des donnees ? 1 oui 0 non ") ;
    			continuer = sc.nextInt() ;
    		}
     
    		Byte[] donnees = new Byte[data.size()] ;
     
    		for ( int i = 0 ; i < donnees.length ; i++)
    			donnees[i] = data.get(i) ;
     
    		//thread pour diffuser de maniere concurrente les donnees
    		ThreadDiffuseur tDiff = new ThreadDiffuseur(arbreDiff, donnees, arbreDiff.getNumero()) ;
    		Thread t = new Thread(tDiff) ;
    		t.start() ;
    	}
    }
    Donc comme vous le voyez, je fais un lookup sur l'objet qui a pour identifiant 0, or, je souhaiterais justement faire un lookup sur un objet dont l'identifiant est passé en paramètre au constructeur par exemple.
    J'avais pensé utiliser justement un autre objet rmi qui stocke les identifiants au fur et mesure des instanciations.
    Je voudrais justement savoir s'il existe un moyen d'obtenir directement la liste des identifiants contenu dans le registry, quelque chose du genre
    String[] liste = Naming.getList() ;
    par exemple, or, Naming ne possède que list mais, il est nécessaire de connaître au moins un identifiant pour cette méthode.
    Voilà, j'espère avoir été plus clair ^^

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 11
    Points : 2
    Points
    2

    Par défaut

    Au temps pour moi '^^
    La méthode permet de récupérer la liste du registry via une url passée en paramètre ( j'avais mal lu la javadoc).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •