Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
5.0
-
None
Description
The issue has to do with a temporary queue used to hold package
names to be scanned for class files, in
org.apache.tapestry.ioc.internal.services.ClassNameLocatorImpl. For more
detail see the original bug report with our findings here:
http://code.google.com/p/tapestry5-components/issues/detail?id=55
What it comes down to is this: if you have a file in a components
package without a file extension (such as MIT-LICENSE), Tapestry will
fail to start because it will have exhausted it's available memory and
have thrown a java.lang.OutOfMemoryError exception. It assumes such
files are directory names, and then tacks on a '/' and pushes it on to
the queue to be searched. This results in a loop that fills the queue
with bogus package names until the memory is gone.
Clearly this is an issue and I wanted to provide a patch, but having
looked a bit at the code, I'm not sure how one can determine if the
simple strings represent actual directories (as opposed to files with no
extensions). A new file object could be created, but doing that for each
iteration seems like it might be slow, as does querying the queue each
time to see if that package is already contained.