rzo1 commented on PR #2848:
URL: https://github.com/apache/tomee/pull/2848#issuecomment-5088904912

   The direction is right and the codebase already agrees with you —
   `FinderFactory.createFinder` (:235-243) swallows CNFE for these same servlet 
classes, the
   taglib listener loop two blocks below only logs, and the EJB path at :2447 
does `continue`.
   The three fatal throws were the odd ones out. The `{1}{2}{3}` -> `{0}{1}{2}` 
MessageFormat
   fix is a real bug fix on its own. And the test genuinely regresses: 
reverting only
   `AnnotationDeployer.java` gives `OpenEJBException: Unable to load servlet 
class: ...TestServlet1`.
   
   But the reported bug is not actually fixed on half the distributions:
   
   - `ConfigurationFactory:146` defines `WSDL4J_AVAILABLE`, and :260-262 adds 
`new WsDeployer()`
     to the deployer chain whenever `openejb.webservices.enabled` (default 
true) &&
     `WSDL4J_AVAILABLE`. `WsDeployer.processPorts(WebModule)` iterates every 
servlet of the
     WebApp — only skipping `className == null` for JSPs — and does
     `webModule.getClassLoader().loadClass(className)` at ~:152, inside a try 
whose catch at
     :233-235 is `catch (final Exception e) { throw new 
OpenEJBException("Unable to load servlet class: " + className, e); }`.
   
     The `loadClass` precedes the `JaxWsUtils.isWebService(clazz)` test, so it 
is not limited
     to WS endpoints. `libre-wsdl4j` is optional in openejb-core's pom 
(:612-616) but is present
     on Plus, Plume and openejb-standalone. So on those distributions the war 
that motivated
     this ticket still fails to deploy, with an identically worded error from a 
different class.
   
     Note when you fix it that `NoClassDefFoundError` is an `Error`, so `catch 
(Exception)`
     there doesn't catch it at all — it propagates raw today.
   
   Consequently the test can't do the job it's meant to do:
   
   - It drives `AnnotationDeployer` directly, so it would have stayed green 
through exactly the
     gap above. Something at `ConfigurationFactory.configureApplication` level, 
or an Arquillian
     test with a real war, is what would actually pin TOMEE-4642.
   
   Other things:
   
   - The caught `Throwable` is discarded entirely — `logger.warning("Unable to 
load servlet class: " + servletClass)`
     drops both the cause and the module identity. Whoever hits this because 
they genuinely
     mis-packaged a war now gets one line and no stack trace, on a path that 
used to be fatal
     and loud. Please pass `e` and include `webModule.getJarLocation()`.
   
   - The Servlet 6.1 §2.3.1 rationale in the comment covers servlets, whose 
loading may be
     deferred. It does not cover filters or listeners — the container must 
instantiate those at
     context start, so a missing class there is unambiguously broken, just 
broken later. Worth
     either reflecting that in the comments or keeping a stronger log level for 
those two.
   
   - Relatedly, `LightweightWebAppBuilder:183-186` now regresses to a raw 
`ClassNotFoundException`
     mid-`createApplication` instead of the clean `OpenEJBException` it used to 
get.
   
   - Fail-open side effect worth acknowledging: an unloadable servlet class now 
silently skips
     `@Resource`/`@EJB` annotation processing for that servlet, so if the class 
*is* resolvable
     later by a different loader it comes up without its injections rather than 
not at all.
   
   - The MessageFormat index fix is applied to 4 of 12 identical occurrences in 
this file —
     :2019, :2044, :2061, :2192, :2349, :2379, :2929 and :5696 have the same 
off-by-one. Either
     do them all or split that into its own trivial commit.
   
   - Twenty lines below your last hunk, the webservices handler-chain loop 
still does
     `throw new OpenEJBException("Unable to load webservice handler class: " + 
handlerClass, e)`
     from the identical catch shape. Keeping a declared handler fatal is 
defensible, but the
     method now has three tolerant sites, two `logger.error` sites and one 
fatal site with
     nothing saying why. One comment would do.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to