Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug Report: CDI deployment failure. "Unknown BDAType: UNKNOWN" #7214

Open
TheOnlyAl opened this issue Feb 24, 2025 · 16 comments · May be fixed by #7212
Open

Bug Report: CDI deployment failure. "Unknown BDAType: UNKNOWN" #7214

TheOnlyAl opened this issue Feb 24, 2025 · 16 comments · May be fixed by #7212
Assignees
Labels
Status: Open Issue has been triaged by the front-line engineers and is being worked on verification Type: Bug Label issue as a bug defect

Comments

@TheOnlyAl
Copy link

Brief Summary

Deployment of an EAR fails on Payara 6.2025.2 for a certain configurations:

[#|2025-02-24T15:22:48.897+0000|SEVERE|Payara 6.2025.2|javax.enterprise.system.core|_ThreadID=207;_ThreadName=admin-thread-pool::admin-listener(2);_TimeMillis=1740410568897;_LevelValue=1000;_MessageID=NCLS-CORE-00026;|
  Exception during lifecycle processing
java.lang.IllegalArgumentException: Unknown BDAType: UNKNOWN
        at org.glassfish.weld.DeploymentImpl.rootBDAs(DeploymentImpl.java:287)
        at org.glassfish.weld.DeploymentImpl.addBeanDeploymentArchives(DeploymentImpl.java:275)
        at org.glassfish.weld.DeploymentImpl.createModuleBda(DeploymentImpl.java:904)
        at org.glassfish.weld.DeploymentImpl.scanArchive(DeploymentImpl.java:304)
        at org.glassfish.weld.WeldDeployer.load(WeldDeployer.java:316)
        at org.glassfish.weld.WeldDeployer.load(WeldDeployer.java:152)
        at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:218)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:334)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:580)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:570)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
        at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:272)
        at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:240)
        at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:294)
        at org.glassfish.admin.rest.resources.TemplateListOfResource.createResource(TemplateListOfResource.java:136)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:569)
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:266)
        at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:253)
        at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:696)
        at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:367)
        at org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:335)
        at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:189)
        at org.glassfish.admin.rest.adapter.RestManagementAdapter.service(RestManagementAdapter.java:66)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
        at java.base/java.lang.Thread.run(Thread.java:840)
|#]

[#|2025-02-24T15:22:48.897+0000|SEVERE|Payara 6.2025.2|javax.enterprise.system.core|_ThreadID=207;_ThreadName=admin-thread-pool::admin-listener(2);_TimeMillis=1740410568897;_LevelValue=1000;|
  Exception while loading the app|#]

[#|2025-02-24T15:22:48.904+0000|SEVERE|Payara 6.2025.2|javax.enterprise.system.core|_ThreadID=207;_ThreadName=admin-thread-pool::admin-listener(2);_TimeMillis=1740410568904;_LevelValue=1000;|
  Exception while loading the app : Unknown BDAType: UNKNOWN|#]

[#|2025-02-24T15:22:48.909+0000|INFO|Payara 6.2025.2|org.glassfish.admingui|_ThreadID=150;_ThreadName=admin-thread-pool::admin-listener(1);_TimeMillis=1740410568909;_LevelValue=800;|
  Exception Occurred :Error occurred during deployment: Exception while loading the app : Unknown BDAType: UNKNOWN. Please see server.log for more details.      |#]

One example is:

EAR
|- WAR (Only Static files. No CDI)
|- WAR-CDI (With CDI)
|- lib/JAR (With CDI)

Seems this Bug was introduced in #7032 @lprimak

Expected Outcome

Deployment should not fail.

Current Outcome

Deplyoment fails with error from above.

Reproducer

https://github.com/TheOnlyAl/cdi-unknownbda

Tested with Maven 3.9.9.
Build the project and try to deploy the ear file: cdi-unknownbda-ear-1.0.0.ear

The produced EAR can be deployed using Payara 6.2025.1. With version 6.2025.2 it fails.

Hope this helps.

Operating System

Docker with WSL and Windows 10

JDK Version

JDK 17

Payara Distribution

Payara Server Full Profile

@TheOnlyAl TheOnlyAl added Status: Open Issue has been triaged by the front-line engineers and is being worked on verification Type: Bug Label issue as a bug defect labels Feb 24, 2025
@lprimak
Copy link
Contributor

lprimak commented Feb 24, 2025

Great reproducer, thanks!
I am able to find the issue reported by @mkarg as well here

@TheOnlyAl
Copy link
Author

Hi. I tried your Payara (https://nexus.hope.nyc.ny.us/repository/maven-releases/fish/payara/distributions/payara/6.2025.2-2/payara-6.2025.2-2.zip) build for my deployment (not the reproducer), and now i get a different exception.

Is this maybe another bug or related to this?

[2025-02-25T07:25:30.660+0100] [Payara 6.2025.3] [SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=85 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1740464730660] [levelValue: 1000] [[
  Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:null -- null
        at com.sun.enterprise.deployment.Application.getPostConstructDescriptors(Application.java:624)
        at com.sun.enterprise.deployment.BundleDescriptor.getPostConstructDescriptorByClass(BundleDescriptor.java:491)
        at com.sun.enterprise.deployment.BundleDescriptor.getInjectionInfoByClass(BundleDescriptor.java:479)
        at com.sun.enterprise.deployment.Application.getInjectionInfoByClass(Application.java:661)
        at org.glassfish.weld.services.InjectionServicesImpl.registerInjectionTarget(InjectionServicesImpl.java:248)
        at org.jboss.weld.manager.InjectionTargetFactoryImpl.postProcess(InjectionTargetFactoryImpl.java:159)
        at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:94)
        at org.jboss.weld.bean.ManagedBean.<init>(ManagedBean.java:102)
        at org.jboss.weld.bean.ManagedBean.of(ManagedBean.java:82)
        at org.jboss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(AbstractBeanDeployer.java:275)
        at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:278)
        at org.jboss.weld.bootstrap.BeanDeployer.createClassBeans(BeanDeployer.java:256)
        at org.jboss.weld.bootstrap.BeanDeployment.createBeans(BeanDeployment.java:256)
        at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:435)
        at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:87)
        at org.glassfish.weld.WeldDeployer.startWeldBootstrap(WeldDeployer.java:586)
        at org.glassfish.weld.WeldDeployer.processApplicationLoaded(WeldDeployer.java:532)
        at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:421)
        at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:135)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:344)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:573)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:570)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
        at org.glassfish.admin.rest.resources.admin.CommandResource.executeCommand(CommandResource.java:409)
        at org.glassfish.admin.rest.resources.admin.CommandResource.execCommandMultInMultOut(CommandResource.java:258)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:569)
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:266)
        at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:253)
        at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:696)
        at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:367)
        at org.glassfish.admin.rest.adapter.JerseyContainerCommandService$3.service(JerseyContainerCommandService.java:179)
        at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:189)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
        at java.base/java.lang.Thread.run(Thread.java:840)
]]

[2025-02-25T07:25:30.661+0100] [Payara 6.2025.3] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=85 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1740464730661] [levelValue: 1000] [[
  Exception while loading the app]]

[2025-02-25T07:25:30.745+0100] [Payara 6.2025.3] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=85 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1740464730745] [levelValue: 1000] [[
  Exception while loading the app : CDI deployment failure:null -- null]]

@TheOnlyAl
Copy link
Author

I just checked and the reproducer will also generate this error.

It seems to happen when getPostConstructDescriptorByClass(String className, JndiNameEnvironment jndiNameEnv) is called with className="org.glassfish.jersey.ext.cdi1x.servlet.internal.CdiExternalRequestScope" and a jndiNameEnvof type com.sun.enterprise.deployment.Application which throws an UnsupportedOperationException on jndiNameEnv.getPostConstructDescriptors().

@lprimak
Copy link
Contributor

lprimak commented Feb 25, 2025

Please be patient. I have not figured this one out yet

@lprimak
Copy link
Contributor

lprimak commented Feb 25, 2025

Thank you for your reproducer and your patience.
I was able to figure out / fix the bugs uncovered by the new implementation.
Can you please try the latest test version?

https://nexus.hope.nyc.ny.us/repository/maven-releases/fish/payara/distributions/payara/6.2025.2-3/payara-6.2025.2-3.zip

Thank you

@TheOnlyAl
Copy link
Author

Hi. I did not intend to pressure you in any way and I just tried to provide as much information as possible. I am thankful for your work!

Sadly it seems that your fix did not fix the CDI deployment failure:null -- nullProblem with our deployments. I saw that the reproducer is now deployable and functional. So it seems i need to try to build another reproducer for you.

@TheOnlyAl
Copy link
Author

Seems I found the problem. You just need to have an EJB module in the EAR file.
I was a bit lazy and did not create a new producer. But i updated the existing project. Just use version 1.1.0!
https://github.com/TheOnlyAl/cdi-unknownbda/tree/cdi-unknownbda-1.1.0

This will produce the error from above.

@lprimak
Copy link
Contributor

lprimak commented Feb 26, 2025

Thank you for your quick turn-around and reproducer as well. This is very helpful.
I just didn't want you to test the "older" version unnecessarily, that's why my "patience" comment.
No pressure is felt, thank you!

Also, I am sorry for the bit of a short-term pain, but in the long-term, this is leading to #7165 performance,
which should benefit everyone. I am hoping for at least 4X deploy performance improvements.

Honestly I am pretty shocked that EARs are used that widely with the newest versions of Payara. It's a a good sign.

@lprimak
Copy link
Contributor

lprimak commented Feb 26, 2025

@TheOnlyAl
Copy link
Author

The good news: Deployment works now for both my applications under test.
The bad news: One of the application now throws a similar exception during runtime.

        at org.glassfish.jersey.server.ServerRuntime$Responder.processExceptionWithMapper(ServerRuntime.java:606) [jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$Responder.mapException(ServerRuntime.java:571) [jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:447) [jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:282) [jersey-server.jar:?]
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) [jersey-common.jar:?]
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) [jersey-common.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:292) [jersey-common.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:274) [jersey-common.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:244) [jersey-common.jar:?]
        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:266) [jersey-common.jar:?]
        at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:253) [jersey-server.jar:?]
        at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:696) [jersey-server.jar:?]
        at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394) [jersey-container-servlet-core.jar:?]
        at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) [jersey-container-servlet-core.jar:?]
        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358) [jersey-container-servlet-core.jar:?]
        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312) [jersey-container-servlet-core.jar:?]
        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) [jersey-container-servlet-core.jar:?]
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1554) [web-core.jar:?]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:259) [web-core.jar:?]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:166) [web-core.jar:?]
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757) [web-core.jar:?]
        at org.apache.catalina.core.StandardPipeline.doChainInvoke(StandardPipeline.java:581) [web-core.jar:?]
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) [web-glue.jar:?]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158) [web-core.jar:?]
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757) [web-core.jar:?]
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577) [web-core.jar:?]
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:369) [web-core.jar:?]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:239) [web-core.jar:?]
        at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520) [kernel.jar:?]
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217) [kernel.jar:?]
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535) [nucleus-grizzly-all.jar:?]
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515) [nucleus-grizzly-all.jar:?]
        at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: jakarta.ejb.EJBException: jakarta.ejb.EJBException: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:399) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90) ~[ejb-container.jar:?]
        at jdk.proxy131/jdk.proxy131.$Proxy1011.doSomething(Unknown Source) ~[?:?]
        at de.adtelligence.redacted.__EJB31_Generated__SomeJaxRSResource__Intf____Bean__.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at de.adtelligence.redacted.SomeJaxRSResource$Proxy$_$$_Weld$EnterpriseProxy$.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) ~[jersey-server.jar:?]
        ... 42 more
Caused by: jakarta.ejb.EJBException: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:653) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:395) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90) ~[ejb-container.jar:?]
        at jdk.proxy131/jdk.proxy131.$Proxy1011.doSomething(Unknown Source) ~[?:?]
        at de.adtelligence.redacted.__EJB31_Generated__SomeJaxRSResource__Intf____Bean__.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at de.adtelligence.redacted.SomeJaxRSResource$Proxy$_$$_Weld$EnterpriseProxy$.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) ~[jersey-server.jar:?]
        ... 42 more
Caused by: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:473) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:651) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:395) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90) ~[ejb-container.jar:?]
        at jdk.proxy131/jdk.proxy131.$Proxy1011.doSomething(Unknown Source) ~[?:?]
        at de.adtelligence.redacted.__EJB31_Generated__SomeJaxRSResource__Intf____Bean__.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at de.adtelligence.redacted.SomeJaxRSResource$Proxy$_$$_Weld$EnterpriseProxy$.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) ~[jersey-server.jar:?]
        ... 42 more
Caused by: java.lang.reflect.InvocationTargetException
        at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1725) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:419) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:651) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:395) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90) ~[ejb-container.jar:?]
        at jdk.proxy131/jdk.proxy131.$Proxy1011.doSomething(Unknown Source) ~[?:?]
        at de.adtelligence.redacted.__EJB31_Generated__SomeJaxRSResource__Intf____Bean__.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at de.adtelligence.redacted.SomeJaxRSResource$Proxy$_$$_Weld$EnterpriseProxy$.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) ~[jersey-server.jar:?]
        ... 42 more
Caused by: java.lang.UnsupportedOperationException
        at com.sun.enterprise.deployment.Application.getPostConstructDescriptors(Application.java:624) ~[dol.jar:?]
        at com.sun.enterprise.deployment.BundleDescriptor.getPostConstructDescriptorByClass(BundleDescriptor.java:491) ~[dol.jar:?]
        at com.sun.enterprise.deployment.BundleDescriptor.getInjectionInfoByClass(BundleDescriptor.java:479) ~[dol.jar:?]
        at com.sun.enterprise.deployment.Application.getInjectionInfoByClass(Application.java:661) ~[dol.jar:?]
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:436) ~[container-common.jar:?]
        at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:165) ~[weld-integration.jar:?]
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:46) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:71) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:117) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:161) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.contexts.unbound.DependentContextImpl.get(DependentContextImpl.java:64) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:680) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:703) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.glassfish.weld.services.JCDIServiceImpl.createInterceptorInstance(JCDIServiceImpl.java:424) ~[weld-integration.jar:?]
        at com.sun.ejb.containers.BaseContainer.createEjbInterceptors(BaseContainer.java:1800) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.createEmptyContextAndInterceptors(BaseContainer.java:1689) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1703) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:419) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:651) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:395) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210) ~[ejb-container.jar:?]
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90) ~[ejb-container.jar:?]
        at jdk.proxy131/jdk.proxy131.$Proxy1011.doSomething(Unknown Source) ~[?:?]
        at de.adtelligence.redacted.__EJB31_Generated__SomeJaxRSResource__Intf____Bean__.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106) ~[weld-osgi-bundle.jar:5.0.1.payara-p1]
        at de.adtelligence.redacted.SomeJaxRSResource$Proxy$_$$_Weld$EnterpriseProxy$.doSomething(Unknown Source) ~[SomeJaxRSResource.class:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) ~[jersey-server.jar:?]
        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) ~[jersey-server.jar:?]
        ... 42 more
]]

The problem in the app from above is when i call a REST Service which @Injects a @Stateless EJB into a JAX-RS @Resource and then calls a method on it.

I am still trying to update the reproducer but somehow it is rather tricky. But maybe you will already have an idea.

@TheOnlyAl
Copy link
Author

I found some way to reproduce a similar problem. I just added some bean validation to an EJB:
https://github.com/TheOnlyAl/cdi-unknownbda/tree/cdi-unknownbda-1.2.0

If you deploy this and visit: {payaraHost}/cdi-unknownbda-war-cdi/ you will get an error:

[2025-02-27T12:21:19.647+0100] [Payara 6.2025.3] [WARNING] [] [jakarta.enterprise.web] [tid: _ThreadID=313 _ThreadName=http-thread-pool::http-listener-1(15)] [timeMillis: 1740655279647] [levelValue: 900] [[
  StandardWrapperValve[de.adtelligence.payara.war.HelloServlet]: Servlet.service() for servlet de.adtelligence.payara.war.HelloServlet threw exception
jakarta.ejb.EJBException: jakarta.ejb.EJBException: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:399)
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2607)
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2024)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90)
        at jdk.proxy131/jdk.proxy131.$Proxy734.saySomething(Unknown Source)
        at de.adtelligence.payara.ejb.__EJB31_Generated__LocalServiceBean__Intf____Bean__.saySomething(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:569)
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:410)
        at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:133)
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)
        at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68)
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106)
        at de.adtelligence.payara.ejb.LocalServiceBean$Proxy$_$$_Weld$EnterpriseProxy$.saySomething(Unknown Source)
        at de.adtelligence.payara.war.HelloServlet.doGet(HelloServlet.java:26)
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1554)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:259)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:166)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:369)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:239)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: jakarta.ejb.EJBException: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:653)
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219)
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:395)
        ... 48 more
Caused by: jakarta.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:473)
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:651)
        ... 50 more
Caused by: java.lang.reflect.InvocationTargetException
        at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1725)
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:419)
        ... 51 more
Caused by: java.lang.UnsupportedOperationException
        at com.sun.enterprise.deployment.Application.getPostConstructDescriptors(Application.java:624)
        at com.sun.enterprise.deployment.BundleDescriptor.getPostConstructDescriptorByClass(BundleDescriptor.java:491)
        at com.sun.enterprise.deployment.BundleDescriptor.getInjectionInfoByClass(BundleDescriptor.java:479)
        at com.sun.enterprise.deployment.Application.getInjectionInfoByClass(Application.java:661)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:436)
        at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:165)
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:46)
        at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:71)
        at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:117)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:161)
        at org.jboss.weld.contexts.unbound.DependentContextImpl.get(DependentContextImpl.java:64)
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:680)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:703)
        at org.glassfish.weld.services.JCDIServiceImpl.createInterceptorInstance(JCDIServiceImpl.java:424)
        at com.sun.ejb.containers.BaseContainer.createEjbInterceptors(BaseContainer.java:1800)
        at com.sun.ejb.containers.BaseContainer.createEmptyContextAndInterceptors(BaseContainer.java:1689)
        at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1703)
        ... 52 more
]]

@lprimak
Copy link
Contributor

lprimak commented Feb 27, 2025

Thank you! Looks like a similar issue to the last one. I'll go through that file to make sure that I get all similar code paths.

@lprimak
Copy link
Contributor

lprimak commented Feb 27, 2025

I think we are getting close. Thanks again for the help and quick turnaround.

@lprimak
Copy link
Contributor

lprimak commented Feb 27, 2025

@TheOnlyAl
Copy link
Author

Well, it seems that did it. Deployment seems fine and i used/tested the deployed Application for a few minutes and no injection error happened!

I will come back if something will pop up, otherwise it seems to be fixed. Thanks!

@lprimak
Copy link
Contributor

lprimak commented Feb 28, 2025

Thanks for all your help tracking this down. It was not easy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Open Issue has been triaged by the front-line engineers and is being worked on verification Type: Bug Label issue as a bug defect
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants