[ 
https://issues.apache.org/jira/browse/TOMEE-4654?focusedWorklogId=1031915&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1031915
 ]

ASF GitHub Bot logged work on TOMEE-4654:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 23/Jul/26 18:45
            Start Date: 23/Jul/26 18:45
    Worklog Time Spent: 10m 
      Work Description: jungm opened a new pull request, #2846:
URL: https://github.com/apache/tomee/pull/2846

   ## What
   
   Makes the `java:comp` component naming context read-only by default, as the 
Enterprise Beans spec (10.4.4) and EE.5.3.4 require: write attempts against a 
deployed application's ENC must not take effect.
   
   ## Why
   
   The `IvmContext` read-only enforcement already existed and was correct — 
`checkReadOnly()` throws `OperationNotSupportedException` and `setReadOnly()` 
cascades through the whole name tree. But nothing ever turned it on: 
`openejb.forceReadOnlyAppNamingContext` defaulted to `false`, so every deployed 
application got a fully writable `java:comp`, letting `bind`/`rebind`/`rename` 
through where the spec requires them refused.
   
   ## Changes
   
   - **`Assembler`**: default `openejb.forceReadOnlyAppNamingContext` to `true` 
(kept as an explicit opt-out for anyone depending on the old writable 
behaviour).
   - **`Assembler.setAppNamingContextReadOnly`**: also mark the `WebContext` 
and `AppContext` naming contexts read-only. Servlets and JSF managed beans 
resolve `java:comp`/`java:module`/`java:app` through those contexts rather than 
through a `BeanContext`, so marking only the `BeanContext`s left the web tier 
writable. The one late write to the app context (`app/BeanManager`) happens 
before this point, so it is unaffected.
   - **`JavaCompReadOnlyTest`** (new): deploys a real application and asserts 
`bind`/`rebind`/`rename`/`unbind`/`createSubcontext`/`destroySubcontext` are 
all refused on `java:comp` and `java:app`, that nothing written becomes 
observable, and that pre-existing bindings survive.
   - **`AppNamingReadOnlyTest`**: inverted 
`testAppNamingContextWritableByDefault` (it asserted the exact bug) into a 
read-only-by-default test, plus a separate test for the opt-out path.
   
   ## Verification
   
   - `openejb-core` full suite: 4093 tests, the only 6 failures are 
pre-existing security-test failures reproduced on a clean `main` (unrelated to 
this change).
   - Jakarta EE 11 Web Profile TCK `enterprise-beans-30` partition against a 
freshly built Plume distribution: the `naming/context` write assertions now 
pass in **both** the EJB and web (servlet / filtered-servlet / JSF) vehicles.
   
   ## Reviewer notes
   
   - This is a container-wide default change. An application that writes to its 
own ENC after deployment would now be refused; the property above restores the 
old behaviour if needed.
   - The TCK harness change to un-exclude these tests lives in the separate 
`apache/tomee-tck` repo and is not part of this PR.
   - The TCK run surfaced a **separate, pre-existing** read-side bug (filed as 
TOMEE-4658): in web components TomEE hands out Tomcat's 
`org.apache.naming.NamingContext` instead of `IvmContext`, so `java:comp/env` 
lists extra `comp`/`module` entries and `close()` fails. It is orthogonal to 
this read-only fix and not addressed here.
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)




Issue Time Tracking
-------------------

            Worklog Id:     (was: 1031915)
    Remaining Estimate: 0h
            Time Spent: 10m

> java:comp naming context accepts writes the Enterprise Beans spec requires it 
> to refuse
> ---------------------------------------------------------------------------------------
>
>                 Key: TOMEE-4654
>                 URL: https://issues.apache.org/jira/browse/TOMEE-4654
>             Project: TomEE
>          Issue Type: Bug
>            Reporter: Markus Jung
>            Assignee: Markus Jung
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The Enterprise Beans spec requires the java:comp context to be read-only 
> inside a bean, and to throw {{OperationNotSupportedException}} on any write 
> attempt against it. TomEE's naming context skips that check and lets bind, 
> rebind, and rename calls through instead of refusing them.
> h2. Steps to reproduce / TCK reference
> Excluded in {{runner-webprofile/exclusions/enterprise-beans-30.txt}} in the 
> apache/tomee-tck harness repo:
> * {{**/naming/context/*Test.java}}
> Once fixed, remove the matching lines and confirm the tests pass — each write 
> attempt against java:comp must throw {{OperationNotSupportedException}}.



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

Reply via email to