javarmi

i have a problem in a java rmi multiclient code


i am writing a java rmi multi_client code where the first client (client1 ) have the right to modify or create an object and the succond client (client2) have access to the object created by client1 return the onject to see it, but it's not working first client class

 import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;


public class ChefDeDepartement {

    static Scanner sc1  =  new Scanner(System.in);
    static Scanner sc2  =  new Scanner(System.in);
    static Scanner sc3  =  new Scanner(System.in);


    public static void main(String[] args)throws RemoteException, NotBoundException, MalformedURLException {

        int i=0;
            try
            {
             //java.rmi.registry.LocateRegistry.createRegistry(1000);

             InterfaceChefDept c = (InterfaceChefDept)Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");

                System.out.println("connection au serveur");


                c.Ajouter("1ere avis");
                c.Ajouter("2eme avis");
                c.Ajouter("3eme avis");
                List<String> avis = c.returnArrayList();
                System.out.println("Bienvenu !!!!!!!!!!");


                while(i==0){
                    System.out.println(" ");
                    System.out.println(" ");
                    System.out.println(" ");


//affichage*************************************************************                    
                    System.out.println("La liste des avis :");

                    List<String> listAvis = avis;
                    int j=0;
                    int k=0;
                    for(String e: listAvis){
                        j=j+1;
                        System.out.println(j + " :" + e);

                    }

//affichage*************************************************************                    


                    System.out.println("*********************");
                    System.out.println("**********");
                    System.out.println("choisire votre Action :");
                    System.out.println("             1: Ajouter un avis \n");
                    System.out.println("             2: Supprimer \n");
                    int choice  = sc1.nextInt();
                    String newAvis;
                    int idAvis;

                    if (choice==1)

                        {
                            System.out.println("donner le nouvel avis : ");
                            newAvis = sc2.nextLine();
                            c.Ajouter(newAvis);
                            avis = c.returnArrayList();
/*                          
//affichage*************************************************************                    
                            System.out.println("La liste des avis :");

                            int l=0;
                            for(String f: avis){
                                l=l+1;
                                System.out.println(l + " :" + f);

                            }

//affichage*************************************************************

  */
                        }


                        if (choice==2)
                        {
                            System.out.println("donner l'indice de l'avis a supprimer ");
                            idAvis = sc3.nextInt();
                            System.out.println("scan done");
                            c.Supprimer(idAvis);
                            System.out.println("supp done ");
                            avis = c.returnArrayList();
/*                          
 //affichage*************************************************************                   
                            System.out.println("La liste des avis :");

                            int n=0;
                            for(String f: avis){
                                n=n+1;
                                System.out.println(n + " :" + f);

                            }

//affichage*************************************************************                            
*/                          
                        }
                }


            }

            catch(Exception e)
            {
                System.out.println(e);

            }
            }

}

succond client class

 import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

public class Etudiant {

public static void main(String [] args) throws RemoteException {

        try{
            int i=0;

            InterfaceChefDept c = (InterfaceChefDept) Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");
            InterfaceEtudiant s = (InterfaceEtudiant) Naming.lookup("rmi://localhost/ServerDesAvis");

            List<String> avis = c.returnArrayList();
            List<String> lavis = s.AfficherAvis(avis);

            System.out.println("La liste des avis disponibles :");

            for(String f: lavis){
                i=i+1;
                System.out.println(i + " :   " + f);

            }
            System.out.println(":) :) :) :) :) ");
        }
        catch(Exception e){
            e.printStackTrace();
        }

    }



}

server class

    import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.util.ArrayList;


public class ServerDesAvis {




    public static void main(String[] args) throws RemoteException,NotBoundException{


        try
        {


            ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
            Naming.rebind("rmi://localhost/ServerDesAvis", c);

            ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
            Naming.rebind("rmi://localhost/ServerDesAvis", s);


            System.out.println("server is running");
            System.out.println(".......");
            System.out.println(".....");
            System.out.println("...");
        }

        catch(RemoteException re){
            re.printStackTrace();
        }

        catch(Exception e) {
                    System.out.println(e);
                }



    }

}

after java ChefDeDepartement localhost i get this error java.rmi.NotBoundException: ImlementationInterfaceChefDept


Solution

  • Your ImlementationInterfaceChefDept RMI server is incorrectly registered. You are binding both to the same ServerDesAvis endpoint :

    ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
    Naming.rebind("rmi://localhost/ServerDesAvis", c);
    
    ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
    Naming.rebind("rmi://localhost/ServerDesAvis", s);
    

    ... which means the first one (ImlementationInterfaceChefDept) will be overridden by the second one. You need to replace:

    ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
    Naming.rebind("rmi://localhost/ServerDesAvis", c);
    

    ... with this:

    ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
    Naming.rebind("rmi://localhost/ImlementationInterfaceChefDept", c);
    

    Hope this helps.