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] java.rmi.UnmarshalException


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut [RMI] java.rmi.UnmarshalException
    Bonjour,

    Depuis un JAR, j'accède à une classe distante (d'un projet web) via les RMI. Je fais mes tests en Local depuis mon RSA. (ou eclipse)
    Sur mon projet java (donc mon jar) j'ai fais une réréfence à mon projet web pour que la compilation fonctionne. A l'éxécution pas de soucis le RMI a fonctionné avec succès.

    En revanche, en retirant la référence au projet WEB je me trouve logiquement avec des erreurs de compilation. J'inclus donc les jar contenant les classes nécessaires. La compilation est un succès mais à l'éxécution j'ai l'erreur suivante :

    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
    java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    	java.lang.ClassNotFoundException: com.acticall.fnmf.core.DispatchMakerRemoteImpl_Stub (no security manager: RMI class loader disabled)
    	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    	at com.acticall.fnmf.batchAcp.work.impl.NoInterviewSince30DaysTreatment.doTreatment(NoInterviewSince30DaysTreatment.java:103)
    	at com.acticall.fnmf.batchAcp.work.BatchAcpMain.doTreatments(BatchAcpMain.java:79)
    	at com.acticall.fnmf.batchAcp.work.BatchAcpMain.main(BatchAcpMain.java:33)
    Caused by: java.lang.ClassNotFoundException: com.acticall.fnmf.core.DispatchMakerRemoteImpl_Stub (no security manager: RMI class loader disabled)
    	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:371)
    	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
    	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:197)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    	... 4 more


    Quelqu'un aurait il une bonne idée ?
    Thanks

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    Ah oui j'ai oublié, ma classe DispatchMakerRemoteImpl_Stub existe bien sur le serveur ...

  3. #3
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    une rapide recherche m'a permit de trouver ceci : [RMI] rmic et packages

    Je n'ai pas tout lu mais le problème ressemble beaucoup au tien et a la fin le problème est résuolu

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    Merci de ta réponse ... cependant je ne suis pas sur de bien comprendre la conclusion du problème.

    Si je comprends bien il s'agirait de mettre le package des classes client sur le serveur ? Ou j'ai rien compris .... ?!

  5. #5
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    non je ne pense pas que tu ai a faire cela (et d'ailleur la fin ils ont le client et le serveur dans deux packages différents). En plus mettre tout dans le meme package, ca me gène pas mal d'un point de vue conceptuel (mais c'est encore un autre débat)

    Apparement ce qui gène serait plutot du coté du sécurityManager (code tiré du lien donné plus haut)
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (System.getSecurityManager() == null)
    System.setSecurityManager(new RMISecurityManager());

    Sinon, il se peut également que les stub ne soit pas correctement généré ou pas présent coté client.

    Autre conseil au passage : si c'est la première fois que tu fais du RMI, je te conseil de trouver un exemple simple (ou un tutoriel) qui te permetterai de comprendre comment ca marche.
    De souvenir, la communication RMI n'est pas toujours très simple a mettre en oeuvre et tu n'es pas au bout de tes surprises.

    Encore un conseil : arme toi de patience et bon courage. Si tu as besoin d'aide je pense que le mieu c'est de parler autour d'un exemple plus concret (Si tu as un bout de code qui tourne sous la main n'hésite pas a le faire partager pour qu'on essaye et qu'on voit ce qui ne va pas)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    // Code client

    // J'ai ici besoin des beans stockés sur mon appli distante. J'ai donc packagé les bean distants dans un JAR
    import com.monProjet.bean.references;
    import com.monProjet.bean;

    try {
    //Récupération des propriétés du RMI

    int remotePort = 1095;
    String remoteIp = "localhost"; // ou IP si distant
    String remoteObjectName = "remoteDispatchMaker";

    //System.setSecurityManager(new java.rmi.RMISecurityManager());

    Registry registry = LocateRegistry.getRegistry(remoteIp, remotePort);
    DispatchMakerRemote dispatchMakerRemote = (DispatchMakerRemote) registry.lookup(remoteObjectName);

    if(dispatchMakerRemote != null
    && dispatchMakerRemote.maMethodeDistante(monObjetSerialise)){
    logger.debug("RMI Appel classe distante : SUCCESS");
    } else {
    logger.debug("RMI Appel classe distante : FAILED");
    }
    }
    catch (Exception e) {
    e.printStackTrace();


    Et la c'est le drame ....
    java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
    java.lang.ClassNotFoundException: com.monProjet.core.DispatchMakerRemoteImpl_Stub (no security manager: RMI class loader disabled)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at com.monProjet.batchAcp.work.impl.NoInterviewSince30DaysTreatment.doTreatment(NoInterviewSince30DaysTreatment.java:103)
    at com.monProjet.batchAcp.work.BatchAcpMain.doTreatments(BatchAcpMain.java:79)
    at com.monProjet.batchAcp.work.BatchAcpMain.main(BatchAcpMain.java:33)
    Caused by: java.lang.ClassNotFoundException: com.monProjet.core.DispatchMakerRemoteImpl_Stub (no security manager: RMI class loader disabled)

    }


    Et sur le serveur :

    // Dans la classe d'initialisation

    try{
    Registry reg = java.rmi.registry.LocateRegistry.createRegistry(1095);
    DispatchMakerRemoteImpl dmri = new DispatchMakerRemoteImpl();
    // System.setSecurityManager(new java.rmi.RMISecurityManager());

    reg.bind("remoteDispatchMaker", dmri);
    }
    catch (Exception e) {
    e.printStackTrace();
    }



    // La classe DispatchMakerRemoteImpl

    package com.monProjet.core;
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;

    import com.monProjet.bean.monObjetSerialise;
    import com.monProjet.common.process.DispatchMaker;


    public class DispatchMakerRemoteImpl extends UnicastRemoteObject implements DispatchMakerRemote{
    private static final long serialVersionUID = -5891965407653576892L;

    public DispatchMakerRemoteImpl() throws RemoteException {
    super();
    }

    public boolean maMethodeDistante(monObjetSerialise obj) throws RemoteException {
    try {
    System.out.println(obj.display();
    return true;
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    }
    }


    // L'interface DispatchMakerRemote

    package com.monProjet.core;
    import java.rmi.RemoteException;

    import com.monProjet.bean.monObjetSerialise;

    public interface DispatchMakerRemote extends java.rmi.Remote {
    public boolean maMethodeDistante(monObjetSerialise obj) throws RemoteException;
    }



    Pour générer la souche (donc le stub) :
    C:\Sun\AppServer\jdk\bin>rmic -classpath D:\Workspace\monProjet\WebContent\WEB-INF\classes com.monProjet.core.DispatchMakerRemoteImpl


    Voila, je pense avoir mis l'essentiel ... si quelqu'un peut m'éclairer sur mon problème !

    Le System.setSecurityManager ne change rien ;-)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    J'ai identifié une partie du problème mais je ne parviens pas à le résoudre.

    Le problème intervient quand j'intègre les beans au classpath du client. Du coup mes beans sont à la fois sur le client et sur le serveur.

    C'est peut peut-être çà le problème ... mais si c'est bien çà, je ne vois pas comment le résoudre !!

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

Discussions similaires

  1. [Framework] [RMI] java.rmi.UnmarshalException
    Par YokoSop dans le forum Spring
    Réponses: 12
    Dernier message: 08/12/2010, 15h29
  2. Java rmi java.security.AccessControlException
    Par smokinaces26 dans le forum Java EE
    Réponses: 1
    Dernier message: 11/02/2010, 13h41
  3. [EJB3 Entity] java.rmi.UnmarshalException: ClassNotFoundException
    Par matthieu86 dans le forum Java EE
    Réponses: 1
    Dernier message: 01/03/2009, 17h46
  4. Java.rmi.NotBoundException (rmi execution client)
    Par charles9 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 21/07/2008, 15h10
  5. Réponses: 2
    Dernier message: 16/01/2007, 23h26

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