You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org> on 2008/07/29 03:12:31 UTC

[jira] Closed: (TAPESTRY-2384) OutOfMemoryError exception if a regular file with no extension exists in a known component package

     [ https://issues.apache.org/jira/browse/TAPESTRY-2384?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Howard M. Lewis Ship closed TAPESTRY-2384.
------------------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 5.0.11)
                   5.0.14
         Assignee: Howard M. Lewis Ship

ClassNameLocator service now uses regular expressions to determine what looks like a component class and what looks like a sub-folder.

On occasion, an extensionless file (such as README) will be read as if it is a directory, but the regular expressions should keep that from causing too much disruption.

The OOME was caused by reading a file with blank lines; these were treated as if they were directories, and the URL would be extended by the blank string and a slash.  Thus the URLs being scanned as directories would just keep adding trailing slashes and the queue of directory URLs to scan would keep getting bigger until OOME.

> OutOfMemoryError exception if a regular file with no extension exists in a known component package
> --------------------------------------------------------------------------------------------------
>
>                 Key: TAPESTRY-2384
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2384
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-ioc
>    Affects Versions: 5.0
>            Reporter: Chris Lewis
>            Assignee: Howard M. Lewis Ship
>             Fix For: 5.0.14
>
>
> 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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org