Tapestry team,

Sven stumbled over situation in which Tapestry falls over when loading
component classes, throwing an OOM exception. He and I have been looking
into the problem which was first believed to be caused by a package
structure being to deep. However after some closer examination, it's not
that. 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 the 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.

-- 
http://thegodcode.net


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to