Java EL Expression Performance Issue after Upgrade

Issue

  • I recently updated to Liferay 7.4 and I'm seeing performance issues.
  • I have custom JSP files with EL Expressions (expressions like ${expressionName}) deployed.
  • In thread dumps taken during the performance issues, and I see a large number of threads that are in the BLOCKED state with stack traces that:
    • Mention custom JSP files
    • Contain the following calls:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java)
    • Along with lines that appear to be related to EL resolution like:
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java)

Environment

  • DXP 7.4
  • Quarterly Releases

Resolution

Additional Information

  • This performance issue happens due to logic changes that were made in the third-party expression parser code here.
    • Because of this change, if the EL Expression evaluates to null, the expression parser will interpret it as a Java class name.
    • The parser will then begin looking inside every .jar file that it has access to for a class that has that name, but the name doesn’t exist.
    • Because this is a synchronized process, only one thread can perform it at a time, so if a large number of users are visiting the page where this .jsp file needs to be rendered, the threads will all block each other and it will be very slow.
  • See this third-party JSP Tutorial page for an overview of EL Expressions
Este artigo foi útil?
Utilizadores que acharam útil: 0 de 0