glassfish icon indicating copy to clipboard operation
glassfish copied to clipboard

AutoDisposableGlassFish failure: no CommandRunner implementation available

Open dmatej opened this issue 3 months ago • 2 comments

Description

Unfortunately we have two CommandRunner interfaces, each has just single implementation:

  • public class CommandExecutorImpl implements org.glassfish.embeddable.CommandRunner in admin-cli
  • public class CommandRunnerImpl implements org.glassfish.api.admin.CommandRunner<AdminCommandJob>in glassfish-api

I guess embedded could use the second one directly, however the glassfish-api is not on the classpath of glassfish-osgi-bootstrap (where is the AutoDisposableGlassFish class). So there will be more work, perhaps it would make sense to merge those two interfaces and create new implementation for embedded?

Noticed in ejb_group_embedded test execution log:

runclient-own:
     [java] .......... Testing module: ejb-ejb32-embedded-autoclose-ejb
     [java] Sep 17, 2025 12:18:11 AM jakarta.enterprise.system.container.ejb.org.glassfish.ejb.embedded
     [java] INFO: [EJBContainerProviderImpl] Using installation location /home/dmatej/work/repo/git/glassfish-gama/target/glassfish7/glassfish
     [java] Sep 17, 2025 12:18:11 AM jakarta.enterprise.system.container.ejb.org.glassfish.ejb.embedded
     [java] INFO: [EJBContainerProviderImpl] Using config file location: file:/tmp/domain6865137631054793019xml
     [java] Sep 17, 2025 12:18:11 AM jakarta.enterprise.system.container.ejb.org.glassfish.ejb.embedded
     [java] INFO: [EJBContainerProviderImpl] Using runtime class: class org.glassfish.main.boot.embedded.EmbeddedGlassFishRuntime
     [java] ERROR calling EJB:Sep 17, 2025 12:18:12 AM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyJars
     [java] 
     [java] Generating report at        /home/dmatej/work/repo/git/glassfish-gama/appserver/tests/appserv-tests/test_results.xmlINFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default: DerbyDB home is not set.
     [java] Reporter exception occurred!
     [java] in flushAll , creating new testSuiteHash
     [java] 
     [java] Sep 17, 2025 12:18:12 AM com.sun.enterprise.v3.server.SystemTasksImpl postConstruct
     [java] INFO: Loaded server named: server
     [java] jakarta.ejb.EJBException: org.glassfish.embeddable.GlassFishException: java.lang.NullPointerException: Cannot invoke "org.glassfish.embeddable.CommandRunner.run(String, String[])" because "commandRunner" is null
     [java]     at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createContainer(EJBContainerProviderImpl.java:231)
     [java]     at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:120)
     [java]     at jakarta.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:91)
     [java]     at jakarta.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:71)
     [java]     at com.acme.Client.test(Client.java:56)
     [java]     at com.acme.Client.main(Client.java:43)
     [java] Caused by: org.glassfish.embeddable.GlassFishException: java.lang.NullPointerException: Cannot invoke "org.glassfish.embeddable.CommandRunner.run(String, String[])" because "commandRunner" is null
     [java]     at org.glassfish.main.boot.embedded.EmbeddedGlassFishRuntime.newGlassFish(EmbeddedGlassFishRuntime.java:110)
     [java]     at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createContainer(EJBContainerProviderImpl.java:198)
     [java]     ... 5 more
     [java] Caused by: java.lang.NullPointerException: Cannot invoke "org.glassfish.embeddable.CommandRunner.run(String, String[])" because "commandRunner" is null
     [java]     at org.glassfish.main.boot.embedded.AutoDisposableGlassFish.<init>(AutoDisposableGlassFish.java:77)
     [java]     at org.glassfish.main.boot.embedded.EmbeddedGlassFishRuntime.newGlassFish(EmbeddedGlassFishRuntime.java:103)
     [java]     ... 6 more
     [java] java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
     [java]     at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
     [java]     at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
     [java]     at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
     [java]     at java.base/java.util.Objects.checkIndex(Objects.java:361)
     [java]     at java.base/java.util.ArrayList.get(ArrayList.java:427)
     [java]     at com.acme.Client.test(Client.java:67)
     [java]     at com.acme.Client.main(Client.java:43)
     [java] java.lang.NullPointerException: Cannot invoke "String.trim()" because "id" is null
     [java]     at com.sun.ejte.ccl.reporter.Reporter.setTestSuite(Reporter.java:68)
     [java]     at com.sun.ejte.ccl.reporter.SimpleReporterAdapter.printStatus(SimpleReporterAdapter.java:130)
     [java]     at com.sun.ejte.ccl.reporter.SimpleReporterAdapter.printSummary(SimpleReporterAdapter.java:188)
     [java]     at com.acme.Client.main(Client.java:47)

Based on my paper, this test never succeeded since GlassFish6, maybe it did long before.

dmatej avatar Sep 16 '25 22:09 dmatej

What's exactly the issue, @dmatej ? Embedded GlassFish doesn't pass the ejb-ejb32-embedded-autoclose-ejb tests? And at least since GlassFish 6 it never passed them? Is that how to reproduce the issue you described?

OndroMih avatar Sep 17 '25 14:09 OndroMih

Related a bit with #25790 , because I was surprised by this again. At least, I would like to understand what is the problem here, and probably fix it. Why other tests in the same set of tests don't fail? In #25790 I improved the exception a bit, so instead of NPE it throws IllegalStateException describing what happened, but ...

dmatej avatar Nov 21 '25 22:11 dmatej