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

Entrée/Sortie Java Discussion :

RMI : plantage suite à passage JRE 1.5 vers JRE 1.6


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut RMI : plantage suite à passage JRE 1.5 vers JRE 1.6
    Bonjour,

    J'ai un problème sur mon application Java depuis que j'essaye de la faire tourner sur une JRE 1.6

    IMPORTANT : L'application tourne parfaitement sur une JRE 1.5

    (volontairement pour pas surcharger le topic, j'ai pas mis l'intégralité de mes lignes de code).

    Dans le détail, je fais tout d'abord le démarrage de la Registry RMI ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LocateRegistry.createRegistry(port);
    NamingManager.setInitialContextFactoryBuilder(new InitialServerContextFactory());
    NamingManager.getInitialContext(environment);
    (avec environment : une hastable contenant HOST et PORT)

    Puis, j'ai une classe qui implémente Context :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class InitialServerContext implements Context
    {
     
        public void bind(String name, Object obj) throws NamingException
        {
    		getRMIContext().bind("rmi://" + mServer + ':' + mPort + '/' + name, obj);
    	}
     
        static Context getRMIContext() throws NamingException
    	{
    		return NamingManager.getURLContext("rmi", null);
    	}	
    }
    La ligne qui plante en JRE 1.6 est le bind :
    getRMIContext().bind("rmi://" + mServer + ':' + mPort + '/' + name, obj);


    Quels sont les changements entre la 1.5 et la 1.6 au niveau RMI ?
    Pourquoi le bind de mon appli plante ?

    Si c'est nécessaire, je peux vous fournir ma classe InitialServerContextFactory.java

    Merci pour vos réponses...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Quelle est l'exception soulevée ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    L'exception est :

    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
     
    java.lang.NullPointerException
            at com.sun.jndi.rmi.registry.RegistryContext.<init>(Unknown Source)
            at com.sun.jndi.url.rmi.rmiURLContext.getRootURLContext(Unknown Source)
            at com.sun.jndi.toolkit.url.GenericURLContext.bind(Unknown Source)
            at com.xxx.aes.naming.InitialServerContext.bind(InitialServerContext.java:231)
            at com.xxx.aes.naming.InitialServerContextFactory.getInitialContext(InitialServerContextFactory.java:104)
            at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
            at com.xxx.aes.server.NamingServer.start(NamingServer.java:65)
            at com.xxx.aes.server.ApplicationServer.start(ApplicationServer.java:34)
            at com.xxx.arm.server.ARMServer.start(ARMServer.java:57)
            at com.xxx.arm.server.cli.launcher.CLILauncher.startInternal(CLILauncher.java:39)
            at com.xxx.aes.cli.launcher.AbstractCLILauncher.startServer(AbstractCLILauncher.java:152)
            at com.xxx.aes.cli.launcher.AbstractCLILauncher.process(AbstractCLILauncher.java:97)
            at com.xxx.arm.server.cli.launcher.CLILauncher.main(CLILauncher.java:33)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    La classe NamingManager ne parvient pas à trouver la factory qui crée le contexte.

    Tu devrais vérifier que tu appelles bien le NamingManager.setInitialContextFactoryBuilder(...).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Je confirme bien que je l'appelles bien (comme cité dans dans mon premier post).

    Voici ma factory :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    public class InitialServerContextFactory implements InitialContextFactory, InitialContextFactoryBuilder
    {
        private static Hashtable contexts = new Hashtable();
     
        public InitialContextFactory createInitialContextFactory(Hashtable environment) throws NamingException
        {
            if (environment != null)
            {
                String factory = (String)environment.get(InitialContext.INITIAL_CONTEXT_FACTORY);
                if (factory != null)
                {
                    if (!InitialServerContext.class.getName().equals(factory))
                    {
                        try
                        {
                            return (InitialContextFactory)Class.forName(factory).newInstance();
                        }
                        catch (Throwable throwable)
                        {
                            throw new NamingException(throwable.getMessage());
                        }
     
                    }
                }
            }
     
            return this;
        }
     
        public Context getInitialContext(Hashtable environment) throws NamingException
        {
            if (environment == null)
            {
                environment = new Hashtable(2);
            }
     
            Object server = environment.get(InitialServerContext.ENV_SERVER_NAME);
            Object port   = environment.get(InitialServerContext.ENV_SERVER_PORT);
     
            String contextid = null;
            if (server == null || port == null)
            {
                contextid = "default_context";
            }
            else
            {
                contextid = server.toString() + "_" + port.toString();
            }
     
            Context context = (Context)contexts.get(contextid);
     
            if (context == null)
            {
                String type = (String)environment.get(InitialServerContext.ENV_CONTEXT_TYPE);
                if (type != null && type.equals(InitialServerContext.LOCAL_CONTEXT_TYPE))
                {
                    // Server context
                    context = new InitialServerContext("java:comp/env", environment);
     
                    try
                    {
                        RemoteContext remote = new RemoteContextRMI(environment);
                        context.bind("java:comp/env/"+RemoteContext.BINDING, remote);
                    }
                    catch (RemoteException remoteException)
                    {
                        throw new NamingException(remoteException.getMessage());
                    }
     
                    contexts.put("default_context", context);
                }
                else
                {
                    // Remote client context
                    context = new RMIContext(environment);
                }
     
                contexts.put(contextid, context);
            }
     
            return context;
        }
    }

Discussions similaires

  1. [débutant]Passage GUI de Swing vers SWT
    Par Méta dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 04/05/2006, 13h29
  2. Pb de select suite à migration d'oracle 8i vers 10G2
    Par childeric dans le forum Oracle
    Réponses: 6
    Dernier message: 19/01/2006, 12h52
  3. Réponses: 2
    Dernier message: 24/03/2005, 10h20
  4. Réponses: 2
    Dernier message: 17/02/2005, 13h48
  5. Passage du type integer vers varchar sur clé primaire
    Par GMI dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2005, 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