Markus Jung created TOMEE-4658:
----------------------------------

             Summary: java:comp/env in web components returns Tomcat's 
NamingContext, leaking extra bindings and failing close()
                 Key: TOMEE-4658
                 URL: https://issues.apache.org/jira/browse/TOMEE-4658
             Project: TomEE
          Issue Type: Bug
            Reporter: Markus Jung


When code running in a web component (servlet, filter, JSF managed bean) 
resolves the {{java:}} namespace, TomEE hands out Tomcat's 
{{org.apache.naming.NamingContext}} instead of the OpenEJB {{IvmContext}} that 
an EJB receives for the same names. This exposes two spec deviations against 
the component naming context:
# *Extra bindings leak into {{java:comp/env}}.* Listing the context returns the 
internal {{comp}} and {{module}} entries alongside the expected application 
entries. Where the Enterprise Beans naming-context contract expects 2 
{{NameClassPair}} results for the test env context, TomEE returns 4:

    {code}
    NameClassPair: comp: org.apache.naming.NamingContext
    NameClassPair: sub: org.apache.naming.NamingContext
    NameClassPair: module: org.apache.naming.NamingContext
    NameClassPair: name: java.lang.String
    Expecting # of NameClassPair: 2, but actual 4
    {code}
# *{{close()}} fails on the servlet-tier context.* Calling {{close()}} on the 
web component's {{java:}} context throws, whereas the same operation succeeds 
on the EJB {{IvmContext}}.

The same code paths behave correctly inside an EJB, where the context under 
test is {{IvmContext{mynode=comp}}}. Only web components are affected.

h3. Reproduce / TCK reference

Excluded per method in {{runner-webprofile/exclusions/enterprise-beans-30.txt}} 
in the apache/tomee-tck harness repo — the {{close}}, {{list}}, and 
{{listBindings}} methods of:
* {{**/naming/context/ClientEjbliteservletTest.java}}
* {{**/naming/context/ClientEjbliteservlet2Test.java}}
* {{**/naming/context/JsfClientEjblitejsfTest.java}}

These fail only in the servlet, filtered-servlet, and JSF vehicles; the 
EJB-invoked variants of the same assertions pass.

h3. Relationship to TOMEE-4654

This is a distinct, read-side gap. TOMEE-4654 made the component naming context 
read-only, and after that fix all the _write_ assertions (bind, rebind, rename, 
unbind, createSubcontext, destroySubcontext) in these classes pass in both the 
EJB and the web vehicles. The remaining failures here are purely about what the 
web-tier context _lists_ and whether it can be _closed_, which stem from the 
web component receiving Tomcat's {{NamingContext}} rather than an 
{{IvmContext}}.

Once fixed, tighten the exclusions above back to the full classes (or remove 
them) and confirm the naming/context vehicles pass end to end.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to