Modified: websites/production/tapestry/content/release-notes.html
==============================================================================
--- websites/production/tapestry/content/release-notes.html (original)
+++ websites/production/tapestry/content/release-notes.html Fri Jan 24 12:18:16 
2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/release-process.html
==============================================================================
--- websites/production/tapestry/content/release-process.html (original)
+++ websites/production/tapestry/content/release-process.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/release-upgrade-faq.html
==============================================================================
--- websites/production/tapestry/content/release-upgrade-faq.html (original)
+++ websites/production/tapestry/content/release-upgrade-faq.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -144,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="ReleaseUpgradeFAQ-ReleaseUpgrade">Release Upgrade</h1><p>Main Article: <a 
href="release-upgrade-faq.html">Release Upgrade FAQ</a></p><h2 
id="ReleaseUpgradeFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1737227528935 {padding: 0px;}
-div.rbtoc1737227528935 ul {margin-left: 0px;}
-div.rbtoc1737227528935 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720812444 {padding: 0px;}
+div.rbtoc1737720812444 ul {margin-left: 0px;}
+div.rbtoc1737720812444 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1737227528935">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720812444">
 <ul class="toc-indentation"><li><a 
href="#ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
 do I get an exception about 
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to 
5.2?</a></li></ul>
 </div><h2 
id="ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
 do I get an exception about 
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to 
5.2?</h2><p>Although Tapestry works very hard to keep backwards compatibility 
between releases for <em>public</em> APIs, all <em>internal</em> APIs are 
subject to change. This error is commonly due to the use of the ChenilleKit 
library, which makes use of some internal APIs. You must also upgrade your 
ChenilleKit dependency when moving from Tapestry 5.1 to 5.2 or later. See the 
<a class="external-link" 
href="http://tapestry.markmail.org/thread/3cj2wuvl4idnpmjr"; 
rel="nofollow">complete discussion of this from the Tapestry user mailing 
list</a>.</p></div>
             </div>

Modified: websites/production/tapestry/content/reload.html
==============================================================================
--- websites/production/tapestry/content/reload.html (original)
+++ websites/production/tapestry/content/reload.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/request-processing-faq.html
==============================================================================
--- websites/production/tapestry/content/request-processing-faq.html (original)
+++ websites/production/tapestry/content/request-processing-faq.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -144,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="RequestProcessingFAQ-RequestProcessing">Request Processing</h1><h2 
id="RequestProcessingFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1737227527076 {padding: 0px;}
-div.rbtoc1737227527076 ul {margin-left: 0px;}
-div.rbtoc1737227527076 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720830462 {padding: 0px;}
+div.rbtoc1737720830462 ul {margin-left: 0px;}
+div.rbtoc1737720830462 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1737227527076">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720830462">
 <ul class="toc-indentation"><li><a 
href="#RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How do I get 
Tapestry to not handle a request?</a></li></ul>
 </div><h2 id="RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How 
do I get Tapestry to <strong>not</strong> handle a request?</h2><p>Often, when 
<a href="integration-with-existing-applications.html">integrating with outside 
libraries, or working with legacy code</a>, you will want Tapestry to ignore a 
request and let the normal servlet or other processing handle the 
request.</p><p>The easy way to do this is to contribute a regular expression to 
the <a href="configuration.html">IgnoredPathsFilter service</a>, whose job is 
to exclude some requests.</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
 <pre><code class="language-java">public static void 
contributeIgnoredPathsFilter(Configuration&lt;String&gt; configuration)

Modified: websites/production/tapestry/content/request-processing.html
==============================================================================
--- websites/production/tapestry/content/request-processing.html (original)
+++ websites/production/tapestry/content/request-processing.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -206,7 +217,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a href="component-events-faq.html">Component Events 
FAQ</a>
+                        <a href="request-processing.html">Request 
Processing</a>
                 
                         
                     </div>
@@ -215,7 +226,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a href="request-processing.html">Request 
Processing</a>
+                        <a href="component-events-faq.html">Component Events 
FAQ</a>
                 
                         
                     </div>

Modified: websites/production/tapestry/content/response-compression.html
==============================================================================
--- websites/production/tapestry/content/response-compression.html (original)
+++ websites/production/tapestry/content/response-compression.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -161,7 +172,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a href="request-processing.html">Request 
Processing</a>
+                        <a href="configuration.html">Configuration</a>
                 
                         
                     </div>
@@ -170,7 +181,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a href="configuration.html">Configuration</a>
+                        <a href="request-processing.html">Request 
Processing</a>
                 
                         
                     </div>

Modified: websites/production/tapestry/content/rest-support-580.html
==============================================================================
--- websites/production/tapestry/content/rest-support-580.html (original)
+++ websites/production/tapestry/content/rest-support-580.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -143,12 +154,12 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><h2 
id="RESTSupport(5.8.0+)-/*&lt;![CDATA[*/div.rbtoc1712225581436{padding:0px;}div.rbtoc1712225581436ul{margin-left:0px;}div.rbtoc1712225581436li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#RESTSupport(5.8.0+)-Overview#RESTSupport(5.8.0+)-OverviewWritingRESTendpoints"><style
 type="text/css">/*<![CDATA[*/
-div.rbtoc1712225581436 {padding: 0px;}
-div.rbtoc1712225581436 ul {margin-left: 0px;}
-div.rbtoc1712225581436 li {margin-left: 0px;padding-left: 0px;}
+                            <div id="ConfluenceContent"><h2 
id="RESTSupport(5.8.0+)-/*&lt;![CDATA[*/div.rbtoc1737720841006{padding:0px;}div.rbtoc1737720841006ul{margin-left:0px;}div.rbtoc1737720841006li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#RESTSupport(5.8.0+)-Overview#RESTSupport(5.8.0+)-OverviewWritingRESTendpoints"><style
 type="text/css">/*<![CDATA[*/
+div.rbtoc1737720841006 {padding: 0px;}
+div.rbtoc1737720841006 ul {margin-left: 0px;}
+div.rbtoc1737720841006 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></h2><div class="toc-macro rbtoc1712225581436">
+/*]]>*/</style></h2><div class="toc-macro rbtoc1737720841006">
 <ul class="toc-indentation"><li><a 
href="#RESTSupport(5.8.0+)-"></a></li><li><a 
href="#RESTSupport(5.8.0+)-Overview">Overview</a></li><li><a 
href="#RESTSupport(5.8.0+)-WritingRESTendpoints">Writing REST 
endpoints</a></li><li><a 
href="#RESTSupport(5.8.0+)-Readingtherequestbodywith@RequestBody">Reading the 
request body with @RequestBody</a></li><li><a 
href="#RESTSupport(5.8.0+)-AnsweringRESTrequests">Answering REST requests</a>
 <ul class="toc-indentation"><li><a 
href="#RESTSupport(5.8.0+)-Contentresponses">Content responses</a></li><li><a 
href="#RESTSupport(5.8.0+)-Non-contentresponses">Non-content 
responses</a></li></ul>
 </li><li><a 
href="#RESTSupport(5.8.0+)-MappedEntityManagerservice">MappedEntityManager 
service</a></li><li><a 
href="#RESTSupport(5.8.0+)-IntegrationwithJacksonDatabindwithtapestry-rest-jackson">Integration
 with Jackson Databind with tapestry-rest-jackson</a></li><li><a 
href="#RESTSupport(5.8.0+)-AutomaticgenerationofOpenAPI3.0(Swagger)descriptions">Automatic
 generation of OpenAPI 3.0 (Swagger) descriptions</a>

Modified: websites/production/tapestry/content/runtime-exceptions.html
==============================================================================
--- websites/production/tapestry/content/runtime-exceptions.html (original)
+++ websites/production/tapestry/content/runtime-exceptions.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -197,11 +208,11 @@
 
 
 <p>Feedback is vitally important when developing an application, and that is 
one of the areas where Tapestry has always excelled.</p><p>Especially during 
development, requests can fail. There can be errors in templates, broken code 
in your application, or something unexpected.</p><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1712225629241 {padding: 0px;}
-div.rbtoc1712225629241 ul {margin-left: 0px;}
-div.rbtoc1712225629241 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720889336 {padding: 0px;}
+div.rbtoc1737720889336 ul {margin-left: 0px;}
+div.rbtoc1737720889336 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1712225629241">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720889336">
 <ul class="toc-indentation"><li><a 
href="#RuntimeExceptions-Build-inExceptionReportPage">Build-in Exception Report 
Page</a></li><li><a href="#RuntimeExceptions-AjaxDetailedExceptionReports">Ajax 
Detailed Exception Reports</a></li><li><a 
href="#RuntimeExceptions-DetailedExceptionReportFiles">Detailed Exception 
Report Files</a></li><li><a 
href="#RuntimeExceptions-OverridingtheHandlingofSpecificExceptions">Overriding 
the Handling of Specific Exceptions</a></li></ul>
 </div><h2 id="RuntimeExceptions-Build-inExceptionReportPage">Build-in 
Exception Report Page</h2><p>Tapestry has a built-in exception report page that 
captures an amazing wealth of information:</p><p><span 
class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img 
class="confluence-embedded-image confluence-content-image-border" 
draggable="false" width="500" 
src="runtime-exceptions.data/Exception_Stack_Trace.png"></span></p><p><span 
class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img 
class="confluence-embedded-image confluence-content-image-border" 
draggable="false" width="500" 
src="runtime-exceptions.data/Exception_Request.png"></span></p><p><span 
class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img 
class="confluence-embedded-image confluence-content-image-border" 
draggable="false" height="443" width="500" 
src="runtime-exceptions.data/Application_Exception.png"></span></p><p>This 
exception report features:</p><ul>
 <li>The full stack of exceptions, top to bottom.</li><li>All non-null 
properties of each exception.</li><li>The stack trace&#160;<em>at the deepest 
level</em>.</li><li>Key&#160;<strong>request</strong> properties, header, 
attributes, and 
parameters.</li><li>Key&#160;<strong>session</strong><em>&#160;</em>propertes</li><li>A
 break down of the&#160;<em>thread</em> in your application</li><li>A listing 
of all JVM System properties</li></ul><h2 
id="RuntimeExceptions-AjaxDetailedExceptionReports">Ajax Detailed Exception 
Reports</h2><p>A similar detailed exception report is also built-in to 
Tapestry's Ajax support. When an Ajax request fails, Tapestry's client-side 
code will create an &lt;iframe&gt; to present this same 
information:</p><p><span class="confluence-embedded-file-wrapper 
confluence-embedded-manual-size"><img class="confluence-embedded-image 
confluence-content-image-border" draggable="false" height="359" width="500" 
src="runtime-exceptions.data/Exception_Ajax.png"></span></p><
 h2 id="RuntimeExceptions-DetailedExceptionReportFiles">Detailed Exception 
Report Files</h2><p>In addition, Tapestry will write a text file for the 
exception with a similar level of detail. The default location for the detailed 
exception report files is a relative directory <em>build/exceptions</em>. You 
can configure the location by setting <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SymbolConstants.html#EXCEPTION_REPORTS_DIR";>SymbolConstants.EXCEPTION_REPORTS_DIR</a>.</p><p>If
 you want to turn off the writing of detailed exception reports files to the 
file system, you can add the following to your application module (usually 
AppModule.java):</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><code class="language-java">     /**

Modified: websites/production/tapestry/content/sandbox.html
==============================================================================
--- websites/production/tapestry/content/sandbox.html (original)
+++ websites/production/tapestry/content/sandbox.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/search.html
==============================================================================
--- websites/production/tapestry/content/search.html (original)
+++ websites/production/tapestry/content/search.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/search4.html
==============================================================================
--- websites/production/tapestry/content/search4.html (original)
+++ websites/production/tapestry/content/search4.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/security-faq.html
==============================================================================
--- websites/production/tapestry/content/security-faq.html (original)
+++ websites/production/tapestry/content/security-faq.html Fri Jan 24 12:18:16 
2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -144,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="SecurityFAQ-Security">Security</h1><p>Main Article: <a 
href="security.html">Security</a></p><h2 
id="SecurityFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1737227531711 {padding: 0px;}
-div.rbtoc1737227531711 ul {margin-left: 0px;}
-div.rbtoc1737227531711 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720971391 {padding: 0px;}
+div.rbtoc1737720971391 ul {margin-left: 0px;}
+div.rbtoc1737720971391 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1737227531711">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720971391">
 <ul class="toc-indentation"><li><a 
href="#SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The
 built-in Dashboard page are visible in my production application and I don't 
want them to be, what can I do?</a></li></ul>
 </div><div class="aui-label" style="float:right" title="Related Articles">
 

Modified: websites/production/tapestry/content/security.html
==============================================================================
--- websites/production/tapestry/content/security.html (original)
+++ websites/production/tapestry/content/security.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/service-advisors.html
==============================================================================
--- websites/production/tapestry/content/service-advisors.html (original)
+++ websites/production/tapestry/content/service-advisors.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: 
websites/production/tapestry/content/service-implementation-reloading.html
==============================================================================
--- websites/production/tapestry/content/service-implementation-reloading.html 
(original)
+++ websites/production/tapestry/content/service-implementation-reloading.html 
Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/service-serialization.html
==============================================================================
--- websites/production/tapestry/content/service-serialization.html (original)
+++ websites/production/tapestry/content/service-serialization.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/session-storage.html
==============================================================================
--- websites/production/tapestry/content/session-storage.html (original)
+++ websites/production/tapestry/content/session-storage.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -190,11 +201,11 @@
 <p>Ordinary <a href="persistent-page-data.html">page-persistent 
fields</a></p><p>won't work for this, since persistent fields are available 
only to a specific page, not shared across multiple pages.</p><p>Tapestry 
provides two mechanisms for storing such data: Session State Objects and 
Session Attributes. When deciding between the two, it's best to use Session 
State Objects for complex objects, and Session Attributes for simple 
types.</p><h2 id="SessionStorage-SessionStateObjects">Session State 
Objects</h2><p>With a Session State Object (SSO), the value is automatically 
stored outside the page; with the default storage strategy, it is stored in the 
session. Such a value is global to all pages <em>for the same user</em>, but is 
stored separately for different users.</p><p>A field holding an SSO is marked 
with the @<a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SessionState.html";>SessionState</a>
 annotation.</p><div class="na
 vmenu" style="float:right; background:white; margin:3px; padding:3px">
 <div class="panel" style="border-width: 1px;"><div class="panelHeader" 
style="border-bottom-width: 1px;"><b>Contents</b></div><div 
class="panelContent">
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1737227509923 {padding: 0px;}
-div.rbtoc1737227509923 ul {margin-left: 0px;}
-div.rbtoc1737227509923 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720947890 {padding: 0px;}
+div.rbtoc1737720947890 ul {margin-left: 0px;}
+div.rbtoc1737720947890 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1737227509923">
+/*]]>*/</style><div class="toc-macro rbtoc1737720947890">
 <ul class="toc-indentation"><li>Related Articles</li></ul>
 <ul><li><a href="#SessionStorage-SessionStateObjects">Session State Objects</a>
 <ul class="toc-indentation"><li><a 
href="#SessionStorage-Pitfalls">Pitfalls</a></li><li><a 
href="#SessionStorage-CheckforCreation">Check for Creation</a></li><li><a 
href="#SessionStorage-PersistenceStrategies">Persistence 
Strategies</a></li><li><a href="#SessionStorage-ConfiguringSSOs">Configuring 
SSOs</a></li></ul>

Modified: websites/production/tapestry/content/shadowbuilder-service.html
==============================================================================
--- websites/production/tapestry/content/shadowbuilder-service.html (original)
+++ websites/production/tapestry/content/shadowbuilder-service.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: 
websites/production/tapestry/content/since-and-deprecated-user-macros.html
==============================================================================
--- websites/production/tapestry/content/since-and-deprecated-user-macros.html 
(original)
+++ websites/production/tapestry/content/since-and-deprecated-user-macros.html 
Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/small-banner.html
==============================================================================
--- websites/production/tapestry/content/small-banner.html (original)
+++ websites/production/tapestry/content/small-banner.html Fri Jan 24 12:18:16 
2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/small-bannerv2.html
==============================================================================
--- websites/production/tapestry/content/small-bannerv2.html (original)
+++ websites/production/tapestry/content/small-bannerv2.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/specific-errors-faq.html
==============================================================================
--- websites/production/tapestry/content/specific-errors-faq.html (original)
+++ websites/production/tapestry/content/specific-errors-faq.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -144,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="SpecificErrorsFAQ-SpecificErrors">Specific Errors</h1><h2 
id="SpecificErrorsFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1712225535014 {padding: 0px;}
-div.rbtoc1712225535014 ul {margin-left: 0px;}
-div.rbtoc1712225535014 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720793942 {padding: 0px;}
+div.rbtoc1737720793942 ul {margin-left: 0px;}
+div.rbtoc1737720793942 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1712225535014">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720793942">
 <ul class="toc-indentation"><li><a 
href="#SpecificErrorsFAQ-WhydoIgettheexception&quot;Noserviceimplementstheinterfaceorg.apache.tapestry5.internal.InternalComponentResources&quot;whentryingtousetheBeanEditFormcomponent?">Why
 do I get the exception "No service implements the interface 
org.apache.tapestry5.internal.InternalComponentResources" when trying to use 
the BeanEditForm component?</a></li><li><a 
href="#SpecificErrorsFAQ-Igetanerrorabout&quot;Pagedidnotgenerateanymarkupwhenrendered.&quot;butIhaveatemplate,whathappened?">I
 get an error about "Page did not generate any markup when rendered." but I 
have a template, what happened?</a></li><li><a 
href="#SpecificErrorsFAQ-MyapplicationfailswiththeerrorPermGen,howdoIfixthis?">My
 application fails with the error PermGen, how do I fix this?</a></li><li><a 
href="#SpecificErrorsFAQ-WhydoIsometimesgetajava.lang.NoSuchMethodErrorexceptionafterreloadingmypage?">Why
 do I sometimes get a java.lang.NoSuchMethodError exception after reloading m
 y page?</a></li><li><a 
href="#SpecificErrorsFAQ-Whydomylogscontain&quot;java.lang.RuntimeException:FormsrequirethattherequestmethodbePOSTandthatthet:formdataqueryparameterhavevalues&quot;?">Why
 do my logs contain "java.lang.RuntimeException: Forms require that the request 
method be POST and that the t:formdata query parameter have 
values"?</a></li></ul>
 </div><div class="aui-label" style="float:right" title="Related Articles">
 

Modified: websites/production/tapestry/content/specific-errors.html
==============================================================================
--- websites/production/tapestry/content/specific-errors.html (original)
+++ websites/production/tapestry/content/specific-errors.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/spring.html
==============================================================================
--- websites/production/tapestry/content/spring.html (original)
+++ websites/production/tapestry/content/spring.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/starting-the-ioc-registry.html
==============================================================================
--- websites/production/tapestry/content/starting-the-ioc-registry.html 
(original)
+++ websites/production/tapestry/content/starting-the-ioc-registry.html Fri Jan 
24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/statistics.html
==============================================================================
--- websites/production/tapestry/content/statistics.html (original)
+++ websites/production/tapestry/content/statistics.html Fri Jan 24 12:18:16 
2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/strategybuilder-service.html
==============================================================================
--- websites/production/tapestry/content/strategybuilder-service.html (original)
+++ websites/production/tapestry/content/strategybuilder-service.html Fri Jan 
24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/support.html
==============================================================================
--- websites/production/tapestry/content/support.html (original)
+++ websites/production/tapestry/content/support.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

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 
Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: 
websites/production/tapestry/content/supporting-informal-parameters.html
==============================================================================
--- websites/production/tapestry/content/supporting-informal-parameters.html 
(original)
+++ websites/production/tapestry/content/supporting-informal-parameters.html 
Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/switching-cases.html
==============================================================================
--- websites/production/tapestry/content/switching-cases.html (original)
+++ websites/production/tapestry/content/switching-cases.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/symbols.html
==============================================================================
--- websites/production/tapestry/content/symbols.html (original)
+++ websites/production/tapestry/content/symbols.html Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-544.html
==============================================================================
--- websites/production/tapestry/content/tapestry-544.html (original)
+++ websites/production/tapestry/content/tapestry-544.html Fri Jan 24 12:18:16 
2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-583-released.html
==============================================================================
--- websites/production/tapestry/content/tapestry-583-released.html (original)
+++ websites/production/tapestry/content/tapestry-583-released.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-584-released.html
==============================================================================
--- websites/production/tapestry/content/tapestry-584-released.html (original)
+++ websites/production/tapestry/content/tapestry-584-released.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-for-jsf-users.html
==============================================================================
--- websites/production/tapestry/content/tapestry-for-jsf-users.html (original)
+++ websites/production/tapestry/content/tapestry-for-jsf-users.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
==============================================================================
--- 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
 (original)
+++ 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
 Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: 
websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
==============================================================================
--- websites/production/tapestry/content/tapestry-inversion-of-control-faq.html 
(original)
+++ websites/production/tapestry/content/tapestry-inversion-of-control-faq.html 
Fri Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -144,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry 
Inversion of Control Container</h1><p>Main article: <a 
href="tapestry-inversion-of-control-faq.html">Tapestry IoC</a></p><h2 
id="TapestryInversionofControlFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1712225508178 {padding: 0px;}
-div.rbtoc1712225508178 ul {margin-left: 0px;}
-div.rbtoc1712225508178 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1737720765995 {padding: 0px;}
+div.rbtoc1737720765995 ul {margin-left: 0px;}
+div.rbtoc1737720765995 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1712225508178">
+/*]]>*/</style></p><div class="toc-macro rbtoc1737720765995">
 <ul class="toc-indentation"><li><a 
href="#TapestryInversionofControlFAQ-WhydoIneedtodefineaninterfaceformyservices?Whycan'tIjustusetheclassitself?">Why
 do I need to define an interface for my services? Why can't I just use the 
class itself?</a></li><li><a 
href="#TapestryInversionofControlFAQ-Myservicestartsathread;howdoIknowwhentheapplicationisshuttingdown,tostopthatthread?">My
 service starts a thread; how do I know when the application is shutting down, 
to stop that thread?</a></li><li><a 
href="#TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How
 do I make my service startup with the rest of the application, rather than 
lazily?</a></li></ul>
 </div><div class="aui-label" style="float:right" title="Related Articles">
 

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 Fri 
Jan 24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-ioc-decorators.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-decorators.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-decorators.html Fri Jan 
24 12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-ioc-modules.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-modules.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-modules.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-ioc-overview.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-overview.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-overview.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->

Modified: websites/production/tapestry/content/tapestry-tutorial.html
==============================================================================
--- websites/production/tapestry/content/tapestry-tutorial.html (original)
+++ websites/production/tapestry/content/tapestry-tutorial.html Fri Jan 24 
12:18:16 2025
@@ -50,12 +50,23 @@
   <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js"; 
defer></script>
        <script 
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js";
 defer></script>
 
-  <script type="text/javascript">
-    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new 
Date;
-    ga('create', 'UA-400821-1', 'auto');
-    ga('send', 'pageview');
+  <!-- Matomo -->
+  <script>
+    var _paq = window._paq = window._paq || [];
+    /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+    _paq.push(["setDoNotTrack", true]);
+    _paq.push(["disableCookies"]);
+    _paq.push(['trackPageView']);
+    _paq.push(['enableLinkTracking']);
+    (function() {
+      var u="https://analytics.apache.org/";;
+      _paq.push(['setTrackerUrl', u+'matomo.php']);
+      _paq.push(['setSiteId', '71']);
+      var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+    })();
   </script>
-  <script async src="https://www.google-analytics.com/analytics.js";></script>
+  <!-- End Matomo Code -->
 </head>
 <body>
   <!-- /// Navigation Start -->



Reply via email to