Bug 47796 - StandardContext's annotationProcessor field gets cached between webapp start/stop cycles
Summary: StandardContext's annotationProcessor field gets cached between webapp start/...
Alias: None
Product: Tomcat 6
Classification: Unclassified
Component: Catalina (show other bugs)
Version: 6.0.20
Hardware: PC Windows XP
: P2 major (vote)
Target Milestone: default
Assignee: Tomcat Developers Mailing List
Depends on:
Reported: 2009-09-07 16:21 UTC by Nándor Előd Fekete
Modified: 2009-10-03 10:56 UTC (History)
1 user (show)

Patch file contatining the proposed fix (565 bytes, application/octet-stream)
2009-09-07 16:21 UTC, Nándor Előd Fekete

Note You need to log in before you can comment on or make changes to this bug.
Description Nándor Előd Fekete 2009-09-07 16:21:00 UTC
Created attachment 24222 [details]
Patch file contatining the proposed fix

When a webapp is stopped in tomcat, the annotationProcessor field does not get
nullified. When the webapp is started again, the start() method of the
StandardContext class checks whether the annotationProcessor field is null, and
only builds a new one if so. This means that the annotationProcessor gets
reused between application start/stop cycles (not tomcat restart cycles).
Things that are dependent on the annotationProcessor (like injection, etc) may
be broken because of this.
One specific example is when using OpenEJB tomcat integration. The
annotationProcesor itself holds a reference to a javax.naming.Context, which is
cached between context start/stop cycles. This causes that after a stop/start
cycle of a context, the annotationProcessor tries to inject the EJB reference
proxies made at the first start of the context, which was made against
different instances of the to-be-injected fields' classes. This results that
the EJB injection is not working.
Other types of injections may be broken too.

Attached patch file containing the fix. Tested, works.
Comment 1 Mark Thomas 2009-09-12 09:21:34 UTC
Thanks for the patch. It has been proposed for 6.0.x.

Not that there is no need for a similar patch in trunk, the instanceManager is already set to null on stop.
Comment 2 Mark Thomas 2009-10-03 10:56:51 UTC
This has been applied to 6.0.x and will be included in 6.0.21 onwards.

Again, many thanks for the patch.