IBM Support

PH27629: CDI RESOURCE INJECTION OF MANAGEDEXECUTORSERVICE

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • When an object is registered in JNDI as multiple types, trying
    to perform @Resource injection from inside a CDI-managed bean
    would cause validation to fail in some cases.
    https://github.com
    /OpenLiberty/open-liberty/pull/13055
    
    Example: using a separate
    ManagedExecutorService (not the default one) with CDI.
    The code
    looks like this:
    @Dependent
    class ResourcesProducer
    {
    @Resource(lookup =
    "concurrent/sampleExecutor")
    @Produces
    private
    ManagedExecutorService sampleExecutor;
    }
    This gives to the
    following deployment error:
    Caused by:
    javax.enterprise.inject.spi.DefinitionException: CWOWB1007E:
    The producer field,
    ch.css.sample.srv.ejb.ResourcesProducer.sampleExecutor, has
    type javax.enterprise.concurrent.ManagedExecutorService, which
    does not match the type of the injected object.
    at com.ibm.ws.cd
    i.impl.weld.injection.BdaInjectionServicesImpl.throwDefinitionEx
    ception(BdaInjectionServicesImpl.java:103)
    at com.ibm.ws.cdi.imp
    l.weld.injection.BdaInjectionServicesImpl.validateJndiLookup(Bda
    InjectionServicesImpl.java:195)
    at com.ibm.ws.cdi.impl.weld.inje
    ction.BdaInjectionServicesImpl.validateJndiLookup(BdaInjectionSe
    rvicesImpl.java:137)
    at com.ibm.ws.cdi.impl.weld.injection.BdaIn
    jectionServicesImpl.registerResourceInjectionPoint(BdaInjectionS
    ervicesImpl.java:342)
    at org.jboss.weld.injection.ResourceInject
    ionFactory$ResourceResourceInjectionProcessor.getResourceReferen
    ceFactory(ResourceInjectionFactory.java:386)
    at org.jboss.weld.i
    njection.ResourceInjectionFactory$ResourceResourceInjectionProce
    ssor.getResourceReferenceFactory(ResourceInjectionFactory.java:3
    79)
    at org.jboss.weld.injection.ResourceInjectionFactory$Resourc
    eInjectionProcessor.createFieldResourceInjection(ResourceInjecti
    onFactory.java:216)
    at org.jboss.weld.injection.ResourceInjectio
    nFactory$ResourceInjectionProcessor.createResourceInjections(Res
    ourceInjectionFactory.java:188)
    at org.jboss.weld.injection.Reso
    urceInjectionFactory.discoverType(ResourceInjectionFactory.java:
    448)
    at org.jboss.weld.injection.ResourceInjectionFactory.getRes
    ourceInjections(ResourceInjectionFactory.java:96)
    at org.jboss.w
    eld.injection.producer.ResourceInjector.<init>(ResourceInjector.
    java:59)
    at org.jboss.weld.injection.producer.ResourceInjector.o
    f(ResourceInjector.java:49)
    at org.jboss.weld.injection.producer
    .BeanInjectionTarget.<init>(BeanInjectionTarget.java:63)
    at org.
    jboss.weld.injection.producer.BeanInjectionTarget.createDefault(
    BeanInjectionTarget.java:47)
    at org.jboss.weld.manager.Injection
    TargetFactoryImpl.chooseInjectionTarget(InjectionTargetFactoryIm
    pl.java:113)
    at org.jboss.weld.manager.InjectionTargetFactoryImp
    l.createInjectionTarget(InjectionTargetFactoryImpl.java:86)
    at
    org.jboss.weld.bean.ManagedBean.<init>(ManagedBean.java:100)
    at
    org.jboss.weld.bean.ManagedBean.of(ManagedBean.java:80)
    at org.j
    boss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(Abstr
    actBeanDeployer.java:274)
    at org.jboss.weld.bootstrap.BeanDeploy
    er.createClassBean(BeanDeployer.java:226)
    at org.jboss.weld.boot
    strap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.jav
    a:74)
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWor
    k(ConcurrentBeanDeployer.java:71)
    at org.jboss.weld.executor.Ite
    rativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:6
    2)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(
    IterativeWorkerTaskFactory.java:55)
    at
    java.util.concurrent.FutureTask.run(Unknown Source)
    at
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
    Source)
    at
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
    Source)
    at java.lang.Thread.run(Unknown Source)
    
    The same code
    works if we make an indirection via the java:app namespace in
    an ejb:
    @Stateless
    public class DummyBean {
    @Resource(name =
    "java:app/env/concurrent/sampleExecutor", lookup =
    "concurrent/sampleExecutor")
    private ManagedExecutorService
    sampleExecutor;
    }
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  All users of IBM WebSphere Application      *
    *                  Server                                      *
    ****************************************************************
    * PROBLEM DESCRIPTION: An injected object was not matching     *
    *                      it's JNDI definition.                   *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    An injected object was not matching it's JNDI definition.This
    can occur if an object is registered in JNDI under multiple
    interfaces
    

Problem conclusion

  • If the class registered in JNDI does not match the injected
    class we now fallback to actually
    performing a JNDI lookup to check if its assignable
    
    The fix for this APAR is targeted for inclusion in fix pack
    9.0.5.6. For more information, see 'Recommended Updates for
    WebSphere Application Server':
    https://www.ibm.com/support/pages/node/715553
    

Temporary fix

Comments

APAR Information

  • APAR number

    PH27629

  • Reported component name

    WEBS APP SERV N

  • Reported component ID

    5724H8800

  • Reported release

    900

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2020-07-20

  • Closed date

    2020-08-06

  • Last modified date

    2020-08-06

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    WEBS APP SERV N

  • Fixed component ID

    5724H8800

Applicable component levels

[{"Line of Business":{"code":"LOB36","label":"IBM Automation"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"900"}]

Document Information

Modified date:
14 December 2020