Bonjour,
Comment expliquer que le même code fonctionne parfaitement sous NetBeans 11.2 (idem pour NetBeans 8.2) et pas sous Eclipse 4.13 ?
Voici le contexte :
Une Enterprise Application embraque un EJB Stateless et son client console le tout est déployé sur Glassfish 5.0 et c'est aussi OK sur 4.1.
Code de l'interface Remote :
Code de l'EJB :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 package conv; import javax.ejb.Remote; @Remote public interface ConvertirRemote { public double convertirCelciusToFahrenheit(double t); public double convertirFahrenheitToCelcius(double t); }
Code du client :
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 package conv; import javax.ejb.LocalBean; import javax.ejb.Stateless; @Stateless @LocalBean public class Convertir implements ConvertirRemote { @Override public double convertirCelciusToFahrenheit(double t) { double fahrenheit; fahrenheit = 9.0 / 5.0 * t + 32; return fahrenheit; } @Override public double convertirFahrenheitToCelcius(double t) { double celcius; celcius = (t - 32) * 5.0 / 9.0; return celcius; } }
Note : le menu demande de choisir le mode de conversion et de saisir une valeur.
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 Main { static private ConvertirRemote convertir; public static void main(String[] args) { try { Context ctx = new InitialContext(); convertir = (ConvertirRemote) ctx.lookup("java:global/TemperatureAppli/TemperatureAppliEJB/Convertir"); menu(); } catch (NamingException ne) { System.out.println(ne.getMessage()); } } }
Message affiché lors que l'exécution du client :
Pourtant les logs de Glissfish indiquent bien que l'EJB a été déployé :java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:347)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:354)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:384)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:329)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:477)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at Main.main(Main.java:14)
Lookup failed for 'java:global/TemperatureAppli/TemperatureAppliEJB/Convertir' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl}
Le même code à la virgule près fonctionne parfaitement lorsque l'application cliente est lancée sous NetBeans ![2019-12-03T10:23:26.927+0100] [glassfish 5.0] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=45 _ThreadName=admin-listener(1)] [timeMillis: 1575365006927] [levelValue: 800] [[
Portable JNDI names for EJB Convertir: [java:global/TemperatureAppli/TemperatureAppliEJB/Convertir!conv.ConvertirRemote, java:global/TemperatureAppli/TemperatureAppliEJB/Convertir!conv.Convertir]]]
[2019-12-03T10:23:26.927+0100] [glassfish 5.0] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=45 _ThreadName=admin-listener(1)] [timeMillis: 1575365006927] [levelValue: 800] [[
Glassfish-specific (Non-portable) JNDI names for EJB Convertir: [conv.ConvertirRemote#conv.ConvertirRemote, conv.ConvertirRemote]]]
Ma question :
Est-ce que quelqu'un aurait une explication ?
Merci d'avance pour vos lumière car moi je suis dans le noir le plus complet !
Alain
Partager