Je suis en train de RMI une assez basique:Java RMI InitialContext: équivalent de LocateRegistry.createRegistry (int)?
// Context namingContext = new InitialContext();
Registry reg = LocateRegistry.createRegistry(9999);
for (int i = 0; i < objs.length; i++) {
int id = objs[i].getID();
// namingContext.bind("rmi:CustomObj" + id , objs[i]);
reg.bind("CustomObj" + id , objs[i]);
}
qui fonctionne sans accroc, mais pour les futurs besoins, je dois utiliser InitialContext
.
Context namingContext = new InitialContext();
for (int i = 0; i < objs.length; i++) {
int id = objs[i].getID();
namingContext.bind("rmi:CustomObj" + id , objs[i]);
}
Mais je n'arrive pas à faire fonctionner ça. J'ai commencé rmiregistry
à partir de la ligne de commande. Y a-t-il un équivalent de LocateRegistry.createRegistry(int)
? Ou un autre moyen de démarrer le registre/registre RMI utilisé par InitialContext
depuis l'intérieur de ma classe? (Au lieu de la ligne de commande)
Trace de la pile:
javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: bguiz.scratch.network.eg.Student]
at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:126)
at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:208)
at javax.naming.InitialContext.bind(InitialContext.java:400)
at bguiz.scratch.RMITest.main(RMITest.java:29)
Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: bguiz.scratch.CustomObj
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
....(truncated)
EDIT: Je vais supprimer ma propre question dans quelques jours, car il semble y avoir aucune réponse à cette (Je n'ai pas été capable de le comprendre moi-même). Dernier appel pour tous les biters!
@EJP J'ai ajouté la trace de la pile à ma question. En outre, cette classe fonctionnera sur le serveur - donc pas besoin de spécifier l'URL (ce sera l'hôte local). Le client a besoin de spécifier l'URL, et puisque je suis en sandbox dans la même machine, il spécifie '' rmi: // localhost: 1099/"', mais je n'ai pas encore atteint ce niveau, car cette classe ne fonctionne pas . – bguiz