You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Mei Xi <ME...@ORACLE.COM> on 2012/06/27 03:36:39 UTC

Treetable rendering very slow

Hello ,

 

We are using an HYPERLINK "http://docs.oracle.com/cd/E15051_01/apirefs.1111/e12419/tagdoc/af_treeTable.html"ADF tree table to render a thread stack in a browser. Take the following thread stack as an example: it starts with the top frame and is 250 deep.  To the renderer, we supply the root node (top frame) that has one child node, which in turn has one child node, and so on and so forth.  (I know we don't really need a treetable for this application since it only has one chain, but we do have situations where the thread stack branches out like what you see when you do CPU profiling.)  With a tree structure as simple as that, it takes 20+ seconds to render it in the browser. And when I run jstack on the process, I see following stack:

 

java.lang.Thread.State: RUNNABLE
        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)
..... (many lines omitted)
        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.nextIndex(AbstractList.java:713)

        at java.util.SubList$1.hasNext(AbstractList.java:691)

        at java.util.SubList$1.next(AbstractList.java:695)

        at java.util.SubList$1.next(AbstractList.java:696)

        at java.util.SubList$1.next(AbstractList.java:696)

        at java.util.SubList$1.next(AbstractList.java:696)

        at java.util.SubList$1.next(AbstractList.java:696)
        at java.util.AbstractList.equals(AbstractList.java:506)

        at org.apache.myfaces.trinidad.util.CollectionUtils$DelegatingCollection.equals(CollectionUtils.java:598)

        at org.apache.myfaces.trinidad.util.CollectionUtils$DelegatingCollection.equals(CollectionUtils.java:598)

        at java.util.HashMap.get(HashMap.java:305)

        at org.apache.myfaces.trinidad.model.RowKeySetTreeImpl$Search.find(RowKeySetTreeImpl.java:666)

        at org.apache.myfaces.trinidad.model.RowKeySetTreeImpl._isContained(RowKeySetTreeImpl.java:480)

        at org.apache.myfaces.trinidad.model.RowKeySetTreeImpl.contains(RowKeySetTreeImpl.java:71)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeRendererUtils.isWholePathExpanded(TreeRendererUtils.java:629)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeRendererUtils.initModel(TreeRendererUtils.java:301)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeRendererUtils.wrapModel(TreeRendererUtils.java:545)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeRendererUtils.getCollectionObject(TreeRendererUtils.java:345)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeTableRenderer.getCollectionObject(TreeTableRenderer.java:762)

        at oracle.adfinternal.view.faces.renderkit.rich.TableRenderer.storeHeightAutosized(TableRenderer.java:2371)

        at oracle.adfinternal.view.faces.renderkit.rich.TableRenderer.encodeAll(TableRenderer.java:505)

        at oracle.adfinternal.view.faces.renderkit.rich.TreeTableRenderer.encodeAll(TreeTableRenderer.java:600)

        at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1396)

        at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:341)

        at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:767)

        at org.apache.myfaces.trinidad.component.UIXCollection.encodeEnd(UIXCollection.java:538)

        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)

        at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:405)

        at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2633)

        at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer._encodeChild(PanelGroupLayoutRenderer.java:432)

        at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.access$300(PanelGroupLayoutRenderer.java:30)

        at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:682)

        at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:601)

        at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:170)

        at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:290)

        at org.apache.myfaces.trinidad.component.UIXComponent.encodeFlattenedChildren(UIXComponent.java:255)

        at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.encodeAll(PanelGroupLayoutRenderer.java:358)

... (many lines omitted)

 

While researching online, I found this post :  http://blog.applegrew.com/2011/01/java-sublist-gotcha/ . It appears to be potentially relevant and I confirmed, as the author suggested, a choice of the list can make a difference. Anyhow, just wanted to throw the observation out there and see if you gurus think this might be a bug somewhere (in Trinidad or ADF) and whether it can be fixed.  

 

I will try to attach the complete thread stack to this email, although I'm not sure if the attachment will go through.

 

Best,

-Mei