je suis en train de développer une communication Rmi en java et après moult problèmes j'ai réussi à faire un serveur :
public class maclasse extends UnicastRemoteObject implements moninterface{
// constructeur
public maclasse() throws RemoteException
{
super();
}// fin constructeur
@Override
public Integer donnesolde(String nom) throws RemoteException
{
// TODO Auto-generated method stub
return 9;
}
// création du service
public static void main (String[] arg)
{
String url = "//B57B58p23/moninterface";
try
{
// Rmi policy
System.setProperty("java.security.policy",
"E:/BTS2/brehault/ServeurRMI/bin/policy");
// installation d'un gestionnaire de sécurité
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new SecurityManager());
}
//lancement du rmi registry par code
LocateRegistry.getRegistry();
Registry registry = LocateRegistry.createRegistry(5005);
moninterface serveurEcho=new maclasse();
//enregistrement du service rmi dans la machine
registry.rebind(url,serveurEcho);
System.out.println("Serveur rmi pret");
}
catch (Exception e)
{
System.err.println(" Erreur " + e + " lors du lancement du serveur rmi");
}
}// main
}// fin classe
cela marche mais le client me met une erreur AccesscontrolException et je ne comprend pas pourquoi :
code du client:
public class maclasseclient
{
static Integer soldeperso;
/**
* @param args
*/
public static void main(String[] arg) {
// Rmi policy
System.setProperty("java.security.policy",
"E:/BTS2/brehault/ClientRMI/bin/policy");
// installation d'un gestionnaire de sécurité
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new SecurityManager());
}
// TODO Auto-generated method stub
String url = "//B57B58p23/htdocs";
try
{
moninterface obj = (moninterface)Naming.lookup(url);
soldeperso = obj.donnesolde(new String("Moi"));
System.out.println("Client connecté");
}
catch (Exception e) {
System.err.println(" Erreur " + e + " lors du lancement du client rmi");
}
System.out.println("Le solde est de "+soldeperso);
}
}
class Server{
public static void main (String[] arg)
{
String url = "//B57B58p23/moninterface";
try
{
// Rmi policy
System.setProperty("java.security.policy",
"E:/BTS2/brehault/ServeurRMI/bin/policy");
// installation d'un gestionnaire de sécurité
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new SecurityManager());
}
//lancement du rmi registry par code
LocateRegistry.createRegistry(5005);
//enregistrement du service rmi dans le service de NOMMAGE
Naming.rebind(url,new maclasse(););
System.out.println("Serveur rmi pret");
}
catch (Exception e)
{
System.err.println(" Erreur " + e + " lors du lancement du serveur rmi");
}
}// main
}
Veilles à ce que l'interface étendent bien Remote.
Dans l'url spécifie le numéro du port également
Ben j'utilisais cette classe et cela marchait très bien, c'est à toi de voir.
Edit : RMI d'origine n'est plus utilisé comme avant depuis plus de 5 ans (depuis la disparition des EJB2)
Tu utilisait RMI pour faire quoi? serveur et client sur un poste? moi c'est un serveur RMI sur un poste et client sur autre poste.
J'ai utilisé la classe naming en locale ça marchait mais que je suis passer sur un réseau ça ne marchait plus.
Client rmi
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
? parceque j'ai trouvé ici même sur ce forum que Naming n'était plus utilisée depuis 1999 et que à la place il fallait utilisée une variable Registry.