Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-20787

java:comp/UserTransaction resource not found during CDI Startup event

XMLWordPrintable

      We used CDI jakarta.enterprise.event.Startup event to start CDI bean during server startup which tries to use injected UserTransaction resource :

      @ApplicationScoped
      public class LoadOnStartUpService {
      
          @Resource
          private UserTransaction userTransaction;
      
          public void loadStartups(@Observes @Priority(Interceptor.Priority.APPLICATION) Startup startup) {
            // startup stuff
          }
      }
      

      We then get "NameNotFoundException: java:comp/UserTransaction" exception during server startup:

      2025-07-15 11:35:06,956 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."xpe.ear".WeldEndInitService: org.jboss.msc.service.StartException in service jboss.deployment.unit."xpe.ear".WeldEndInitService: Failed to start service
              at org.jboss.msc@1.5.5.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1609)
              at org.jboss.msc@1.5.5.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1438)
              at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
              at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
              at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
              at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
              at java.base/java.lang.Thread.run(Thread.java:1583)
      Caused by: java.lang.IllegalArgumentException: WFLYWELD0049: Error injecting resource into Jakarta Contexts and Dependency Injection managed bean. Can't find a resource named java:comp/UserTransaction defined on private jakarta.transaction.UserTransaction com.foo.LoadOnStartUpService.userTransaction
              at org.jboss.as.weld@36.0.0.Final//org.jboss.as.weld.services.bootstrap.WeldResourceInjectionServices.resolveResource(WeldResourceInjectionServices.java:225)
              at org.jboss.as.weld@36.0.0.Final//org.jboss.as.weld.services.bootstrap.WeldResourceInjectionServices$1.createResource(WeldResourceInjectionServices.java:170)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.AbstractResourceInjection.getResourceReference(AbstractResourceInjection.java:49)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.AbstractResourceInjection.injectResourceReference(AbstractResourceInjection.java:63)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.util.Beans.injectEEFields(Beans.java:330)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:69)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:49)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:72)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:126)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:165)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.contexts.AbstractContext.get(AbstractContext.java:96)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:106)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bean.ContextualInstanceStrategy$ApplicationScopedContextualInstanceStrategy.get(ContextualInstanceStrategy.java:152)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:68)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverMethodImpl.getReceiver(ObserverMethodImpl.java:381)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverMethodImpl.getReceiverIfExists(ObserverMethodImpl.java:368)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:325)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:298)
              at jakarta.enterprise.api//jakarta.enterprise.inject.spi.ObserverMethod.notify(ObserverMethod.java:142)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.util.Observers.notify(Observers.java:176)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:307)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:293)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:185)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bootstrap.BeanDeploymentModule.fireEvent(BeanDeploymentModule.java:100)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bootstrap.WeldStartup.endInitialization(WeldStartup.java:587)
              at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.bootstrap.WeldBootstrap.endInitialization(WeldBootstrap.java:101)
              at org.jboss.as.weld@36.0.0.Final//org.jboss.as.weld.WeldStartCompletionService.start(WeldStartCompletionService.java:62)
              at org.jboss.msc@1.5.5.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1617)
              at org.jboss.msc@1.5.5.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1580)
              ... 6 more
      Caused by: javax.naming.NameNotFoundException: java:comp/UserTransaction
              at org.jboss.as.naming@36.0.0.Final//org.jboss.as.naming.InitialContext$DefaultInitialContext.findContext(InitialContext.java:174)
              at org.jboss.as.naming@36.0.0.Final//org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:218)
              at org.jboss.as.naming@36.0.0.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:176)
              at org.jboss.as.naming@36.0.0.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:172)
              at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
              at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
              at org.jboss.as.weld@36.0.0.Final//org.jboss.as.weld.services.bootstrap.WeldResourceInjectionServices.resolveResource(WeldResourceInjectionServices.java:223)
              ... 34 more
      

      It looks like a bug. According to CDI 4.0 specification Startup event is fired when container is ready.

              manovotn Matěj Novotný
              petraspetkus Petras Petkus (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: