tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Berglas, Anthony" <aberg...@rsasecurity.com>
Subject Jasper/Tomcat custom .tag processing extremely slow if in .jars -- profiling results
Date Fri, 21 Sep 2007 01:33:41 GMT
PROBLEM

JSPs that make use of custom .tag files can be very slow to compile --
several tens of seconds for each .jsp.  It takes longer to compile a
single .jsp than the entire Tomcat 6 & Jasper source.  

Our application uses .tag files fairly heavily to provide boiler plate
text for headings, menus, buttons, input fields etc.  Works fairly well
apart from the painfully slow compiles.

PROFILING AND TRACING RESULTS

1. Tomcat is recompiling all the .tags for each .jsp.  So the .tag
libraries are being needlessly recompiled many, many times.  (Ie. if
foo.jsp calls bar.tag once, and then baz.jsp calls bar.tag three times,
then bar.tag is compiled twice, not once or four times.)

2. The javac compiles are very slow, despite there being relatively
little java code to compile.  (About 60% of total time.) This is
probably because the compiler is being invoked once for each .tag,
rather than just once for all the generated .java files.

3. The parsing is relatively slow (20% of total time) but not the
bottleneck.  Other aspects such as generating the .java are very fast.

FIXES AND WORK AROUNDS

The first recompiling problem only presents when the .tag files are
bundled in a .jar.  We want to separate the .tag library from the
application, and we get better IDE support from a .jar with a .tld.  

One approach is to just fix Jasper to look at the .jar time for
dependency checking.  But this is only useful if the fix would be back
ported to the main tree.

Another is to unbundled the .tag files, and use more complex build
scripts to merge the library with the application.  Would prefer not to
do that.

For the compiles it should be possible to have Jasper pre-generate .java
files in one pass, and then compile explicitly in another.  

However there is a bug in Jasper that prevents pre-compilation of .tags
that call other .tags that also need to be compiled.  Apparently one
needs to write a dummy .jsp that calls the leaf .tags one at a time to
prevent this.  (Or fix Jasper.)

Also, prefer not to do things that are Tomcat specific, want a portable
war file at the end of the day.

TRACE

I have attached the trace of a run.  The page is a simple form with 8
fields.  Times in milli seconds from the beginning of the run.  The list
is indented per the call stack.  generateClass is the method that calls
the Javac compiler, and totals of this are collected at the end.  The
recursion is due to .tags calling .tags.  I can provide people with the
traced copy of Jasper source if they are interested to see exactly what
the traces mean.

First time, Plain format
http://localhost:8080/plain_eg/swb/Simple/WAutoCrudPage.swb
=========== WPageStructure =============
1==  -- Parameters: Submit Button: null
1==         id = null
1==         name = null
1==         database = null
1==         color = null
1==         alignment = null
1==         happy = null
1==         count = null
1==         datefield = null
1==  >>>>>>>>>>>>>> {WAutoCrudPage WAutoCrudPage}
null
1==      Pagelet {WPagelet crud}
1==        Field Group {WFieldGroup crud.userIdentity}
1==            Field {WFieldString crud.id = null}
1==            Field {WFieldString crud.name = null}
1==            Field {WFieldString crud.database = Mock Database}
1==        Field Group {WFieldGroup crud.userDetails}
1==            Field {WFieldString crud.color = null}
1==            Field {WFieldString crud.alignment = null}
1==            Field {WFieldString crud.happy = null}
1==            Field {WFieldInteger crud.count = null}
1==            Field {WFieldDate crud.datefield = null}
1==  <<<<<<<<<<<<<< {WAutoCrudPage WAutoCrudPage}
47
| >> 0 generateJava
|    1109 generateJava paresed & validated \WAutoCrudPage_jsp.java
| | >> 1109 Visiting tag /META-INF/tags/simplewebplain/page.tag
| |    1109 loadTagFile CompCtx /META-INF/tags/simplewebplain/page.tag
| | | >> 1109 loadTagFile /META-INF/tags/simplewebplain/page.tag
| | | | >> 1109 wrapper.loadTagFile
| | | | | >> 1125 generateJava
| | | | |    1468 generateJava paresed & validated \page_tag.java
| | | | | | >> 1468 Visiting tag /WEB-INF/tags/headingCell.tag
| | | | | |    1468 loadTagFile CompCtx /WEB-INF/tags/headingCell.tag
| | | | | | | >> 1468 loadTagFile /WEB-INF/tags/headingCell.tag
| | | | | | | | >> 1468 wrapper.loadTagFile
| | | | | | | | | >> 1468 generateJava
| | | | | | | | |    1500 generateJava paresed & validated
\headingCell_tag.java
| | | | | | | | |    1515 generateJava tag file processed
\headingCell_tag.java
| | | | | | | | | << 1640 172 generateJava generated
\headingCell_tag.java
| | | | | | | | | >> 1656 generateClass in compile
| | | | | | | | | << 3328 1672 generateClass in compile
| | | | | | | |    3328 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 3343 1875 wrapper.loadTagFile
| | | | | | | << 3359 1891 loadTagFile /WEB-INF/tags/headingCell.tag
| | | | | | << 3359 1891 Visited tag /WEB-INF/tags/headingCell.tag
| | | | | | >> 3359 Visiting tag /META-INF/tags/simplewebplain/menu.tag
| | | | | |    3359 loadTagFile CompCtx
/META-INF/tags/simplewebplain/menu.tag
| | | | | | | >> 3359 loadTagFile /META-INF/tags/simplewebplain/menu.tag
| | | | | | | | >> 3359 wrapper.loadTagFile
| | | | | | | | | >> 3375 generateJava
| | | | | | | | |    3578 generateJava paresed & validated
\menu_tag.java
| | | | | | | | |    3593 generateJava tag file processed \menu_tag.java
| | | | | | | | | << 3671 296 generateJava generated \menu_tag.java
| | | | | | | | | >> 3671 generateClass in compile
| | | | | | | | | << 4093 422 generateClass in compile
| | | | | | | |    4093 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 4093 734 wrapper.loadTagFile
| | | | | | | << 4109 750 loadTagFile
/META-INF/tags/simplewebplain/menu.tag
| | | | | | << 4109 750 Visited tag
/META-INF/tags/simplewebplain/menu.tag
| | | | | | >> 4109 Visiting tag
/META-INF/tags/simplewebplain/errorMessages.tag
| | | | | |    4109 loadTagFile CompCtx
/META-INF/tags/simplewebplain/errorMessages.tag
| | | | | | | >> 4109 loadTagFile
/META-INF/tags/simplewebplain/errorMessages.tag
| | | | | | | | >> 4109 wrapper.loadTagFile
| | | | | | | | | >> 4109 generateJava
| | | | | | | | |    4312 generateJava paresed & validated
\errorMessages_tag.java
| | | | | | | | |    4312 generateJava tag file processed
\errorMessages_tag.java
| | | | | | | | | << 4343 234 generateJava generated
\errorMessages_tag.java
| | | | | | | | | >> 4343 generateClass in compile
| | | | | | | | | << 4843 500 generateClass in compile
| | | | | | | |    4843 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 4843 734 wrapper.loadTagFile
| | | | | | | << 4859 750 loadTagFile
/META-INF/tags/simplewebplain/errorMessages.tag
| | | | | | << 4859 750 Visited tag
/META-INF/tags/simplewebplain/errorMessages.tag
| | | | |    4859 generateJava tag file processed \page_tag.java
| | | | | << 4906 3781 generateJava generated \page_tag.java
| | | | | >> 4906 generateClass in compile
| | | | | << 5281 375 generateClass in compile
| | | |    5281 wrapper.loadTagFile  compiled, loading...
| | | | << 5296 4187 wrapper.loadTagFile
| | | << 5296 4187 loadTagFile /META-INF/tags/simplewebplain/page.tag
| | << 5296 4187 Visited tag /META-INF/tags/simplewebplain/page.tag
| | >> 5296 Visiting tag /META-INF/tags/simplewebplain/autoCrud.tag
| |    5296 loadTagFile CompCtx
/META-INF/tags/simplewebplain/autoCrud.tag
| | | >> 5296 loadTagFile /META-INF/tags/simplewebplain/autoCrud.tag
| | | | >> 5296 wrapper.loadTagFile
| | | | | >> 5312 generateJava
| | | | |    5468 generateJava paresed & validated \autoCrud_tag.java
| | | | | | >> 5468 Visiting tag /META-INF/tags/simplewebplain/form.tag
| | | | | |    5468 loadTagFile CompCtx
/META-INF/tags/simplewebplain/form.tag
| | | | | | | >> 5468 loadTagFile /META-INF/tags/simplewebplain/form.tag
| | | | | | | | >> 5484 wrapper.loadTagFile
| | | | | | | | | >> 5484 generateJava
| | | | | | | | |    5578 generateJava paresed & validated
\form_tag.java
| | | | | | | | | | >> 5578 Visiting tag
/META-INF/tags/simplewebplain/form-begin.tag
| | | | | | | | | |    5578 loadTagFile CompCtx
/META-INF/tags/simplewebplain/form-begin.tag
| | | | | | | | | | | >> 5578 loadTagFile
/META-INF/tags/simplewebplain/form-begin.tag
| | | | | | | | | | | | >> 5578 wrapper.loadTagFile
| | | | | | | | | | | | | >> 5578 generateJava
| | | | | | | | | | | | |    5671 generateJava paresed & validated
\form_002dbegin_tag.java
| | | | | | | | | | | | |    5671 generateJava tag file processed
\form_002dbegin_tag.java
| | | | | | | | | | | | | << 5687 109 generateJava generated
\form_002dbegin_tag.java
| | | | | | | | | | | | | >> 5687 generateClass in compile
| | | | | | | | | | | | | << 5890 203 generateClass in compile
| | | | | | | | | | | |    5890 wrapper.loadTagFile  compiled,
loading...
| | | | | | | | | | | | << 5890 312 wrapper.loadTagFile
| | | | | | | | | | | << 5906 328 loadTagFile
/META-INF/tags/simplewebplain/form-begin.tag
| | | | | | | | | | << 5906 328 Visited tag
/META-INF/tags/simplewebplain/form-begin.tag
| | | | | | | | | | >> 5906 Visiting tag
/META-INF/tags/simplewebplain/form-end.tag
| | | | | | | | | |    5906 loadTagFile CompCtx
/META-INF/tags/simplewebplain/form-end.tag
| | | | | | | | | | | >> 5906 loadTagFile
/META-INF/tags/simplewebplain/form-end.tag
| | | | | | | | | | | | >> 5906 wrapper.loadTagFile
| | | | | | | | | | | | | >> 5906 generateJava
| | | | | | | | | | | | |    6062 generateJava paresed & validated
\form_002dend_tag.java
| | | | | | | | | | | | |    6078 generateJava tag file processed
\form_002dend_tag.java
| | | | | | | | | | | | | << 6078 172 generateJava generated
\form_002dend_tag.java
| | | | | | | | | | | | | >> 6078 generateClass in compile
| | | | | | | | | | | | | << 6312 234 generateClass in compile
| | | | | | | | | | | |    6312 wrapper.loadTagFile  compiled,
loading...
| | | | | | | | | | | | << 6312 406 wrapper.loadTagFile
| | | | | | | | | | | << 6328 422 loadTagFile
/META-INF/tags/simplewebplain/form-end.tag
| | | | | | | | | | << 6328 422 Visited tag
/META-INF/tags/simplewebplain/form-end.tag
| | | | | | | | |    6328 generateJava tag file processed \form_tag.java
| | | | | | | | | << 6343 859 generateJava generated \form_tag.java
| | | | | | | | | >> 6343 generateClass in compile
| | | | | | | | | << 6656 313 generateClass in compile
| | | | | | | |    6656 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 6671 1187 wrapper.loadTagFile
| | | | | | | << 6687 1219 loadTagFile
/META-INF/tags/simplewebplain/form.tag
| | | | | | << 6687 1219 Visited tag
/META-INF/tags/simplewebplain/form.tag
| | | | | | >> 6687 Visiting tag
/META-INF/tags/simplewebplain/autoCrudGroup.tag
| | | | | |    6687 loadTagFile CompCtx
/META-INF/tags/simplewebplain/autoCrudGroup.tag
| | | | | | | >> 6687 loadTagFile
/META-INF/tags/simplewebplain/autoCrudGroup.tag
| | | | | | | | >> 6687 wrapper.loadTagFile
| | | | | | | | | >> 6687 generateJava
| | | | | | | | |    6984 generateJava paresed & validated
\autoCrudGroup_tag.java
| | | | | | | | | | >> 6984 Visiting tag
/META-INF/tags/simplewebplain/field.tag
| | | | | | | | | |    6984 loadTagFile CompCtx
/META-INF/tags/simplewebplain/field.tag
| | | | | | | | | | | >> 6984 loadTagFile
/META-INF/tags/simplewebplain/field.tag
| | | | | | | | | | | | >> 6984 wrapper.loadTagFile
| | | | | | | | | | | | | >> 6984 generateJava
| | | | | | | | | | | | |    7124 generateJava paresed & validated
\field_tag.java
| | | | | | | | | | | | | | >> 7124 Visiting tag
/META-INF/tags/simplewebplain/widget.tag
| | | | | | | | | | | | | |    7124 loadTagFile CompCtx
/META-INF/tags/simplewebplain/widget.tag
| | | | | | | | | | | | | | | >> 7124 loadTagFile
/META-INF/tags/simplewebplain/widget.tag
| | | | | | | | | | | | | | | | >> 7124 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | >> 7124 generateJava
| | | | | | | | | | | | | | | | |    7281 generateJava paresed &
validated \widget_tag.java
| | | | | | | | | | | | | | | | | | >> 7281 Visiting tag
/META-INF/tags/simplewebplain/selectOptions.tag
| | | | | | | | | | | | | | | | | |    7281 loadTagFile CompCtx
/META-INF/tags/simplewebplain/selectOptions.tag
| | | | | | | | | | | | | | | | | | | >> 7281 loadTagFile
/META-INF/tags/simplewebplain/selectOptions.tag
| | | | | | | | | | | | | | | | | | | | >> 7281 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | | | >> 7281 generateJava
| | | | | | | | | | | | | | | | | | | | |    7328 generateJava paresed &
validated \selectOptions_tag.java
| | | | | | | | | | | | | | | | | | | | |    7328 generateJava tag file
processed \selectOptions_tag.java
| | | | | | | | | | | | | | | | | | | | | << 7343 62 generateJava
generated \selectOptions_tag.java
| | | | | | | | | | | | | | | | | | | | | >> 7343 generateClass in
compile
| | | | | | | | | | | | | | | | | | | | | << 7703 360 generateClass in
compile
| | | | | | | | | | | | | | | | | | | |    7703 wrapper.loadTagFile
compiled, loading...
| | | | | | | | | | | | | | | | | | | | << 7718 437 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | << 7734 453 loadTagFile
/META-INF/tags/simplewebplain/selectOptions.tag
| | | | | | | | | | | | | | | | | | << 7734 453 Visited tag
/META-INF/tags/simplewebplain/selectOptions.tag
| | | | | | | | | | | | | | | | | | >> 7734 Visiting tag
/META-INF/tags/simplewebplain/radioButtons.tag
| | | | | | | | | | | | | | | | | |    7734 loadTagFile CompCtx
/META-INF/tags/simplewebplain/radioButtons.tag
| | | | | | | | | | | | | | | | | | | >> 7734 loadTagFile
/META-INF/tags/simplewebplain/radioButtons.tag
| | | | | | | | | | | | | | | | | | | | >> 7734 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | | | >> 7749 generateJava
| | | | | | | | | | | | | | | | | | | | |    7890 generateJava paresed &
validated \radioButtons_tag.java
| | | | | | | | | | | | | | | | | | | | | | >> 7890 Visiting tag
/META-INF/tags/simplewebplain/radioButton.tag
| | | | | | | | | | | | | | | | | | | | | |    7890 loadTagFile CompCtx
/META-INF/tags/simplewebplain/radioButton.tag
| | | | | | | | | | | | | | | | | | | | | | | >> 7890 loadTagFile
/META-INF/tags/simplewebplain/radioButton.tag
| | | | | | | | | | | | | | | | | | | | | | | | >> 7890
wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | | | | | | | >> 7906 generateJava
| | | | | | | | | | | | | | | | | | | | | | | | |    7953 generateJava
paresed & validated \radioButton_tag.java
| | | | | | | | | | | | | | | | | | | | | | | | |    7953 generateJava
tag file processed \radioButton_tag.java
| | | | | | | | | | | | | | | | | | | | | | | | | << 7968 62
generateJava generated \radioButton_tag.java
| | | | | | | | | | | | | | | | | | | | | | | | | >> 7968 generateClass
in compile
| | | | | | | | | | | | | | | | | | | | | | | | | << 8281 313
generateClass in compile
| | | | | | | | | | | | | | | | | | | | | | | |    8281
wrapper.loadTagFile  compiled, loading...
| | | | | | | | | | | | | | | | | | | | | | | | << 8296 406
wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | | | | | << 8312 422 loadTagFile
/META-INF/tags/simplewebplain/radioButton.tag
| | | | | | | | | | | | | | | | | | | | | | << 8312 422 Visited tag
/META-INF/tags/simplewebplain/radioButton.tag
| | | | | | | | | | | | | | | | | | | | |    8312 generateJava tag file
processed \radioButtons_tag.java
| | | | | | | | | | | | | | | | | | | | | << 8328 579 generateJava
generated \radioButtons_tag.java
| | | | | | | | | | | | | | | | | | | | | >> 8328 generateClass in
compile
| | | | | | | | | | | | | | | | | | | | | << 8671 343 generateClass in
compile
| | | | | | | | | | | | | | | | | | | |    8671 wrapper.loadTagFile
compiled, loading...
| | | | | | | | | | | | | | | | | | | | << 8671 937 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | << 8687 953 loadTagFile
/META-INF/tags/simplewebplain/radioButtons.tag
| | | | | | | | | | | | | | | | | | << 8687 953 Visited tag
/META-INF/tags/simplewebplain/radioButtons.tag
| | | | | | | | | | | | | | | | | | >> 8687 Visiting tag
/META-INF/tags/simplewebplain/checkbox.tag
| | | | | | | | | | | | | | | | | |    8687 loadTagFile CompCtx
/META-INF/tags/simplewebplain/checkbox.tag
| | | | | | | | | | | | | | | | | | | >> 8687 loadTagFile
/META-INF/tags/simplewebplain/checkbox.tag
| | | | | | | | | | | | | | | | | | | | >> 8687 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | | | >> 8687 generateJava
| | | | | | | | | | | | | | | | | | | | |    8765 generateJava paresed &
validated \checkbox_tag.java
| | | | | | | | | | | | | | | | | | | | |    8781 generateJava tag file
processed \checkbox_tag.java
| | | | | | | | | | | | | | | | | | | | | << 8781 94 generateJava
generated \checkbox_tag.java
| | | | | | | | | | | | | | | | | | | | | >> 8781 generateClass in
compile
| | | | | | | | | | | | | | | | | | | | | << 9203 422 generateClass in
compile
| | | | | | | | | | | | | | | | | | | |    9203 wrapper.loadTagFile
compiled, loading...
| | | | | | | | | | | | | | | | | | | | << 9203 516 wrapper.loadTagFile
| | | | | | | | | | | | | | | | | | | << 9218 531 loadTagFile
/META-INF/tags/simplewebplain/checkbox.tag
| | | | | | | | | | | | | | | | | | << 9218 531 Visited tag
/META-INF/tags/simplewebplain/checkbox.tag
| | | | | | | | | | | | | | | | |    9218 generateJava tag file
processed \widget_tag.java
| | | | | | | | | | | | | | | | | << 9312 2188 generateJava generated
\widget_tag.java
| | | | | | | | | | | | | | | | | >> 9312 generateClass in compile
| | | | | | | | | | | | | | | | | << 9749 437 generateClass in compile
| | | | | | | | | | | | | | | |    9749 wrapper.loadTagFile  compiled,
loading...
| | | | | | | | | | | | | | | | << 9765 2641 wrapper.loadTagFile
| | | | | | | | | | | | | | | << 9781 2657 loadTagFile
/META-INF/tags/simplewebplain/widget.tag
| | | | | | | | | | | | | | << 9781 2657 Visited tag
/META-INF/tags/simplewebplain/widget.tag
| | | | | | | | | | | | |    9781 generateJava tag file processed
\field_tag.java
| | | | | | | | | | | | | << 9796 2812 generateJava generated
\field_tag.java
| | | | | | | | | | | | | >> 9812 generateClass in compile
| | | | | | | | | | | | | << 10109 297 generateClass in compile
| | | | | | | | | | | |    10124 wrapper.loadTagFile  compiled,
loading...
| | | | | | | | | | | | << 10124 3140 wrapper.loadTagFile
| | | | | | | | | | | << 10140 3156 loadTagFile
/META-INF/tags/simplewebplain/field.tag
| | | | | | | | | | << 10140 3156 Visited tag
/META-INF/tags/simplewebplain/field.tag
| | | | | | | | |    10140 generateJava tag file processed
\autoCrudGroup_tag.java
| | | | | | | | | << 10171 3484 generateJava generated
\autoCrudGroup_tag.java
| | | | | | | | | >> 10171 generateClass in compile
| | | | | | | | | << 10515 344 generateClass in compile
| | | | | | | |    10515 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 10515 3828 wrapper.loadTagFile
| | | | | | | << 10531 3844 loadTagFile
/META-INF/tags/simplewebplain/autoCrudGroup.tag
| | | | | | << 10531 3844 Visited tag
/META-INF/tags/simplewebplain/autoCrudGroup.tag
| | | | | | >> 10531 Visiting tag
/META-INF/tags/simplewebplain/buttons.tag
| | | | | |    10531 loadTagFile CompCtx
/META-INF/tags/simplewebplain/buttons.tag
| | | | | | | >> 10531 loadTagFile
/META-INF/tags/simplewebplain/buttons.tag
| | | | | | | | >> 10531 wrapper.loadTagFile
| | | | | | | | | >> 10531 generateJava
| | | | | | | | |    10718 generateJava paresed & validated
\buttons_tag.java
| | | | | | | | |    10718 generateJava tag file processed
\buttons_tag.java
| | | | | | | | | << 10734 203 generateJava generated \buttons_tag.java
| | | | | | | | | >> 10734 generateClass in compile
| | | | | | | | | << 11187 453 generateClass in compile
| | | | | | | |    11187 wrapper.loadTagFile  compiled, loading...
| | | | | | | | << 11187 656 wrapper.loadTagFile
| | | | | | | << 11203 672 loadTagFile
/META-INF/tags/simplewebplain/buttons.tag
| | | | | | << 11203 672 Visited tag
/META-INF/tags/simplewebplain/buttons.tag
| | | | |    11203 generateJava tag file processed \autoCrud_tag.java
| | | | | << 11249 5937 generateJava generated \autoCrud_tag.java
| | | | | >> 11249 generateClass in compile
| | | | | << 11671 422 generateClass in compile
| | | |    11671 wrapper.loadTagFile  compiled, loading...
| | | | << 11687 6391 wrapper.loadTagFile
| | | << 11702 6406 loadTagFile
/META-INF/tags/simplewebplain/autoCrud.tag
| | << 11702 6406 Visited tag /META-INF/tags/simplewebplain/autoCrud.tag
|    11702 generateJava tag file processed \WAutoCrudPage_jsp.java
| << 11734 11734 generateJava generated \WAutoCrudPage_jsp.java
=== parse 3483 gen 592 javac 7110
| >> 11734 generateClass in compile
| << 12109 375 generateClass in compile
=== parse 3483 gen 592 javac 7485
1==  doFinalize end 13594

--
Dr Anthony Berglas 
Ph. +61 7 3227 4410
(Mob. +61 42 783 0248)
ABerglas@RSA.com; Anthony@Berglas.org


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message