Bizarre Glassfish JSF/EL performance issue
I found a performance issue with JSF on Glassfish 3.1.1 (and prior) in an unexpected place: a seemingly innocuous line of code like
<h:outputText rendered="#{request.requestURL.indexOf('page') ne -1}" .... />
It turns out that invoking methods through EL expressions (new in EL 2.2) triggers creating a new ExpressionFactory, which in turn calls findResource/getResourceAsStream - a file I/O operation.
These expressions in the "rendered" attribute are particularly bad because they get executed multiple times in various parts of the JSF lifecycle.
See:
http://java.net/jira/browse/JAVASERVERFACES-2223
http://java.net/jira/browse/UEL-19
On the plus side - jvisualvm totally rocks. I am shocked by how easy it was to get started with for tracking down these issues and it was right there in $JAVA_HOME/bin all along.
<h:outputText rendered="#{request.requestURL.indexOf('page') ne -1}" .... />
It turns out that invoking methods through EL expressions (new in EL 2.2) triggers creating a new ExpressionFactory, which in turn calls findResource/getResourceAsStream - a file I/O operation.
These expressions in the "rendered" attribute are particularly bad because they get executed multiple times in various parts of the JSF lifecycle.
See:
http://java.net/jira/browse/JAVASERVERFACES-2223
http://java.net/jira/browse/UEL-19
On the plus side - jvisualvm totally rocks. I am shocked by how easy it was to get started with for tracking down these issues and it was right there in $JAVA_HOME/bin all along.
Written on October 13, 2011