IBM Support

PM85765: CONTENTS OF CDI APPLICATIONS PRIVATE VARIABLE IS LOST

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Contexts and Dependency Injection (CDI) Extensions loaded from
    a shared library may have an inconsistent state when
    modified or accessed by package-private methods
    Proof can be seen in the logs that the private variable had
    contents and then later it can be seen that the contents are
    gone.
    technical details from the PMR that caused the creation of this
    APAR:
    ----------------------------------------------------------------
    - All debug messages "Discovered xxx with qualifiers yyy" come
    from one and the same instance JpaRepositoryExtension@9dd26dcf
    - The problem does not seem to be the second instance
    JpaRepositoryExtension_$$_javassist_3@7c40c136 which is also
    created.
    - The following line is also written by instance
    JpaRepositoryExtension@9dd26dcf :
    [19.02.13 17:09:34:478 CET] 0000004d SystemOut     O
    17:09:34.478 [server.startup : 1] WARN
    o.s.d.j.r.cdi.JpaRepositoryExtension - did not find
    entityManagerBean. entityManagers Map:{} |
    qualifiers:[@javax.enterprise.inject.Any(),
    @javax.enterprise.inject.Default()],
    instance:org.springframework.data.jpa.repository.cdi.
    JpaRepositoryExtension@9dd26dcf
    The problem now is, that in this last statement, it shows that
    the private variable JpaRepositoryExtension.entityManagers is an
    empty Map !
    But miliseconds before, the same private variable of the same
    instance was filled with data:
    [19.02.13 17:09:34:415 CET] 0000004d SystemOut     O
    17:09:34.415 [server.startup : 1] DEBUG
    o.s.d.j.r.cdi.JpaRepositoryExtension - Now entityManagers
    is:{[@ch.xxxxxxxxx.jap.core.logic.inject.DefaultImplementation()
    ,
    @javax.enterprise.inject.Any()]=-2015852845,Name:null,WebBeans
    Type:PRODUCERMETHOD,API
    Types:[javax.persistence.EntityManager,java.lang.Object],Qualifi
    ers:[javax.enterprise.inject.Any,ch.xxxxxxxxx.jap.core.logic.
    inject.DefaultImplementation],
    [@javax.enterprise.inject.Default(),
    @javax.enterprise.inject.Any()]=1926396594,Name:null,WebBeans
    Type:PRODUCERMETHOD,API
    Types:[javax.persistence.EntityManager,java.lang.Object],
    Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.
    inject.Default],[@javax.enterprise.inject.Any(),
    @ch.xxxxxxxxx.jap.core.logic.inject.InEnvironment(value=DEV)]=16
    73432178 ,Name:null,WebBeans Type:PRODUCERMETHOD,API
    Types:[javax.persistence.EntityManager,java.lang.Object],Qualifi
    ers:[javax.enterprise.inject.Any,ch.xxxxxxxxx.jap.core.logic.
    inject.InEnvironment]}
    Instance:org.springframework.data.jpa.repository.cdi.
    JpaRepositoryExtension@9dd26dcf
    All is done in the same Thread on the same server (there is only
    1). But somehow, between 17:09:34:415 and 17:09:34:478, the
    content of the private variable
    (JpaRepositoryExtension@9dd26dcf).entityManagers gets
    lost. But there is no method in class JpaRepositoryExtension
    that deletes anything from this map. It somehow looks as if the
    single instance JpaRepositoryExtension@9dd26dcf is internally
    represented in 2 different memory areas ?
    ----------------------------------------------------------------
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  IBM WebSphere Application Server users of   *
    *                  Contexts and Dependency Injection (CDI).    *
    ****************************************************************
    * PROBLEM DESCRIPTION: CDI proxy might not pass through        *
    *                      calls to package private methods to     *
    *                      the underlying instance.                *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    When classes are located in an EAR/lib jar but are being
    injected into a web module, the proxy class will not override
    package private methods as it will be defined using the module
    classloader.
    

Problem conclusion

  • When the "com.ibm.ws.cdi.javassist.use.superclass" property is
    set to true in the
    META-INF/openwebbeans/openwebbeans.properties file the
    container will attempt to use the class's classloader to
    define the proxy as long as that classloader has the necessary
    visibility to the runtime classes.
    
    The fix for this APAR is currently targeted for inclusion in
    fix packs 8.0.0.8 and 8.5.5.1.  Please refer to the
    Recommended Updates page for delivery information:
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
    

Temporary fix

Comments

APAR Information

  • APAR number

    PM85765

  • Reported component name

    WEBS APP SERV N

  • Reported component ID

    5724H8800

  • Reported release

    850

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2013-03-27

  • Closed date

    2013-06-24

  • Last modified date

    2014-10-14

  • 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

  • R800 PSY

       UP

  • R850 PSY

       UP

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"8.5","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
12 January 2022