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
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.