Mantis Bugtracker
  

Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0005408 [Resin] major always 03-26-13 06:35 05-29-13 11:34
Reporter stefan_bieler2 View Status public  
Assigned To ferg
Priority normal Resolution fixed  
Status closed   Product Version 4.0.35
Summary 0005408: JSP recompilation on every request causing performance problems
Description We are currently facing a problem with Tag-Classes which do define inner classes (e.g. http://tiles.apache.org/2.2/framework/apidocs/org/apache/tiles/jsp/taglib/UseAttributeTag.html, [^] which defines a nested class "Tei").
If a JSP-file is using such a Tag, the check for changes on the JSP, always return true (com.caucho.server.dispatch.PageFilterChain#140), which causes recompilation on every "jsp include".
After some investigation, we found out, that this is due to the "UseAttributeTag.Tei" dependency's timestamp, which is always "-1" (com.caucho.make.ClassDependency#89). When stepping deeper into, we found out, that
the call to "java.lang.Class#forName" in com.caucho.make.ClassDependency#84 is the problem, as it is using "UseAttributeTag.Tei" to reference the inner class, which leads to a "ClassNotFoundException".
The correct reference to an inner class would be "UseAttributeTag$Tei". The ClassName-Reference is written while JSP-to-Servlet generation, resp. while Creating "dependency"-Entries.
There, in com.caucho.make.ClassDependency#getJavaCreateString, an explicit replace for "$" to "." is taking place before writing out the ClassName to the generated servlet.

Generated Servlet-Code looks as follows:

  public void init(com.caucho.vfs.Path appDir)
    throws javax.servlet.ServletException
  {
    com.caucho.vfs.Path resinHome = com.caucho.server.util.CauchoSystem.getResinHome();
    com.caucho.vfs.MergePath mergePath = new com.caucho.vfs.MergePath();
    mergePath.addMergePath(appDir);
    mergePath.addMergePath(resinHome);
    com.caucho.loader.DynamicClassLoader loader;
    loader = (com.caucho.loader.DynamicClassLoader) getClass().getClassLoader();
    String resourcePath = loader.getResourcePathSpecificFirst();
    mergePath.addClassPath(resourcePath);
    com.caucho.vfs.Depend depend;
    depend = new com.caucho.vfs.Depend(appDir.lookup("..."), 3569174199620245524L, false);
    _caucho_depends.add(depend);
    depend = new com.caucho.vfs.Depend(mergePath.lookup("jar:file:/iad/ocn/dev/htdocs/WEB-INF/lib/tiles-jsp-2.2.2.jar!/META-INF/tld/tiles-jsp.tld"), -3290222249785851653L, false);
    _caucho_depends.add(depend);
    _caucho_depends.add(new com.caucho.make.ClassDependency("org.apache.tiles.jsp.taglib.UseAttributeTag.Tei", -246186801486030713L));
  }

Now the question is, why com.caucho.make.ClassDependency#getJavaCreateString is explicitly replacing "$" with ".". Is it a bug? Do we have to fix our setup?
Additional Information Environment:

JDK 1.7.0_15
Resin 4.0.35
Attached Files

- Relationships

There are no notes attached to this issue.

- Issue History
Date Modified Username Field Change
03-26-13 06:35 stefan_bieler2 New Issue
05-29-13 11:34 ferg Assigned To  => ferg
05-29-13 11:34 ferg Status new => closed
05-29-13 11:34 ferg Resolution open => fixed
05-29-13 11:34 ferg Fixed in Version  => 4.0.37


Mantis 1.0.0rc3[^]
Copyright © 2000 - 2005 Mantis Group
27 total queries executed.
25 unique queries executed.
Powered by Mantis Bugtracker