|Summary:||ApplicationListener#pluggabilityBlocked field is always "false" in Tomcat 8|
|Product:||Tomcat 8||Reporter:||Konstantin Kolinko <knst.kolinko>|
|Component:||Catalina||Assignee:||Tomcat Developers Mailing List <dev>|
Description Konstantin Kolinko 2014-06-04 12:46:07 UTC
(Noted when reviewing bug 55282 and its fix - r1597855 ) Apart from ~42 references in text code, the o.a.t.util.descriptor.web.ApplicationListener constructor is called in only one place and in that place  the pluggabilityBlocked argument is always "false".  org.apache.catalina.startup.ContextConfig#configureContext(WebXml) Originally this feature was added in r1492307 and this the second constructor argument was named "fromTLD". The feature is that listeners added by TLD scanning do not have access to all configuration APIs. In Tomcat 8 Jasper now initializes itself via JasperInitializer.onStartup() and adds TLD listeners via ServletContext.addListener(String) calls. Thus: 1. I suspect that the feature implemented by r1492307 may be currently broken which means that listeners defined in TLDs have access to full API. 2. ApplicationListener.pluggabilityBlocked field and a bunch of code can be removed.
Comment 1 Mark Thomas 2014-06-04 19:43:21 UTC
The feature isn't broken. The original fix included a test that still passes. It works because all listeners added via ServletContext.addListener() are blocked from using pluggability features. I agree there is some unused code we can remove.
Comment 2 Mark Thomas 2014-06-04 21:19:20 UTC
Fixed in 8.0.x for 8.0.9 onwards.
Comment 3 Konstantin Kolinko 2014-06-05 12:46:16 UTC
Ack. I see. In StandardContext.listenerStart() the listeners that have been already configured before (via ServletContext API) are added to 'noPluggabilityListeners' set. That does the trick. I updated deprecation markers on o.a.c.Context methods in Tomcat 7 in r1600638. It will be in 7.0.55.