Java rmi tuto oracle

Résolu
capa57 Messages postés 383 Statut Membre -  
capa57 Messages postés 383 Statut Membre -
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

7 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. capa57 Messages postés 383 Statut Membre 13
     
    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
  3. capa57 Messages postés 383 Statut Membre 13
     
    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
    1. capa57 Messages postés 383 Statut Membre 13
       
      hummm merci

      mais je comprends pas ce que je dois faire :(
      0
  4. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. capa57 Messages postés 383 Statut Membre 13
     
    ok je vais jeter un oeil là dessus, merci beaucoup de ton aide ;)
    0
  7. capa57 Messages postés 383 Statut Membre 13
     
    juste une question si maintenant je veux essayer sur 2 ordinateurs différents... comment faut-il procéder ?
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
    2. capa57 Messages postés 383 Statut Membre 13
       
      oki mais au lieu de localhost il faudrait que j'utilise l'ip de l'ordinateur à distance ?
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Normalement avec l'adresse ip ça devrait fonctionner.
      0
  8. capa57 Messages postés 383 Statut Membre 13
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Ç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
    2. capa57 Messages postés 383 Statut Membre 13
       
      ok merci je vais essayer ;)
      0