You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Randy Leonard (JIRA)" <de...@tapestry.apache.org> on 2007/04/22 08:26:15 UTC

[jira] Reopened: (TAPESTRY-1275) Recursive Components cause heap space overflow

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

Randy Leonard reopened TAPESTRY-1275:
-------------------------------------


I didn't necessarily take previous comments on 1275 to indicate recursive component references would be disallowed, only that the PageLoader wouldn't get confused with recursive components.  So was surprised with the following error message when trying this out again:

	The template for component com.paymentDepot.console.components.MenuCell
	is recursive (contains another direct or indirect reference to component
	com.paymentDepot.console.components.MenuCell). This is not supported
	(components may not contain themselves).

I'd encourage reconsideration on this, as recursive components can be useful.  I could certainly work around the issue, but at the cost of a fair amount of code.  WebObjects allowed this, so perhaps I've been conditioned into a specific style of thinking? 

> Recursive Components cause heap space overflow
> ----------------------------------------------
>
>                 Key: TAPESTRY-1275
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1275
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.0
>         Environment: MacOSX 10.4.8, Eclipse 3.2.1
>            Reporter: Randy Leonard
>         Assigned To: Howard M. Lewis Ship
>             Fix For: 5.0.3
>
>
> Embedding a recursive reference to a component within an html template causes a stack overflow.  Example menu component is as follows:
> <tr xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> 	<td>
> 		<t:comp type="Iff" test="prop:menuItem.isSelected">
> 			<b>${menuItem.name}</b>
> 			<t:comp type="Iff" test="prop:menuItem.containsSubMenu">
> 				<t:comp t:type="menu" menuHierarchy="menuItem.subMenu"></t:comp>
> 			</t:comp>
> 		</t:comp>
> 		<t:comp type="Iff" test="prop:menuItem.isSelected" negate="true">
> 			<a t:type="PageLink" page="prop:menuItem.pageName">${menuItem.name}</a>
> 		</t:comp>
> 	</td>
> </tr>
> The menu component works fine if the recursive if the recursive reference is removed.  The error seems to take place at startup, not at render time.
> Error message displayed in browser is as follows:
> A runtime exception has occurred.
> org.apache.tapestry.ioc.internal.util.TapestryException
> Could not convert 'menuItem.name' into a component parameter binding: Java heap space
> location
> classpath:org/example/hilo/components/MenuCell.html, line 4, column 23
> org.apache.tapestry.ioc.internal.util.TapestryException
> Java heap space
> location
> classpath:org/example/hilo/components/MenuCell.html, line 4, column 23
> java.lang.OutOfMemoryError
> Java heap space

-- 
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