Kin-man,

Thanks for the response. I filed a bug report and I have an initial fix that I have been working on. Here is a preview:

This is due to the LOOKAHEAD on line 256 of ELParser.jj

This fix allows the EL expression to be parsed quickly but I have not tested thoroughly. In ELParser.jj delete the grammar production ConditionalExpression() and replace Expression() and OrExpression() with the below text:

Expression Expression () :
{
  Expression ret;
}
{
  (
   ret = OrExpression ()
  )
  { return ret; }
}


Expression OrExpression () :
{
Expression startExpression, condition, trueBranch=null, falseBranch=null;
BinaryOperator operator;
Expression expression;
List operators = null;
List expressions = null;
}
{
startExpression = AndExpression ()


    ((
     (
      (<OR1> | <OR2>) { operator = OrOperator.SINGLETON; }
      )
     expression = AndExpression ()

      {
        if (operators == null) {
          operators = new ArrayList ();
          expressions = new ArrayList ();
        }
        operators.add (operator);
        expressions.add (expression);
      }
     )*
     (
     <COND>
     trueBranch = Expression ()
     <COLON>
     falseBranch = Expression ()
     )?
    )
  {
    if (operators != null) {
      condition = new BinaryOperatorExpression (startExpression,
                                           operators,
                                           expressions);
    }
    else {
      condition = startExpression;
    }

if(trueBranch != null)
return new ConditionalExpression(condition, trueBranch, falseBranch);
else
return condition;
}
}



On Oct 20, 2004, at 1:20 PM, Kin-man Chung wrote:

Please file a report on bugzilla.  If you also include a test case
(to save me some typing :)), I'll take a look to see where Jasper is
spending its time.  Did you said it was in commons-el?  That'd be bad.

-Kin-man

On Wed, 2004-10-20 at 00:43, Eric Blenkush wrote:
On Oct 19, 2004, at 10:41 PM, Remy Maucherat wrote:

Eric Blenkush wrote:

Hi,

On Tomcat 5.5.2 I am experiencing very long compile times(and hangs)
for certain JSP pages. The page has an EL expression like this:

${fn:toUpperCase((fn:toUpperCase((fn:toUpperCase((fn: toUpperCase((fn:
toUpperCase((fn:toUpperCase((fn:toUpperCase((fn:toUpperCase((fn:
toUpperCase((fn:toUpperCase((fn:toUpperCase((fn:toUpperCase((fn:
toUpperCase((fn:toUpperCase((fn:toUpperCase((fn:
toUpperCase(('b'))))))))))))))))))))))))))))))))))))}


If you remove the extraneous parenthesis it will compile and execute
very quickly. However, if you add more nested calls to fn:toUpperCase
compiling will again take a very long time. So, this may be related
to the number of nested expressions. This is just a test case
obviously but I am generating JSPs automatically and it is difficult
if not impossible to avoid EL statements with these nested function
calls. Resin can compile and execute these pages very quickly but I
want to stick with Tomcat.


This is crucial to the project I am working on and if someone has an
idea of what is causing this and where to look in the tomcat source I
would appreciate it.

Please don't whine. I hope you have tested this with 5.0.x as well.

If you have a compilation problem specific to the Java compiler, you
obviously should:
- report it to the Eclipse project
- use Ant + javac to compile instead (remove the
jasper-compiler-jdt.jar and put ant.jar at the same spot)

You may want to try to generate efficient code.

Any bug filed about the Eclipse compiler (other than an integration
issue) will be marked as INVALID.

Rémy


The hang is happening when the .java file is being generated from the
.jsp file. I confirmed this by taking the commons-el-1.0 source and
modifying it to parse the same EL statement as given above and it never
completed.


Any helpful comments on where to start looking to fix this are welcome.

Thanks,
Eric


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to