Java rmi tuto oracle

Résolu/Fermé
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 - 6 oct. 2013 à 15:24
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 - 8 oct. 2013 à 11:48
Bonjour,

J'essaye de mettre en place ce tutoriel "https://docs.oracle.com/javase/tutorial/rmi/example.html" pour un projet que je dois faire.

Je n'arrive pas du tout à le faire fonctionner... quelqu'un a déjà utiliser ce tutoriel ?

Est-ce que je peux tester ce genre de programme sur un seul OS, client serveur ?

J'arrive pas du tout à comprendre comment ça fonctionne...

Est-ce qu'il faut 2 pc ? est-ce que je peux utiliser ça sur mon mac (coté client) et sur un Vmware avec windows 7 ( coté client ) ?

J'essaye de mettre en place le Java RMI, un client serveur, mais j'arrive à rien...

J'ai créé tous mes codes java comme dans le tuto... mais quand j'utilise les commandes il y en a aucune qui fonctionne...

need help svp

Cordialement,

Capa57
A voir également:

7 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 oct. 2013 à 15:56
Normalement tu peux faire ça sur une seule machine, il suffira d'utiliser le serveur en localhost, mais quel serveur utilises-tu ? Parce qu'ils ne permettent pas tous de faire du RMI par défaut...

Tu trouveras un peu plus d'information ici :
https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 17:35
aucune idée, j'essaie de faire ce tuto mais je ne sais pas quoi utiliser. il est mal fait je trouve..

je comprends pas grand chose d'ailleurs :/
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 oct. 2013 à 17:40
Le tutoriel Getting Started a l'air plus simple.

Mais tu peux aussi regarder des cours en français, par exemple :
http://www.jmdoudoux.fr/java/dej/chap-rmi.htm
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 18:22
j'ai testé ce tutorial : https://www.youtube.com/watch?v=vkw275ptI3E

quand j'essaie de lancer le serveur j'ai cette grosse erreur...

je dois faire quoi ? oO


java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:400)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at simple.rmi.server.MyServer.main(MyServer.java:33)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: simple.rmi.server.MyServer_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1185)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1198)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:433)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:164)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:201)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1589)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1494)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1748)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
... 12 more
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 oct. 2013 à 18:39
Il y a eu des changements lors des dernières versions de Java, ta vidéo date un peu, regarde
https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7.html
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 18:41
hummm merci

mais je comprends pas ce que je dois faire :(
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 6/10/2013 à 19:47
Voici un exemple complet, testé avec Java 7 sous Windows 7.
Je fais tout à la main (pas d'Eclipse ou Netbeans, juste Java)

Je suppose que tu travailles dans le dossier "C:\Workspace\RMI" et qu'il contient deux dossiers "src" et "bin".

Dans "src" je mets des sous-répertoires "ccm" puis "rmi" pour mon architecture de package et je mets les trois codes suivants :

C:\Workspace\RMI\src\ccm\rmi\Hello.java

package ccm.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote
{
String BIND = "ccm.rmi.Hello";
String sayHello(String name) throws RemoteException;
}

C:\Workspace\RMI\src\ccm\rmi\Server.java

package ccm.rmi;

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

public class Server implements Hello
{
public String sayHello(String name)
{
return "Hello "+name+" !";
}

public static void main(String args[]) throws Exception
{
Hello hello = (Hello) UnicastRemoteObject.exportObject(new Server(), 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind(Hello.BIND, hello);
System.out.println("server ready");
}
}

C:\Workspace\RMI\src\ccm\rmi\Client.java

package ccm.rmi;

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

public class Client
{
public static void main(String[] args) throws Exception
{
Registry registry = LocateRegistry.getRegistry("localhost");
Hello hello = (Hello) registry.lookup(Hello.BIND);
System.out.println(hello.sayHello("World"));
}
}

Enfin, je lances un petit fichier de commandes pour compiler les classes, démarrer le registre, le serveur, puis le client :

javac -d C:\Workspace\RMI\bin C:\Workspace\RMI\src\ccm\rmi\*.java
start rmiregistry -J-Djava.rmi.server.codebase=file:///C:/Workspace/RMI/bin/
start java -classpath C:\Workspace\RMI\bin ccm.rmi.Server
java -classpath C:\Workspace\RMI\bin ccm.rmi.Client
pause

NB. la commande "start" permet de lancer la commande dans une nouvelle fenêtre, tu devrais donc avoir trois fenêtres ouvertes : le registre (qui n'affiche rien), le serveur (qui affiche "server ready") et le client (qui affiche "Hello World !").
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 20:53
ok je vais jeter un oeil là dessus, merci beaucoup de ton aide ;)
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 20:57
juste une question si maintenant je veux essayer sur 2 ordinateurs différents... comment faut-il procéder ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 6/10/2013 à 21:05
Il faudrait tester parce que je ne suis pas sûr mais je pense qu'il faudrait mettre le serveur et le registre sur le même ordinateur et le client sur le deuxième ordinateur en changeant "localhost" par le nom d'accès au serveur.

Remarque : les classes Server/Hello devront être sur la machine serveur, les classes Client/Hello sur la machine client.

Remarque : théoriquement il me semble que le registre peut-être sur un troisième ordinateur, mais là ça va commencer à être compliqué à paramétrer.
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 21:07
oki mais au lieu de localhost il faudrait que j'utilise l'ip de l'ordinateur à distance ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 oct. 2013 à 21:13
Normalement avec l'adresse ip ça devrait fonctionner.
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
6 oct. 2013 à 22:53
jai réussi avec ton exemple en local... :) merci

me reste plus qu'a tester à distance...

j'ai essayé vite fait il me dit : access denied... il y a un problème avec le parefeux ? il faut régler un truc ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 oct. 2013 à 23:04
Ça c'est bien possible, d'autant que si j'ai bien compris tu essayes entre un mac et un win7...
Tu devrais regarder la FAQ RMI sur le site d'Oracle : https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/faq.html#firewall

Par défaut le port RMI est 1099 (tu peux t'en assurer en faisant un affichage de l'objet Registry)
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
8 oct. 2013 à 11:48
ok merci je vais essayer ;)
0