2010-04-21 5 views
-1

Je joue actuellement avec des environnements distants en utilisant le registre rmi. Mon serveur est comme ceci:Le registre RMI a échoué .... exception sais null

 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 


public class Server { 
    public static void main(String args[]){ 
     if(args.length"); 
      System.exit(-1); 
     }  
     try{ 
      Registry r=LocateRegistry.getRegistry(); 
     MethodsImp methods=new MethodsImp(); 
      //have the object to be remotely accessed so will bind it to the registry 
      System.out.println("Will register on "+args[0]); 
      r.rebind(args[0], methods); 
     } 
     catch(Exception e){ 
      System.out.println("Something went wrong when registring the methods"); 
      System.out.println(e.getMessage()); 
      System.exit(-1); 
     } 

    } 

} 

Quand je lance le programme par:

 
java -classpath /home/outsider/Desktop/RIM/RIM_TP1_correct/src -Djava.rmi.server.codebase=file:/home/outsider/Desktop/RIM/RIM_TP1_correct/src/ Server regsiter_name 

Je reçois ceci:

Will register on regsiter_name 
Something went wrong when registring the methods 
null 

Pour une raison quelconque quand je r.rebind il jette un exception qui a le message null. Avant d'essayer d'exécuter le programme installer le rmiregistry en faisant

rmiregistry &

Sur la coquille. Je ne peux pas savoir ce que je fais mal. Si quelqu'un pouvait aider ce serait génial

+0

Quel type d'exception est lancé ....? Essayez 'System.out.println (e.getClass(). GetSimpleName());' – Finbarr

+0

il donne NullPointerException .... il semble que r.rebind ne fonctionne pas comme il se doit .... mais je ne sais pas savoir pourquoi –

+0

Votre code ne compile pas et vous n'avez pas fourni de trace de pile. Sans réponse sous sa forme actuelle. – EJP

Répondre

0

Le problème avec votre code est que vous devez exporter votre objet distant

méthodes MethodsImp = new MethodsImp();

au registre rmi.

vous pouvez le faire en incluant ce code

MethodsImp methods=new MethodsImp(); 
Hello stub = (Hello) UnicastRemoteObject.exportObject(methods, 0); 

Bonjour est le nom de l'interface.

Ce code exporte votre objet dans le registre. Il n'est pas nécessaire d'exporter votre objet si vous implémentez l'interface et liez l'objet à la fois dans la même classe. Si vous utilisez une classe différente pour lier l'objet, vous devez également exporter l'objet.

+0

Vous ne le savez pas. La plupart des objets distants étendent 'UnicastRemoteObject' et n'ont pas besoin d'être explicitement exportés. Vous ne pouvez pas savoir quel est le problème sans trace de pile. – EJP

+0

Et il n'existe pas d''export vers le registre RMI'. Il y a export, period, et il y a * binding * au registre. – EJP