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 : 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 de l'EJB :
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;
    }
}
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
 
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());
        }
    }
}
Note : le menu demande de choisir le mode de conversion et de saisir une valeur.
Message affiché lors que l'exécution du client :
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}
Pourtant les logs de Glissfish indiquent bien que l'EJB a été déployé :
[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]]]
Le même code à la virgule près fonctionne parfaitement lorsque l'application cliente est lancée sous NetBeans !
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