IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Rmi]CastException


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut [Rmi]CastException
    tout d'abord salut,

    Je suis en train de creer un serveur RMI et lorsque je veux enregistrer l'objet sur le serveur ca me jette en l'air...
    voila le code du serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class StartServeur {
     
        public static void main(String [] args) throws Exception {
            try { java.rmi.registry.LocateRegistry.createRegistry(1099); } 
            catch(Exception e) { System.err.println("un registre RMI est déjà existant-> erreur: "+e); }
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new RMISecurityManager());
            }
            ServeurGestionDesObjects serv = new ServeurGestionDesObjects();
            Naming.rebind("Serveur", serv);
        }
    }
    la procédure cliente appelant le serveur interfacé par l'interface InterMethodeServeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class RMICreerObjetSurServeur extends UnicastRemoteObject implements InterMethodeClient{
    public RMICreerObjetSurServeur() throws java.rmi.RemoteException {
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new RMISecurityManager());
            }
            try {
                InterMethodeServeur ims = (InterMethodeServeur)Naming.lookup("rmi://192.168.0.3/Serveur");
            } catch(Exception e) { System.err.println("Serveur non localisé, erreur: "+e); }
        }
            try {
                ims.enregistrement(this);  // <-- L'erreur vient d'ici
            } catch (Exception e) { System.err.println("Enregistrement erreur: "+e); }
    l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface InterMethodeServeur extends Remote {
        public void enregistrement(RMICreerObjetSurServeur rmiCreatObj) throws RemoteException;
        public void deenregistrement(int position) throws RemoteException;   
    }
    Et voici l'erreur que ca me renvoit, dc j'vois pas pkoi il me met ca, vous me direz ca fait longtps que j'suis dessus dc j'vois p'tre pas l'erreur qui est surement grosse comme une maison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Enregistrement erreur: java.lang.IllegalArgumentException: argument type mismatch

  2. #2
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    au fait le titre il n'a rien à voir ! lol

  3. #3
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void enregistrement(RMICreerObjetSurServeur rmiCreatObj) throws RemoteException;
    Ta une classe qui la redefini cette methode, qui implemente InterMethodeServeur :
    parce que la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InterMethodeServeur ims = (InterMethodeServeur)Naming.lookup("rmi://192.168.0.3/Serveur");
    Je pense que tu devrais caster avec une classe et pas avec l'interface InterMethodeServeur. Sinon quand t'appelle enregistrement(this), la methode n'a pas de corps (vu que tu caste en interface).

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Bha justement non, si j'fais ca ca me connecte pas au serveur.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    car classe ServeurGestionDesObjects (qui possede la methode enregistrer()) implémente l'interface distante InterMethodeServeur. Cela permet de typer la référence distante par le biais de l'interface

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ca vient surement de la.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InterMethodeServeur ims = (InterMethodeServeur)Naming.lookup("rmi://192.168.0.3/Serveur");
    Pourquoi tu caste pas en ServeurGestionDesObjects ?

    Je m'y connais pas trop en RMI , mais j'essaye de voir qd meme pourquoi ca marche pas .

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Non non, en rmi ca se caste ainsi.. Ca vient d'ailleur, mais où ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    T'es sur que l'erreur vient de l'appel à enregistrement et non pas d'une instruction dans le corps de cette méthode??

    ça dis koi si tu fais e.printStackTrace(); plutot que System.err.println("Enregistrement erreur: "+e);

  9. #9
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Si ca peut t'aider :
    http://forum.java.sun.com/thread.jsp?thread=502844&forum=4&message=2379241
    Un erreur java.lang.IllegalArgumentException: argument type mismatch , apparemment a cause de l'utilisation de different ClassLoader (donc pour toi peut etre de RMISecurityManager).

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    bha disons que je rentre meme pas dans enregistrement c'est là le probleme...
    voila l'exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    java.lang.IllegalArgumentException: argument type mismatch
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:324)
            at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
            at sun.rmi.transport.Transport$1.run(Transport.java:148)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
            at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
            at java.lang.Thread.run(Thread.java:534)
            at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
            at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
            at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133)
            at Serveur.ServeurGestionDesObjects_Stub.enregistrement(Unknown Source)
            at Client.rmi.RMICreerObjetSurServeur.enregistrementObjet(RMICreerObjetSurServeur.java:43)
            at Client.rmi.RMICreerObjetSurServeur.<init>(RMICreerObjetSurServeur.java:24)
            at Client.desktop.EditeurLineColor.initRMI(EditeurLineColor.java:85)
    [...]

  11. #11
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Bha en fait le RMISecurityManager il permet le chargement dynamique de classe et donc permet de transmettre des objects inconnus par le serveur

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    C'est bon j'ai trouvé...
    en fait le enregistrer il doit prendre comme paramettre un InterMethodeClient et non un RMICreerObjetClient car c'est le meme principe que pour le lookup du serveur...
    Ct tellement gros que je l'ai pas vu, merci qd meme a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RMI] AccessControlException
    Par taofoo dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 19/09/2007, 00h56
  2. [RMI] Impossible de lancer mon serveur
    Par Dahu dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 11/06/2006, 09h17
  3. RMI:Client Windows Serveur Unix
    Par abd21 dans le forum CORBA
    Réponses: 1
    Dernier message: 10/06/2004, 12h41
  4. [Info] Socket vs RMI
    Par Erok dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 18/05/2004, 16h00
  5. [rmi] Comment exécuter rmic sous Jbuilder9
    Par ensi dans le forum JBuilder
    Réponses: 4
    Dernier message: 27/03/2004, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo