Standalone Java SE 17 application accessing EJB in Payara/Glassfish

I can’t get a very simple Java SE 17 application to do a lookup of an Stateless EJB deployed in Payara or Glassfish. Client is very simple : ( never mind the poor code, it gets an exception and are not meant to work)

package client;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Client {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
        Object o = new Object();
        try {
            InitialContext context = new InitialContext(props);
            o = context.lookup("java:global/USer/User-ejb/UserService");
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

The libraries I’m using all come from Payara6 modules and lib directories:

appserv-rt.jar
config-api.jar
gf-client.jar
glassfish-api.jar
glassfish-naming.jar
hk2-api.jar
hk2-config.jar
hk2-core.jar
hk2-locator.jar
hk2-utils.jar
internal-api.jar
	
From Netbeans I use a library  jakarta.jakartaeeapi-10.0.0.jar

Error message is:

java.lang.NullPointerException: Cannot invoke "org.glassfish.internal.api.ORBLocator.getORB()" because "orbHelper" is null
    at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:351)
    at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:358)
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:388)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:333)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:482)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
    at client.Client.main(Client.java:12)
javax.naming.NamingException: Lookup failed for 'java:global/USer/User-ejb/UserService' in SerialContext[myEnv={java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.NullPointerException: Cannot invoke "org.glassfish.internal.api.ORBLocator.getORB()" because "orbHelper" is null]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:496)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
    at client.Client.main(Client.java:12)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.NullPointerException: Cannot invoke "org.glassfish.internal.api.ORBLocator.getORB()" because "orbHelper" is null]
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:338)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:482)
... 3 more
Caused by: java.lang.NullPointerException: Cannot invoke "org.glassfish.internal.api.ORBLocator.getORB()" because "orbHelper" is null
    at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:351)
    at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:358)
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:388)
    t com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:333)

Nothing in the logs of Payara even with increased loglevels.

Any ideas?

I’m using Netbeans 24 and Payara 6.2024-5. I was expecting to find the bean as it is succesfully deployed in Payrar.

After hours of search and trials I came to the conclusion that there is some problems with Payara and standalone-clients.

You should use gf-client.jar FROM THE INSTALLATION’s DIRECTORY in your project. DON’T copy the file! and that’s it!

If you only use that it will work with Glassfish 7.0.21 (that was what I used). Exactly the same code doesn’t work with Payara 6.2024.5 (that was what I used).

For Payara the problem has noting to do with libraries etc., it is just a bug int the Payara environment. If you use the Glassfish version of gf-client.jar it works.