You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by bu...@apache.org on 2018/02/18 20:20:10 UTC

svn commit: r1025568 [3/4] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/supported-environments-and-versions.html
==============================================================================
--- websites/production/tapestry/content/supported-environments-and-versions.html (original)
+++ websites/production/tapestry/content/supported-environments-and-versions.html Sun Feb 18 20:20:09 2018
@@ -67,7 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>Tapestry is compatible with a pretty wide range of app servers, Java versions, and open source libraries. Not all combinations are known to work, however.</p><p>Note: blanks in the support matrix tables below do NOT indicate incompatibility. They are just documentation gaps.</p><p>If you know of any other known compatibilities or incompatibilities, please add a comment at the bottom of this page, or on the&#160;<a  href="supported-environments-and-versions.html">Tapestry Users mailing list</a> mailing list.</p><h2 id="SupportedEnvironmentsandVersions-Java&amp;ServletAPIVersions">Java &amp; Servlet API Versions</h2><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan
 ="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Java JRE</td><td colspan="1" rowspan="1" class="confluenceTd">1.8<sup>1</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.7, 1.8<sup>1</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.6 - 1.8<sup>1,2</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.6, 1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1
 .6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.4-1.6</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Servlet API</td><td colspan="1" rowspan="1" class="confluenceTd">3.0+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.2-2.3</td></tr></tbody></table></div><p class="confluence-link"><sup class="confluence-link">1</sup> Tapestry does not yet work with Java 1.9. See&#160;<a  clas
 s="external-link" href="https://issues.apache.org/jira/browse/TAP5-2588"><span class="confluence-link">TAP5-2588</span></a>.</p><p><sup>2</sup> For using Tapestry 5.3.8 with Java 1.8 see <a  href="release-notes-538.html">Release Notes 5.3.8</a></p><p><sup>3</sup> Servlet API 2.5 requires JDK 1.5+</p><h2 id="SupportedEnvironmentsandVersions-AppServers">App Servers</h2><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspa
 n="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Apache Tomcat</td><td colspan="1" rowspan="1" class="confluenceTd">6+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">6+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Jetty</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;9</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;7-9</td><td colspan="1" rowspan="1" class
 ="confluenceTd">&#160;6-9</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-7</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Glassfish</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">2.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Apache TomEE</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">JBoss EAP</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">4.2.3</td><td colspan="1" rowspan=
 "1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">4+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Wildfly/JBoss AS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceT
 d">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Heroku</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Google App Engine</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160
 ;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Amazon AWS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan
 ="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table></div><h2 id="SupportedEnvironmentsandVersions-Libraries">Libraries</h2><p>These are the library versions known to work (and, in some cases, bundled with Tapestry). Unless otherwise noted, adjacent versions will often work fine as well.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.3-5.3.6</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.2</th><th colspan="1" rows
 pan="1" class="confluenceTh">5.3 - 5.3.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.2.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.16</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Hibernate</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">?-4.3.6</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#16
 0;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.5.4-3.6.0</td><td colspan="1" rowspan="1" class="confluenceTd">-3.6.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.3.0+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">JPA</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" row
 span="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Spring</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd
 ">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.1.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">jQuery.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.12.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Prototype.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.7.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="c
 onfluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.2</td><td colspan="1" rowspan="1" class="confluenceTd">1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.6</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Bootstrap CSS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.3.6</td><td colspan="1" rowspan="1" class="confluenceTd">3.0.2</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
 rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Moment.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">2.12.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="conflu
 enceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Less4J</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.2.1-1.9</td><td co
 lspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Underscore.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1"
  class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.3.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.17</td><td colspan="1" rowspan="1" class="confluenceTd">1.17</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table></div></div>
+                <div id="ConfluenceContent"><p>Tapestry is compatible with a pretty wide range of app servers, Java versions, and open source libraries. Not all combinations are known to work, however.</p><p>Note: blanks in the support matrix tables below do NOT indicate incompatibility. They are just documentation gaps.</p><p>If you know of any other known compatibilities or incompatibilities, please add a comment at the bottom of this page, or on the&#160;<a  href="supported-environments-and-versions.html">Tapestry Users mailing list</a> mailing list.</p><h2 id="SupportedEnvironmentsandVersions-Java&amp;ServletAPIVersions">Java &amp; Servlet API Versions</h2><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan
 ="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Java JRE</td><td colspan="1" rowspan="1" class="confluenceTd">1.8<sup>1</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.7, 1.8<sup>1</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.6 - 1.8<sup>1,2</sup></td><td colspan="1" rowspan="1" class="confluenceTd">1.6, 1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1
 .6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.4-1.6</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Servlet API</td><td colspan="1" rowspan="1" class="confluenceTd">3.0+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" class="confluenceTd">2.2-2.3</td></tr></tbody></table></div><p class="confluence-link"><sup class="confluence-link">1</sup> Tapestry does not yet work with Java 1.9. See&#160;<a  clas
 s="external-link" href="https://issues.apache.org/jira/browse/TAP5-2588"><span class="confluence-link">TAP5-2588</span></a>.</p><p><sup>2</sup> For using Tapestry 5.3.8 with Java 1.8 see <a  href="release-notes-538.html">Release Notes 5.3.8</a></p><p><sup>3</sup> Servlet API 2.5 requires JDK 1.5+</p><h2 id="SupportedEnvironmentsandVersions-AppServers">App Servers</h2><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspa
 n="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Apache Tomcat</td><td colspan="1" rowspan="1" class="confluenceTd">6+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">6+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Jetty</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;9</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;7-9</td><td colspan="1" rowspan="1" class
 ="confluenceTd">&#160;6-9</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" class="confluenceTd">6-7</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Glassfish</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">2.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Apache TomEE</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">JBoss EAP</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">4.2.3</td><td colspan="1" rowspan=
 "1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">4+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Wildfly/JBoss AS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceT
 d">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Heroku</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Google App Engine</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160
 ;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Amazon AWS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan
 ="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table></div><h2 id="SupportedEnvironmentsandVersions-Libraries">Libraries</h2><p>These are the library versions known to work (and, in some cases, bundled with Tapestry). Unless otherwise noted, adjacent versions will often work fine as well.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" class="confluenceTh">5.4.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.4</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.7</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.3-5.3.6</th><th colspan="1" rowspan="1" class="confluenceTh">5.3.2</th><th colspan="1" rows
 pan="1" class="confluenceTh">5.3 - 5.3.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.2.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.16</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Hibernate</td><td colspan="1" rowspan="1" class="confluenceTd">5.1.0.Final</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">?-4.3.6</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"
 >&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.5.4-3.6.0</td><td colspan="1" rowspan="1" class="confluenceTd">-3.6.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.3.0+</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">JPA</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1
 " rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Spring</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="conflue
 nceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.1.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">jQuery.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.12.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td cols
 pan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Prototype.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.7.1</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" cla
 ss="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.6.0.2</td><td colspan="1" rowspan="1" class="confluenceTd">1.6</td><td colspan="1" rowspan="1" class="confluenceTd">1.6</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Bootstrap CSS</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.3.6</td><td colspan="1" rowspan="1" class="confluenceTd">3.0.2</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan
 ="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Moment.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">2.12.0</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="c
 onfluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Less4J</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.2.1-1.9</td><
 td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">Underscore.js</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspa
 n="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">1.3.3</td><td colspan="1" rowspan="1" class="confluenceTd">1.17</td><td colspan="1" rowspan="1" class="confluenceTd">1.17</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table></div></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/symbols.html
==============================================================================
--- websites/production/tapestry/content/symbols.html (original)
+++ websites/production/tapestry/content/symbols.html Sun Feb 18 20:20:09 2018
@@ -31,6 +31,7 @@
     <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
     <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
           <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+          <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
         <script>
       SyntaxHighlighter.defaults['toolbar'] = false;
       SyntaxHighlighter.all();
@@ -75,7 +76,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p><strong>Symbols</strong> are named configuration settings for Tapestry IOC-based services. Tapestry provides mechanisms for easy access to symbols from within such services.</p><div class="aui-label" style="float:right" title="Related Articles">
+                <div id="ConfluenceContent"><p>&#160;</p><p></p><p><strong>Symbols</strong> are named configuration settings for Tapestry IOC-based services. Tapestry provides mechanisms for easy access to symbols from within such services.</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -147,7 +148,7 @@
 <h2 id="Symbols-Syntax">Syntax</h2><p>The syntax of symbols is based on Ant expressions. That is, the name is surrounded by ${ and } characters:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">${some.symbol.name}
 </pre>
-</div></div><p>The value on the inside is the <em>symbol name</em>. By convention, the symbol name is segmented with periods (for example, "tapestry.production-mode").</p><h2 id="Symbols-Built-inSymbols">Built-in Symbols</h2><p>The <a  href="symbols.html">Symbols</a> page lists the symbol names used by Tapestry's built-in services.</p><h2 id="Symbols-UsingSymbolsinyourServices">Using Symbols in your Services</h2><p>Symbols are used inside the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html">Value</a> and @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotations.</p><p>For example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The value on the inside is the <em>symbol name</em>. By convention, the symbol name is segmented with periods (for example, "tapestry.production-mode").</p><h2 id="Symbols-Built-inSymbols">Built-in Symbols</h2><p class="confluence-link">The&#160;<a  href="configuration.html">Configuration</a> page lists most of the symbol names used by Tapestry's built-in services.</p><h2 id="Symbols-UsingSymbolsinyourServices">Using Symbols in your Services</h2><p>Symbols are used inside the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html">Value</a> and @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotations.</p><p>For example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static MyService build(
       @InjectService("${some-service-id}") Collaborator collab)
   {
@@ -161,7 +162,7 @@
     if (productionMode) {
       . . .
 </pre>
-</div></div><p>Here Tapestry has <a  href="symbols.html">coerced</a> the "tapestry.production-mode" symbol to a boolean to be injected.</p><p>As an alternative, the @Symbol annotation, may be used:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Here Tapestry has <a  href="type-coercion.html">coerced</a> the "tapestry.production-mode" symbol to a boolean to be injected.</p><p>As an alternative, the @Symbol annotation, may be used:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class MyService implements MyServiceInterface
 {
   public MyService(@Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, ...)
@@ -180,15 +181,15 @@
     }
   }</pre>
 </div></div><p>You can even use them directly in a component template, using the "symbol" binding prefix:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">&lt;t:if test="!symbol:tapestry.production-mode"&gt;
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:if test="!symbol:tapestry.production-mode"&gt;
   &lt;p&gt;WARNING: We're running in development mode (slower, and less secure)&lt;/p&gt;
 &lt;/t:if&gt;</pre>
-</div></div><h2 id="Symbols-SymbolResolution">Symbol Resolution</h2><p>Symbols are resolved by the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolSource.html">SymbolSource</a> service. The SymbolSource service checks against an ordered list of <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolProvider.html">SymbolProvider</a> objects.</p><p>You may employ additional symbol providers by contributing to the SymbolSource service configuration, which is an ordered list of SymbolProviders.</p><p>By default, there are three providers:</p><h3 id="Symbols-SystemPropertiesProvider">SystemProperties Provider</h3><p>The first provider allows JVM System Properties to provide symbol values. This allows the use of the <strong>java</strong> command's <strong>-D</strong> option to provide runtime overrides. This is most often used when testing code, rather than in pro
 duction. SystemProperties is always checked first.</p><h3 id="Symbols-ApplicationDefaultsProvider">ApplicationDefaults Provider</h3><p>Values not found as System Properties are searched for in the ApplicationDefaults. This service, ApplicationDefaults, may be configured using a mapped configuration to provide values.</p><p>From the previous example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h2 id="Symbols-SymbolResolution">Symbol Resolution</h2><p>Symbols are resolved by the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolSource.html">SymbolSource</a> service. The SymbolSource service checks against an ordered list of <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolProvider.html">SymbolProvider</a> objects.</p><p>You may employ additional symbol providers by contributing to the SymbolSource service configuration, which is an ordered list of SymbolProviders.</p><p>By default, there are three providers:</p><h3 id="Symbols-SystemPropertiesProvider">SystemProperties Provider</h3><p>The first provider allows JVM System Properties to provide symbol values. This allows the use of the <strong>java</strong> command's <strong>-D</strong> option to provide runtime overrides. This is most often used when testing code, rather than in pro
 duction. SystemProperties is always checked first.</p><h3 id="Symbols-ApplicationDefaultsProvider">ApplicationDefaults Provider</h3><p>Values not found as System Properties are searched for in the ApplicationDefaults. This service, ApplicationDefaults, may be configured using a mapped configuration to provide values.</p><p>From the previous example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public void contributeApplicationDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
     configuration.add("some-service-id", "WackyCollaborator");
   }</pre>
-</div></div><h3 id="Symbols-FactoryDefaultsProvider">FactoryDefaults Provider</h3><p>This is the same as ApplicationDefaults, but checked only if a value is not satisfied by SystemProperties or ApplicationDefaults.</p><p>Libraries will typically set reasonable defaults as contributions to the FactoryDefaults service configuration. Individual applications may hard code overrides of those defaults using ApplicationDefaults. Individual developers may override even those defaults by setting JVM System Properties.</p><p>FactoryDefaults is always checked last when resolving symbol names to symbol values.</p><h2 id="Symbols-RecursiveSymbols">Recursive Symbols</h2><p>It is possible and valid to define one symbol in terms of one or more other symbols.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h3 id="Symbols-FactoryDefaultsProvider">FactoryDefaults Provider</h3><p>This is the same as ApplicationDefaults, but checked only if a value is not satisfied by SystemProperties or ApplicationDefaults.</p><p>Libraries will typically set reasonable defaults as contributions to the FactoryDefaults service configuration. Individual applications may hard code overrides of those defaults using ApplicationDefaults. Individual developers may override even those defaults by setting JVM System Properties.</p><p>FactoryDefaults is always checked last when resolving symbol names to symbol values.</p><h2 id="Symbols-RecursiveSymbols">Recursive Symbols</h2><p>It is possible and valid to define one symbol in terms of one or more other symbols.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public void contributeFactoryDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
       configuration.add("report.url", "http://${report.host}:${report.port}/${report.path}");
@@ -196,7 +197,7 @@
       configuration.add("report.port", "80");
       configuration.add("report.path", "/report.cgi");
   }</pre>
-</div></div><p>The ordinary default for <code>report.url</code> will be <code><a  class="external-link" href="http://www.myreportsite.com:80/report.cgi" rel="nofollow">http://www.myreportsite.com:80/report.cgi</a></code>.</p><p>However, this can be changed by making an overriding contribution to the ApplicationDefaults service configuration.</p><p>Tapestry checks that no symbol is directly or indirectly dependent on itself. For example, the following contribution is illegal:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The ordinary default for <code>report.url</code> will be: <code><span class="nolink">http://www.myreportsite.com:80/report.cgi</span></code></p><p>However, this can be changed by making an overriding contribution to the ApplicationDefaults service configuration.</p><p>Tapestry checks that no symbol is directly or indirectly dependent on itself. For example, the following contribution is illegal:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public void contributeApplicationDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
       configuration.add("report.path", "${report.url}/report.cgi");

Modified: websites/production/tapestry/content/tapestry-ioc-configuration.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-configuration.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-configuration.html Sun Feb 18 20:20:09 2018
@@ -144,7 +144,7 @@
 </div>
 
 
-<p>One of the key concepts in Tapestry IoC is <em>distributed configuration</em>. The <em>distributed</em> part refers to the fact that <em>any module</em> may configure a service. Distributed configuration is the key feature of Tapestry IoC that supports extensibility and modularity.</p><p>Modules configure a service by <em>contributing</em> to service configurations. This may seem esoteric but is really pretty simple. We'll explain with an example.</p><p>Let's say you've written a bunch of different services, each of which does something specific for a particular type of file (identified by the file's extension), and each implements the same interface, which we'll call FileServicer. And now let's say you need a central service that selects the one of your FileServicer implementations based on a given file extension. You start by providing a <a  href="tapestry-ioc-configuration.html">service builder method</a>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="c
 odeContent panelContent pdl">
+<p>One of the key concepts in Tapestry IoC is <em>distributed configuration</em>. The <em>distributed</em> part refers to the fact that <em>any module</em> may configure a service. Distributed configuration is the key feature of Tapestry IoC that supports extensibility and modularity.</p><p>Modules configure a service by <em>contributing</em> to service configurations. This may seem esoteric but is really pretty simple. We'll explain with an example.</p><p>Let's say you've written a bunch of different services, each of which does something specific for a particular type of file (identified by the file's extension), and each implements the same interface, which we'll call FileServicer. And now let's say you need a central service that selects the one of your FileServicer implementations based on a given file extension. You start by providing a <a  href="defining-tapestry-ioc-services.html">service builder method</a>:</p><div class="code panel pdl" style="border-width: 1px;"><div clas
 s="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static FileServiceDispatcher buildFileServicerDispatcher(Map&lt;String,FileServicer&gt; contributions)
   {
     return new FileServiceDispatcherImpl(contributions);
@@ -155,7 +155,7 @@
     configuration.add("txt", new TextFileServicer());
     configuration.add("pdf", new PDFFileServicer());
   }  </pre>
-</div></div><p>Or, instead of instantiating those services ourselves, we could <a  href="tapestry-ioc-configuration.html">inject</a> them:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Or, instead of instantiating those services ourselves, we could <a  href="injection-in-detail.html">inject</a> them:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static void contributeFileServicerDispatcher(MappedConfiguration&lt;String,FileServicer&gt; configuration,
   
     @InjectService("TextFileServicer") FileServicer textFileServicer,
@@ -177,7 +177,7 @@
 </p><div class="aui-message aui-message-info">
 Added in 5.2 
    &#160;
-</div>If you prefer annotations over naming conventions you can use the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Contribute.html">Contribute</a> annotation. As of version 5.2 this annotation that may be placed on a contributor method of a module instead of starting the methods name with "contribute". The value of the annotation is the type of the service to contribute into.<p>The primary reasons to use @Contribute and marker annotations is twofold:</p><ul><li>There is no longer a linkage between the contribution method name and the service id, which is much more refactoring safe: if you change the service interface name, or the ID of the service, your method will still be invoked when using @Contribute.</li></ul><ul><li>It makes it much easier for an <a  href="tapestry-ioc-configuration.html">override</a> of the service to get the configuration intended for the original service.</li></ul><p>The following example is 
 an annotation-based alternative for the contribution method above.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div>If you prefer annotations over naming conventions you can use the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Contribute.html">Contribute</a> annotation. As of version 5.2 this annotation that may be placed on a contributor method of a module instead of starting the methods name with "contribute". The value of the annotation is the type of the service to contribute into.<p>The primary reasons to use @Contribute and marker annotations is twofold:</p><ul><li>There is no longer a linkage between the contribution method name and the service id, which is much more refactoring safe: if you change the service interface name, or the ID of the service, your method will still be invoked when using @Contribute.</li></ul><ul><li>It makes it much easier for an <span class="confluence-link">override</span> of the service to get the configuration intended for the original service.</li></ul><p>The following example is an annotat
 ion-based alternative for the contribution method above.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">@Contribute(FileServiceDispatcher.class)
 public static void arbitraryMethodName(MappedConfiguration&lt;String,FileServicer&gt; configuration)
 {
@@ -221,7 +221,7 @@ public static void arbitraryMethodName(M
     configuration.add(new JMSStartup());
     configuration.add(new FileSystemStartup());
   }    </pre>
-</div></div><p>The Configuration interface defines just a single method: <code>add()</code>. This is very intentional: the only thing you can do is add new items. If we passed in a Collection, you might be tempted to check it for values, or remove them ... but that flies in the face of the fact that the order of execution of these service contribution methods is entirely unknown.</p><p>For readability, we've parameterized the configuration parameter of the method, constraining it to instances of java.lang.Runnable, so as to match the corresponding parameter. This is optional, but often very helpful. In any case, attempting to contribute an object that doesn't extend or implement the type (Runnable) will result in a runtime warning (and the value will be ignored).</p><p>Tapestry supports only this simple form of parameterized types. Java generics supports a wider form, "wildcards", that Tapestry doesn't understand.</p><p><span class="confluence-anchor-link" id="TapestryIoCConfigurati
 on-Ordered_List"></span></p><h2 id="TapestryIoCConfiguration-OrderedList">Ordered List</h2><p>Ordered lists are much more common. With an ordered list, the contributions are sorted into a proper order before being provided to the service builder method.</p><p>Again, the order in which service contribution methods are invoked is unknown. Therefore, the order in which objects are added to the configuration is not known. Instead, we enforce an order on the items <em>after</em> all the contributions have been added. As with <a  href="tapestry-ioc-configuration.html">service decorators</a>, we set the order by giving each contributed object a unique id, and identifying (by id) which items must preceded it in the list, and which must follow.</p><p>So, if we changed our Startup service to require a specific order for startup:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The Configuration interface defines just a single method: <code>add()</code>. This is very intentional: the only thing you can do is add new items. If we passed in a Collection, you might be tempted to check it for values, or remove them ... but that flies in the face of the fact that the order of execution of these service contribution methods is entirely unknown.</p><p>For readability, we've parameterized the configuration parameter of the method, constraining it to instances of java.lang.Runnable, so as to match the corresponding parameter. This is optional, but often very helpful. In any case, attempting to contribute an object that doesn't extend or implement the type (Runnable) will result in a runtime warning (and the value will be ignored).</p><p>Tapestry supports only this simple form of parameterized types. Java generics supports a wider form, "wildcards", that Tapestry doesn't understand.</p><p><span class="confluence-anchor-link" id="TapestryIoCConfigurati
 on-Ordered_List"></span></p><h2 id="TapestryIoCConfiguration-OrderedList">Ordered List</h2><p>Ordered lists are much more common. With an ordered list, the contributions are sorted into a proper order before being provided to the service builder method.</p><p>Again, the order in which service contribution methods are invoked is unknown. Therefore, the order in which objects are added to the configuration is not known. Instead, we enforce an order on the items <em>after</em> all the contributions have been added. As with <a  href="tapestry-ioc-decorators.html">service decorators</a>, we set the order by giving each contributed object a unique id, and identifying (by id) which items must preceded it in the list, and which must follow.</p><p>So, if we changed our Startup service to require a specific order for startup:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static Runnable buildStartup(final List&lt;Runnable&gt; configuration)
   {
     return new Runnable()
@@ -239,15 +239,14 @@ public static void arbitraryMethodName(M
     configuration.add("JMS", new JMSStartup());
     configuration.add("FileSystem", new FileSystemStartup(), "after:CacheSetup");
   }    </pre>
-</div></div><p>Often, you don't care about ordering; the first form of the add method is used then. The ordering algorithm will find a spot for the object (here the JMSStartup instance) based on the constraints of other contributed objects.</p><p>For the "FileSystem" contribution, a constraint has been specified, indicating that FileSystem should be ordered after some other contribution named "CacheSetup". Any number of such <a  href="tapestry-ioc-configuration.html">ordering constraints</a> may be specified (the <code>add()</code> method accepts a variable number of arguments).</p><p>The object passed in may be null; this is valid, and is considered a "join point": points of reference in the list that don't actually have any meaning of their own, but can be used when ordering other elements. <em>TODO: Show example for chain of command, once that's put together.</em></p><p>Null values, once ordered, are edited out (the List passed to the service builder method does not include any n
 ulls). Again, they are allowed as placeholders, for the actual contributed objects to organize themselves around.
+</div></div><p>Often, you don't care about ordering; the first form of the add method is used then. The ordering algorithm will find a spot for the object (here the JMSStartup instance) based on the constraints of other contributed objects.</p><p>For the "FileSystem" contribution, a constraint has been specified, indicating that FileSystem should be ordered after some other contribution named "CacheSetup". Any number of such <a  href="ordering-by-constraints.html">ordering constraints</a> may be specified (the <code>add()</code> method accepts a variable number of arguments).</p><p>The object passed in may be null; this is valid, and is considered a "join point": points of reference in the list that don't actually have any meaning of their own, but can be used when ordering other elements. <em>TODO: Show example for chain of command, once that's put together.</em></p><p>Null values, once ordered, are edited out (the List passed to the service builder method does not include any null
 s). Again, they are allowed as placeholders, for the actual contributed objects to organize themselves around.
 
 
 
 </p><div class="aui-message aui-message-info">
 Added in 5.3 
    When using {{add()}} without any specific constraints, a default constraint is added: after the previously added element. These default constraints are only within a single contribution method, but makes it much easier to set the order of several related contributions. Note that the contributions will be ordered relative to each other and it's possible that contributions by some other module or method may be interspersed between them.
-
-</div><h2 id="TapestryIoCConfiguration-MappedConfigurations">Mapped Configurations</h2><p>As discussed in the earlier examples, mapped configurations are also supported. The keys passed in must be unique. When conflicts occur, Tapestry will log warnings (identifying the source of the conflict, in terms of invoked methods), and ignore the conflicting value.</p><p>Neither the key nor the value may be null.</p><p>For mapped configurations where the key type is String, a <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/util/CaseInsensitiveMap.html">CaseInsensitiveMap</a> will be automatically used (and passed to the service builder method), to help ensure that <a  href="tapestry-ioc-configuration.html">case insensitivity</a> is automatic and pervasive.</p><h1 id="TapestryIoCConfiguration-InjectingClasses">Injecting Classes</h1><p>All three configuration interfaces have a second method, <code>addInstance()</code>. This method takes a cla
 ss, not an instance. The class is instantiated and contributed. If the constructor for the class takes dependencies, those are injected as well.</p><h1 id="TapestryIoCConfiguration-InjectingResources">Injecting Resources</h1><p>In addition to injecting services into a contributor method (via the @InjectService and @Inject annotations), Tapestry will key off of the parameter type to allow other things to be injected.</p><ul><li><a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectLocator.html">ObjectLocator</a>: access to other services visible to the contributing module</li><li>org.slf4j.Logger: the Logger for the service being contributed to</li></ul><p>No annotation is needed for these cases.</p><p><span class="confluence-anchor-link" id="TapestryIoCConfiguration-overrides"></span></p><h1 id="TapestryIoCConfiguration-ConfigurationOverrides">Configuration Overrides</h1><p>
+</div><h2 id="TapestryIoCConfiguration-MappedConfigurations">Mapped Configurations</h2><p>As discussed in the earlier examples, mapped configurations are also supported. The keys passed in must be unique. When conflicts occur, Tapestry will log warnings (identifying the source of the conflict, in terms of invoked methods), and ignore the conflicting value.</p><p>Neither the key nor the value may be null.</p><p>For mapped configurations where the key type is String, a <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/util/CaseInsensitiveMap.html">CaseInsensitiveMap</a> will be automatically used (and passed to the service builder method), to help ensure that <a  href="case-insensitivity.html">case insensitivity</a> is automatic and pervasive.</p><h1 id="TapestryIoCConfiguration-InjectingClasses">Injecting Classes</h1><p>All three configuration interfaces have a second method, <code>addInstance()</code>. This method takes a class, not 
 an instance. The class is instantiated and contributed. If the constructor for the class takes dependencies, those are injected as well.</p><h1 id="TapestryIoCConfiguration-InjectingResources">Injecting Resources</h1><p>In addition to injecting services into a contributor method (via the @InjectService and @Inject annotations), Tapestry will key off of the parameter type to allow other things to be injected.</p><ul><li><a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectLocator.html">ObjectLocator</a>: access to other services visible to the contributing module</li><li>org.slf4j.Logger: the Logger for the service being contributed to</li></ul><p>No annotation is needed for these cases.</p><p><span class="confluence-anchor-link" id="TapestryIoCConfiguration-overrides"></span></p><h1 id="TapestryIoCConfiguration-ConfigurationOverrides">Configuration Overrides</h1><p>