Modified: websites/production/tapestry/content/legacy-javascript.html
==============================================================================
--- websites/production/tapestry/content/legacy-javascript.html (original)
+++ websites/production/tapestry/content/legacy-javascript.html Sat Feb  3 
17:21:22 2018
@@ -77,7 +77,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div 
class="confluence-information-macro confluence-information-macro-warning"><p 
class="title">For Older Versions of Tapestry</p><span class="aui-icon 
aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This page describes JavaScript 
usage in Tapestry versions up through 5.3.x. For version 5.4 and later, see <a  
href="client-side-javascript.html">Client-Side 
JavaScript</a>.</p></div></div><p>&#160;</p><p><strong>JavaScript</strong> is a 
first-class concept in Tapestry, and sophisticated JavaScript support is 
provided right out of the box, including rich <a  
href="ajax-and-zones.html">AJAX support</a>, download optimization, client-side 
logging, and localization.</p><div class="aui-label" style="float:right" 
title="Related Articles">
+                <div id="ConfluenceContent"><div 
class="confluence-information-macro confluence-information-macro-warning"><p 
class="title">For Older Versions of Tapestry</p><span class="aui-icon 
aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This page describes JavaScript 
usage in Tapestry versions up through 5.3.x. For version 5.4 and later, see <a  
href="legacy-javascript.html">Legacy 
JavaScript</a>.</p></div></div><p>&#160;</p><p><strong>JavaScript</strong> is a 
first-class concept in Tapestry, and sophisticated JavaScript support is 
provided right out of the box, including rich <a  
href="legacy-javascript.html">AJAX support</a>, download optimization, 
client-side logging, and localization.</p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 
@@ -173,7 +173,7 @@
 </div>
 
 
-<p>In production mode, by default, Tapestry will merge JavaScript libraries, 
add version numbering, and set a far-future expires header to encourage 
aggressive browser caching. Starting with version 5.3, Tapestry can also 
automatically minify (compress) JavaScript libraries when in <a  
href="configuration.html">production mode</a>.</p><p>In addition, as will be 
described in detail <a  href="legacy-javascript.html">below</a>, Tapestry comes 
with the <a  class="external-link" href="http://www.prototypejs.org/"; 
rel="nofollow">Prototype</a> and <a  class="external-link" 
href="http://script.aculo.us/"; rel="nofollow">Scriptaculous</a> libraries, or 
you can easily swap in JQuery using a 3rd-party module.</p><h1 
id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom 
JavaScript</h1><p>When adding your own custom JavaScript or third-party 
libraries, just follow the strategies below to take advantage of Tapestry's 
JavaScript support mechanisms.</p><p>The recommended practice in Tapestry is
  to package up any significant amount of JavaScript as a static JavaScript 
library, a .js file that can be downloaded to the client. Keep your in-page 
JavaScript code to a minimum, just the few statements needed to initialize 
objects and reference methods in the JavaScript libraries.</p><h2 
id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your 
JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a 
JavaScript library within your page or component. Although you can use direct 
<code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> 
approach, you should only use it for JavaScript that resides outside of your 
application. For JavaScript within your app, Tapestry provides <em>much</em> 
better ways to do the same thing. Most users choose the simplest, the @Import 
annotation approach.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
+<p>In production mode, by default, Tapestry will merge JavaScript libraries, 
add version numbering, and set a far-future expires header to encourage 
aggressive browser caching. Starting with version 5.3, Tapestry can also 
automatically minify (compress) JavaScript libraries when in <a  
href="legacy-javascript.html">production mode</a>.</p><p>In addition, as will 
be described in detail <a  href="legacy-javascript.html">below</a>, Tapestry 
comes with the <a  class="external-link" href="http://www.prototypejs.org/"; 
rel="nofollow">Prototype</a> and <a  class="external-link" 
href="http://script.aculo.us/"; rel="nofollow">Scriptaculous</a> libraries, or 
you can easily swap in JQuery using a 3rd-party module.</p><h1 
id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom 
JavaScript</h1><p>When adding your own custom JavaScript or third-party 
libraries, just follow the strategies below to take advantage of Tapestry's 
JavaScript support mechanisms.</p><p>The recommended practice in Tapestr
 y is to package up any significant amount of JavaScript as a static JavaScript 
library, a .js file that can be downloaded to the client. Keep your in-page 
JavaScript code to a minimum, just the few statements needed to initialize 
objects and reference methods in the JavaScript libraries.</p><h2 
id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your 
JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a 
JavaScript library within your page or component. Although you can use direct 
<code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> 
approach, you should only use it for JavaScript that resides outside of your 
application. For JavaScript within your app, Tapestry provides <em>much</em> 
better ways to do the same thing. Most users choose the simplest, the @Import 
annotation approach.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
 <p><strong>JumpStart Demo:</strong> <br clear="none">
 <a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/javascript";
 rel="nofollow">JavaScript</a> </p></div><h2 
id="LegacyJavaScript-Approach1:@Import">Approach 1: @Import</h2><p>Use the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html";>Import</a>
 annotation (or @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/IncludeJavaScriptLibrary.html";>IncludeJavaScriptLibrary</a>
 in Tapestry 5.0 and 5.1) to include links to JavaScript (and CSS) files in 
your page or component. Tapestry ensures that each such file is only referenced 
once in your page.</p><div class="sectionColumnWrapper"><div 
class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>For Tapestry 5.2 and late
 r</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">@Import(library={"context:js/jquery.js",
@@ -191,7 +191,7 @@ public class MyComponent
  . . .
 }
 </pre>
-</div></div></div></div></div></div><p>@Import may also be applied to 
individual methods, in which case the import operation only occurs when the 
method is invoked.</p><p>Note: When specifying a file to import, you'll often 
use the <strong>context:</strong> binding prefix to indicate that the file is 
stored in the web application context, and not on the classpath. Relative paths 
will be on the classpath, relative to the Java class. See <a  
href="component-parameters.html">Component Parameters</a> for other binding 
prefix options.</p><p>Adding the same JavaScript library multiple times does 
<em>not</em> create duplicate links. The subsequent ones are simply ignored. In 
this way, each component can add the libraries it needs, without worrying about 
conflicts with other components.</p><h2 
id="LegacyJavaScript-Approach2:JavaScriptSupport">Approach 2: 
JavaScriptSupport</h2><p>Alternatively, you can use <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/
 tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a> 
(for Tapestry 5.2 or later) or <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/RenderSupport.html";>RenderSupport</a>
 (for Tapestry 5.0 and 5.1) to include a JavaScript library in your page or 
component. JavaScriptSupport and RenderSupport are <a  
href="environmental-services.html">environmental services</a> that include a 
number of methods that will be used by components, or by services that are 
called from components. For example:</p><h3 
id="LegacyJavaScript-TheimportJavaScriptLibrarymethod">The 
<code>importJavaScriptLibrary</code> method</h3><p>The 
<code>importJavaScriptLibrary</code> method (or <code>addScriptLink</code> for 
Tapestry 5.0 and 5.1) adds a link to a JavaScript library. A component can 
inject such a script and pass one or more of assets to this method:</p><div 
class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><d
 iv class="columnMacro"><div class="code panel pdl" style="border-width: 
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Tapestry 5.2 and later</b></div><div class="codeContent panelContent 
pdl">
+</div></div></div></div></div></div><p>@Import may also be applied to 
individual methods, in which case the import operation only occurs when the 
method is invoked.</p><p>Note: When specifying a file to import, you'll often 
use the <strong>context:</strong> binding prefix to indicate that the file is 
stored in the web application context, and not on the classpath. Relative paths 
will be on the classpath, relative to the Java class. See <a  
href="legacy-javascript.html">Legacy JavaScript</a> for other binding prefix 
options.</p><p>Adding the same JavaScript library multiple times does 
<em>not</em> create duplicate links. The subsequent ones are simply ignored. In 
this way, each component can add the libraries it needs, without worrying about 
conflicts with other components.</p><h2 
id="LegacyJavaScript-Approach2:JavaScriptSupport">Approach 2: 
JavaScriptSupport</h2><p>Alternatively, you can use <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapest
 ry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a> (for 
Tapestry 5.2 or later) or <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/RenderSupport.html";>RenderSupport</a>
 (for Tapestry 5.0 and 5.1) to include a JavaScript library in your page or 
component. JavaScriptSupport and RenderSupport are <a  
href="legacy-javascript.html">environmental services</a> that include a number 
of methods that will be used by components, or by services that are called from 
components. For example:</p><h3 
id="LegacyJavaScript-TheimportJavaScriptLibrarymethod">The 
<code>importJavaScriptLibrary</code> method</h3><p>The 
<code>importJavaScriptLibrary</code> method (or <code>addScriptLink</code> for 
Tapestry 5.0 and 5.1) adds a link to a JavaScript library. A component can 
inject such a script and pass one or more of assets to this method:</p><div 
class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="c
 olumnMacro"><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Tapestry 5.2 and later</b></div><div class="codeContent panelContent 
pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  @Inject @Path("context:/js/myeffects.js")
   private Asset myEffects;
 
@@ -215,7 +215,7 @@ public class MyComponent
     renderSupport.addScriptLink(myEffects);
   }
 </pre>
-</div></div></div></div></div></div><p>Tapestry will ensure that the necessary 
&lt;link&gt; elements are added to the <em>top</em> of the document (in the 
&lt;head&gt; element). With Tapestry 5.3 and later the new elements are 
inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they 
appear at the top of the &lt;head&gt; element).</p><p>As with the annotation 
approach, adding the same asset multiple times does <em>not</em> create 
duplicate links.</p><p>The <code>setupRender</code> method (the name is 
specifically linked to a <a  href="component-rendering.html">render phase</a>) 
is the correct place to inform the JavaScriptSupport (or RenderSupport) service 
that the library is needed.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
+</div></div></div></div></div></div><p>Tapestry will ensure that the necessary 
&lt;link&gt; elements are added to the <em>top</em> of the document (in the 
&lt;head&gt; element). With Tapestry 5.3 and later the new elements are 
inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they 
appear at the top of the &lt;head&gt; element).</p><p>As with the annotation 
approach, adding the same asset multiple times does <em>not</em> create 
duplicate links.</p><p>The <code>setupRender</code> method (the name is 
specifically linked to a <a  href="legacy-javascript.html">render phase</a>) is 
the correct place to inform the JavaScriptSupport (or RenderSupport) service 
that the library is needed.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
 <p><strong>JumpStart Demo:</strong> <br clear="none">
 <a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/reusable";
 rel="nofollow">Reusable JavaScript</a> </p></div><h3 
id="LegacyJavaScript-TheaddScriptmethod">The <code>addScript</code> 
method</h3><p>The <code>addScript</code> method is used when you need to add 
some JavaScript code directly to the page. This will be inserted at the 
<em>bottom of the document</em>, and will only be executed when the document 
has finished loading on the client (i.e., from the window.onload event 
handler).</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: text; gutter: false; theme: Default" 
style="font-size:12px;">void afterRender()
@@ -266,7 +266,7 @@ public class MyComponent
 <div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Added in 
5.1.0.2</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>
 <div class="error"><span class="error">Unknown macro: {div}</span> 
-<p>&#160;</p></div><p>In production mode, Tapestry automatically 
<em>combines</em> JavaScript libraries. A single request (for a <em>virtual 
asset</em>) will retrieve the combined content of all referenced JavaScript 
library files.</p><p>Note: starting with Tapestry 5.2, JavaScript libraries are 
only combined if they are part of a JavaScript Stack (see below).</p><p>This is 
a very useful feature, as it reduces the number of requests needed to present a 
page to the user. It can be disabled, however, by setting the 
SymbolConstants.COMBINE_SCRIPTS <a  href="configuration.html">configuration 
symbol</a> to false in your application's module class (normally 
AppModule.java). By default it is enabled when in production mode and disabled 
otherwise.</p><p>As elsewhere, if the client browser supports gzip compression, 
the combined JavaScript will be compressed.</p><h1 
id="LegacyJavaScript-MinifyingJavaScriptlibraries">Minifying JavaScript 
libraries</h1>
+<p>&#160;</p></div><p>In production mode, Tapestry automatically 
<em>combines</em> JavaScript libraries. A single request (for a <em>virtual 
asset</em>) will retrieve the combined content of all referenced JavaScript 
library files.</p><p>Note: starting with Tapestry 5.2, JavaScript libraries are 
only combined if they are part of a JavaScript Stack (see below).</p><p>This is 
a very useful feature, as it reduces the number of requests needed to present a 
page to the user. It can be disabled, however, by setting the 
SymbolConstants.COMBINE_SCRIPTS <a  href="legacy-javascript.html">configuration 
symbol</a> to false in your application's module class (normally 
AppModule.java). By default it is enabled when in production mode and disabled 
otherwise.</p><p>As elsewhere, if the client browser supports gzip compression, 
the combined JavaScript will be compressed.</p><h1 
id="LegacyJavaScript-MinifyingJavaScriptlibraries">Minifying JavaScript 
libraries</h1>
 
 <div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Added in 
5.3</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>
@@ -278,7 +278,7 @@ public class MyComponent
     &lt;version&gt;${tapestry-release-version}&lt;/version&gt;
 &lt;/dependency&gt;
 </pre>
-</div></div><p>Gradle would be similar, of course. If you aren't using 
something like Maven or Gradle, you'll have to download the jar and its 
dependency (com.yahoo.platform.yui: yuicompressor) yourself.</p><p>Minification 
can be disabled by setting the SymbolConstants.MINIFICATION_ENABLED <a  
href="configuration.html">configuration symbol</a> to false in your 
application's module class (usually AppModule.java). By default it is enabled 
when in production mode and disabled otherwise.</p><p>Please test your 
applications well: the YUI Compressor code can be somewhat finicky about the 
application server and JDK version.</p><h1 
id="LegacyJavaScript-Client-sideLogging">Client-side Logging</h1>
+</div></div><p>Gradle would be similar, of course. If you aren't using 
something like Maven or Gradle, you'll have to download the jar and its 
dependency (com.yahoo.platform.yui: yuicompressor) yourself.</p><p>Minification 
can be disabled by setting the SymbolConstants.MINIFICATION_ENABLED <a  
href="legacy-javascript.html">configuration symbol</a> to false in your 
application's module class (usually AppModule.java). By default it is enabled 
when in production mode and disabled otherwise.</p><p>Please test your 
applications well: the YUI Compressor code can be somewhat finicky about the 
application server and JDK version.</p><h1 
id="LegacyJavaScript-Client-sideLogging">Client-side Logging</h1>
 
 <div class="confluence-information-macro 
confluence-information-macro-warning"><p class="title">Deprecated since 
5.3</p><span class="aui-icon aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>
@@ -303,7 +303,7 @@ public class MyComponent
 </div></div><p>Then use it somewhere else:</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;">  new Effect.Fade($(myId), { duration: 
$T(myid).fadeDuration });
 </pre>
-</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components 
and Mixins</h1><p>Tapestry provides easy-to-use support for <em>Ajax</em>, the 
technique of using JavaScript to dynamically updating parts of a web page with 
content from the server without redrawing the whole page. See <a  
href="ajax-and-zones.html">Ajax and Zones</a> for details.</p><h1 
id="LegacyJavaScript-Built-inLibraries">Built-in Libraries</h1><p></p><div 
class="navmenu" style="float:right; width:30%; background:#eee; margin:3px; 
padding:3px">
+</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components 
and Mixins</h1><p>Tapestry provides easy-to-use support for <em>Ajax</em>, the 
technique of using JavaScript to dynamically updating parts of a web page with 
content from the server without redrawing the whole page. See <a  
href="legacy-javascript.html">Legacy JavaScript</a> for details.</p><h1 
id="LegacyJavaScript-Built-inLibraries">Built-in Libraries</h1><p></p><div 
class="navmenu" style="float:right; width:30%; background:#eee; margin:3px; 
padding:3px">
 <p><font color="green"><strong>Alternatives to Prototype</strong></font><br 
clear="none">
 Tapestry also works well with other JavaScript libraries, such as JQuery and 
ExtJS:</p>
 <ul><li><strong><a  class="external-link" 
href="https://github.com/got5/tapestry5-jquery"; rel="nofollow">Tapestry5-Jquery 
module</a></strong> &#8211; Using JQuery <em>instead of</em> 
Prototype</li><li><a  class="external-link" 
href="http://wiki.apache.org/tapestry/Tapestry5HowToIntegrateJQuery";>Tapestry5HowToIntegrateJQuery</a>
 &#8211; Using JQuery <em>in addition to</em> Prototype</li><li><a  
class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-999";>TAP5-999</a> tracks work 
underway to introduce an agnostic tapestry.js layer to allow switching from 
Prototype to JQuery. See <span class="error">[JavaScript Rewrite]</span> for 
more info.</li><li><a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-1364";>TAPS-1364</a> lists some 
starting points for ExtJS integration</li></ul>
@@ -320,7 +320,7 @@ Tapestry also works well with other Java
   }
 
 </pre>
-</div></div><p>The Asset is injected, using the ${tapestry.scriptaculous} <a  
href="symbols.html">symbol</a> to reference the location of the Scriptaculous 
library.</p><p>Even though the dragdrop.js library is stored inside a JAR file, 
Tapestry ensures that it can be accessed from the client web browser. A 
Tapestry URL within the virtual folder "/assets" is created; the file will be 
given a version number (the application version number if not specified more 
specifically) and will be sent to the browser with a far-future expires header 
(to encourage the browser to cache the file aggressively).</p><h1 
id="LegacyJavaScript-JavaScriptStacks">JavaScript Stacks</h1>
+</div></div><p>The Asset is injected, using the ${tapestry.scriptaculous} <a  
href="legacy-javascript.html">symbol</a> to reference the location of the 
Scriptaculous library.</p><p>Even though the dragdrop.js library is stored 
inside a JAR file, Tapestry ensures that it can be accessed from the client web 
browser. A Tapestry URL within the virtual folder "/assets" is created; the 
file will be given a version number (the application version number if not 
specified more specifically) and will be sent to the browser with a far-future 
expires header (to encourage the browser to cache the file 
aggressively).</p><h1 id="LegacyJavaScript-JavaScriptStacks">JavaScript 
Stacks</h1>
 
 <div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Added in 
5.2</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>

Modified: websites/production/tapestry/content/logging-in-tapestry.html
==============================================================================
--- websites/production/tapestry/content/logging-in-tapestry.html (original)
+++ websites/production/tapestry/content/logging-in-tapestry.html Sat Feb  3 
17:21:22 2018
@@ -44,13 +44,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Logging in Tapestry</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";>
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Logging in Tapestry</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -62,19 +75,40 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p><strong>Logging in 
Tapestry</strong> is based on the <a  class="external-link" 
href="http://www.slf4j.org/"; rel="nofollow">Simple Logging Facade for Java 
(SLF4J)</a>. You can think of SLF4J as a leaner, meaner replacement for <a  
class="external-link" 
href="http://commons.apache.org/logging/";>commons-logging</a>.</p><div 
class="aui-label" style="float:right" title="Related Articles"><h3>Related 
Articles</h3><ul class="content-by-label"><li> 
-  <div> 
-   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
-  </div> 
-  <div class="details"> 
-   <a  href="logging-in-tapestry.html">Logging in Tapestry</a> 
-  </div> </li><li> 
-  <div> 
-   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
-  </div> 
-  <div class="details"> 
-   <a  href="logging.html">Logging</a> 
-  </div> </li></ul></div><p>In theory, SLF4J is a wrapper around any of a 
number of logging systems, including <a  class="external-link" 
href="http://logging.apache.org/log4j/1.2/";>Log4J</a> or the built-in JDK 
logging. In practice, it is almost always used with Log4J and no additional 
build configuration is needed.</p><p>Your application <em>will</em> need to 
provide a <strong>log4j.properties</strong> file (or its XML equivalent). See 
<a  class="external-link" 
href="http://logging.apache.org/log4j/1.2/manual.html";>the Log4J manual</a> for 
more information.</p><h1 id="LogginginTapestry-AccessingLoggers">Accessing 
Loggers</h1><p>Loggers are a special kind of resource that is injected into a 
service. In Tapestry IoC, Loggers an be injected into service constructors, or 
into service builder methods.</p><p>In Tapestry Core (the web framework), 
Loggers for components can be injected into component fields.</p><p>This often 
confuses people, because the standard idiom is to create a Logger
  based on the class name and inject it into a static field. In Tapestry, the 
Logger is created on your code's behalf and provided to you, and stored into a 
final private field.</p><p>In terms of separation of concerns, Tapestry's 
approach is superior ... the concern of creating loggers is offloaded into the 
framework, and you code retains the concern of actually logging useful 
information. However this is largely theoretical.</p><p>For a pragmatic 
standpoint, injecting Loggers makes it easier to test <em>logging</em> code 
using the same techniques used to test other code: via the injection of Mock 
Object implementations of the Logger interface. This is something to consider 
when writing your own services, components and test.</p><h1 
id="LogginginTapestry-ServiceLogging">Service Logging</h1><p>Tapestry uses the 
same loggers that are injected into services; it logs, at debug level, details 
about the construction of the service (and the proxy for the service), 
including details such as
  methods invoked.</p><h1 id="LogginginTapestry-OperationTracker">Operation 
Tracker</h1><p>The OperationTracker is a resource available throughout Tapestry 
that is used to track what Tapestry is doing at any given time. Normally, this 
information is only used when reporting errors, as it gives an indication of 
what Tapestry was doing leading up to the point where the exception 
occurred.</p><p>Starting in Tapestry 5.3, you may also enable debug logging for 
<code>org.apache.tapestry5.ioc.Registry</code> to see voluminous details on 
creation of proxies, services, injections, and so forth. It also tracks 
creation of pages and components, triggering of component events, handling of 
return values from event handler methods, and many (many!) other 
details.</p><p>The logging even identifies how long each operation takes. This 
can be useful for understanding what is going on in a Tapestry application 
during the processing of the request, it can also be useful when tracking down 
performance is
 sues.</p><p>An example from the startup of a Tapestry application:</p><div 
class="preformatted panel" style="border-width: 1px;"><div 
class="preformattedContent panelContent">
+                <div id="ConfluenceContent"><p><strong>Logging in 
Tapestry</strong> is based on the <a  class="external-link" 
href="http://www.slf4j.org/"; rel="nofollow">Simple Logging Facade for Java 
(SLF4J)</a>. You can think of SLF4J as a leaner, meaner replacement for <a  
class="external-link" 
href="http://commons.apache.org/logging/";>commons-logging</a>.</p><div 
class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="logging-in-tapestry.html">Logging in 
Tapestry</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="logging.html">Logging</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<p>In theory, SLF4J is a wrapper around any of a number of logging systems, 
including <a  class="external-link" 
href="http://logging.apache.org/log4j/1.2/";>Log4J</a> or the built-in JDK 
logging. In practice, it is almost always used with Log4J and no additional 
build configuration is needed.</p><p>Your application <em>will</em> need to 
provide a <strong>log4j.properties</strong> file (or its XML equivalent). See 
<a  class="external-link" 
href="http://logging.apache.org/log4j/1.2/manual.html";>the Log4J manual</a> for 
more information.</p><h1 id="LogginginTapestry-AccessingLoggers">Accessing 
Loggers</h1><p>Loggers are a special kind of resource that is injected into a 
service. In Tapestry IoC, Loggers an be injected into service constructors, or 
into service builder methods.</p><p>In Tapestry Core (the web framework), 
Loggers for components can be injected into component fields.</p><p>This often 
confuses people, because the standard idiom is to create a Logger based on the 
class name 
 and inject it into a static field. In Tapestry, the Logger is created on your 
code's behalf and provided to you, and stored into a final private 
field.</p><p>In terms of separation of concerns, Tapestry's approach is 
superior ... the concern of creating loggers is offloaded into the framework, 
and you code retains the concern of actually logging useful information. 
However this is largely theoretical.</p><p>For a pragmatic standpoint, 
injecting Loggers makes it easier to test <em>logging</em> code using the same 
techniques used to test other code: via the injection of Mock Object 
implementations of the Logger interface. This is something to consider when 
writing your own services, components and test.</p><h1 
id="LogginginTapestry-ServiceLogging">Service Logging</h1><p>Tapestry uses the 
same loggers that are injected into services; it logs, at debug level, details 
about the construction of the service (and the proxy for the service), 
including details such as methods invoked.</p><h1 
 id="LogginginTapestry-OperationTracker">Operation Tracker</h1><p>The 
OperationTracker is a resource available throughout Tapestry that is used to 
track what Tapestry is doing at any given time. Normally, this information is 
only used when reporting errors, as it gives an indication of what Tapestry was 
doing leading up to the point where the exception occurred.</p><p>Starting in 
Tapestry 5.3, you may also enable debug logging for 
<code>org.apache.tapestry5.ioc.Registry</code> to see voluminous details on 
creation of proxies, services, injections, and so forth. It also tracks 
creation of pages and components, triggering of component events, handling of 
return values from event handler methods, and many (many!) other 
details.</p><p>The logging even identifies how long each operation takes. This 
can be useful for understanding what is going on in a Tapestry application 
during the processing of the request, it can also be useful when tracking down 
performance issues.</p><p>An example fr
 om the startup of a Tapestry application:</p><div class="preformatted panel" 
style="border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>[INFO] RegistryBuilder Adding module definition for class 
org.apache.tapestry5.services.TapestryModule
 [INFO] RegistryBuilder Adding module definition for class 
org.apache.tapestry5.internal.services.InternalModule
 [INFO] RegistryBuilder Adding module definition for class 
org.apache.tapestry5.services.assets.AssetsModule

Modified: websites/production/tapestry/content/modules.html
==============================================================================
--- websites/production/tapestry/content/modules.html (original)
+++ websites/production/tapestry/content/modules.html Sat Feb  3 17:21:22 2018
@@ -36,13 +36,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Modules</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";>
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Modules</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -54,35 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div 
class="sectionColumnWrapper"><div class="sectionMacro">
-<div class="sectionMacroRow"><div class="columnMacro">
-<h2 id="Modules-Built-inModules">Built-in Modules</h2>
-
-Tapestry comes with a collection of add-on modules to let you extend the 
framework beyond its core.
-
-<h3 id="Modules-HibernateIntegration">Hibernate Integration</h3>
-
-<ul><li><a  href="hibernate-core-conf.html">Hibernate 
Configuration</a></li><li><a  href="hibernate-user-guide.html">Hibernate User 
Guide</a></li><li><a  href="hibernate-statistics.html">Hibernate 
Statistics</a></li></ul>
-
-
-<h3 id="Modules-SpringIntegration">Spring Integration</h3>
-
-<ul><li><a  href="integrating-with-spring-framework.html">Spring 
Core</a></li></ul>
-
-
-<h3 id="Modules-JPAIntegration">JPA Integration</h3>
-
-<ul><li><a  href="integrating-with-jpa.html">Integrating with JPA</a></li></ul>
-
-
-<h3 id="Modules-OtherModules">Other Modules</h3>
-
-<ul><li><a  href="bean-validation.html">JSR 303 Bean Validation</a></li><li><a 
 href="functional-flows.html">Functional Flows</a></li><li><a  
href="jmx-module.html">JMX Integration</a></li><li><a  
href="json.html">JSON</a></li><li><a  href="component-report.html">Component 
Report</a></li></ul>
-</div>
-<div class="columnMacro">
-<h2 id="Modules-ThirdPartyModules">Third Party Modules</h2>
-
-Independent developers have build a rich collection of Tapestry modules for 
your immediate use. These modules greatly expand upon the capabilities already 
included in Tapestry. <em>These links take you to external sites.</em><h2 
id="Modules-Tapestry5-Cayenne">Tapestry5-Cayenne</h2><ul><li><a  
class="external-link" href="http://code.google.com/p/tapestry5-cayenne/"; 
rel="nofollow">Tapestry5-Cayenne</a> (for Tapestry 5.3) integrates with the 
Apache Cayenne persistence framework.</li></ul><h2 
id="Modules-Argoyle(forTapestry5.3)">Argoyle (for Tapestry 5.3)</h2><ul><li><a  
class="external-link" href="https://github.com/argoyle/tapestry-breadcrumbs"; 
rel="nofollow">Tapestry-breadcrumbs</a> is a breadcrumb trail implementation, 
implemented as an annotation to be placed at each page-class that should be 
part of the trail.</li><li><a  class="external-link" 
href="https://github.com/argoyle/tapestry-mfautocomplete"; 
rel="nofollow">Tapestry-mfautocomplete</a> An autocomplete implementation that 
ca
 n populate multiple fields</li></ul><h2 
id="Modules-ChenilleKit(forTapestry5.3)">Chenille Kit (for Tapestry 
5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-ldap/"; 
rel="nofollow">Chenillekit-LDAP</a> helps with LDAP querying</li><li><a  
class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-lucene/";
 rel="nofollow">Chenillekit-Lucene</a> provides Apache Lucene indexing &amp; 
searching</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-image/";
 rel="nofollow">Chenillekit-Image</a> is an image scaling service</li><li><a  
class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-mail/"; 
rel="nofollow">Chenillekit-Mail</a> is a mail service based on Apache Commons 
Email</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-quartz/";
 rel="nofo
 llow">Chenillekit-Quartz</a> provides Quartz-based scheduling 
capabilities</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-scripting/";
 rel="nofollow">Chenillekit-Script</a> enables Apache's Bean Scripting 
Framework</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-template/";
 rel="nofollow">Chenillekit-Template</a> enables Velocity and FreeMarker 
templates</li></ul><p><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit"; rel="nofollow">Other Chenille 
Kit Modules</a>...</p><h2 id="Modules-CiaranW">CiaranW</h2><ul><li><a  
class="external-link" 
href="https://github.com/ciaranw/tapestry-service-cache/wiki"; 
rel="nofollow">Tapestry-Service-Cache</a> provides easy, annotation-based 
caching for Tapestry 5 services.</li></ul><h2 
id="Modules-Exanpe">Exanpe</h2><ul><li><a  class="external-link" 
href="https://github.com/exanpe/tapestry-tldgen"; rel="nofollow">T
 apestry-Tldgen</a> generates TLD files to let you use the Eclipse JSP editor 
for code completion on TML files.</li></ul><h2 
id="Modules-FlowLogix">FlowLogix</h2><ul><li><a  class="external-link" 
href="http://code.google.com/p/flowlogix/"; rel="nofollow">FlowLogix</a> is a 
collection of components, services and utilities that integrates Tapestry into 
JEE environments and provides other commonly needed functionality.</li></ul><h2 
id="Modules-GangOfTapestry5">Gang Of Tapestry 5</h2><ul><li><a  
class="external-link" href="https://github.com/got5/tapestry5-highcharts"; 
rel="nofollow">Tapestry5-HighCharts</a> integrates the Highcharts library (<a  
class="external-link" href="http://www.highcharts.com/"; 
rel="nofollow">http://www.highcharts.com/</a>) into a Tapestry5-jQuery based 
application</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-jqPlot"; 
rel="nofollow">Tapestry5-jqPlot</a> integrates with JQuery jqPlot, a plotting 
and charting plugin for the jQuery Javascrip
 t framework. jqPlot produces beautiful line, bar and pie charts with many 
features.</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-jquery"; 
rel="nofollow">Tapestry5-Jquery</a> lets you use jQuery to supplement <em>or 
completely replace</em> Prototype, Scriptaculous and the base tapestry.js 
script.</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-jquery-mobile"; 
rel="nofollow">Tapestry5-jquery-mobile</a> provides jQuery mobile integration 
for Tapestry</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-portlet"; 
rel="nofollow">Tapestry5-Portlet</a> provides functionality for Portlet 
Development in Tapestry</li></ul><h2 id="Modules-Spock">Spock</h2><ul><li><a  
class="external-link" 
href="http://code.google.com/p/spock/wiki/TapestryExtension"; 
rel="nofollow">Spock Tapestry Extension</a> provides integration with Spock, a 
testing and specification framework for Java and Groovy 
applications.</li></ul><h2 id="Modules-Sp
 readtheSource">Spread the Source</h2><ul><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-db-migrations"; 
rel="nofollow">Tapestry5-db-migrations</a> supports Tapestry 5 Database 
Migrations: Ruby on Rails-like database migrations powered by Tapestry IOC and 
Tapestry Hibernate Core</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-googleanalytics"; 
rel="nofollow">Tapestry5-googleanalytics</a> integrates with Google 
Analytics</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-hornet"; 
rel="nofollow">Tapestry5-hornet</a> integrates the Hornet java connector inside 
Tapestry 5. Hornet is a realtime publish/suscribe engine that let you enhance 
your web application by connecting users together, powered by NodeJs and 
Socket.io</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-installer"; 
rel="nofollow">Tapestry5-installer</a> is a Tapestry 5 webapp installer: Li
 ve load your Tapestry app right after having set the configuration. This 
contribution aims to provide an easy way for Tapestry developers to include an 
installation application in their application so the user can provide its 
production environment configuration values</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-rome"; 
rel="nofollow">Tapestry5-rome</a> provides RSS &amp; Atom feed support in 
Tapestry apps</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-spring-tx"; 
rel="nofollow">Tapestry5-spring-tx</a> supports using Spring Transaction 
Manager inside your Tapestry 5 application. Allows you to access to a Hibernate 
session factory configured via Spring through your Tapestry business layer in 
the same transaction</li></ul><h2 
id="Modules-T5conduit">T5conduit</h2><ul><li><a  class="external-link" 
href="https://github.com/cezary-biernacki/t5conduit"; 
rel="nofollow">T5conduit</a> allows seamless integration of Les
 sCSS and CoffeeScript.</li></ul><h2 id="Modules-Tacos">Tacos</h2><ul><li><a  
class="external-link" href="http://tacos.sourceforge.net/tacos5/tacos-seam/"; 
rel="nofollow">Tacos-Seam</a> provides an integration between Tapestry and 
JBoss Seam</li></ul><h2 
id="Modules-Tapestry-bootstrap(forTapestry5.3)">Tapestry-bootstrap (for 
Tapestry 5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/trsvax/tapestry-bootstrap"; 
rel="nofollow">Tapestry-bootstrap</a> integrates Twitter Bootstrap with 
Tapestry 5. (Bootstrap is a grid based toolkit of polished HTML, CSS and 
JavaScript.</li></ul><h2 
id="Modules-Tapestry-cometd">Tapestry-cometd</h2><ul><li><a  
class="external-link" href="https://github.com/uklance/tapestry-cometd"; 
rel="nofollow">Tapestry-cometd</a> is a push library for Tapestry based on 
CometD (an HTTP-based event routing bus that uses an Ajax Push technology 
pattern known as Comet)</li></ul><h2 
id="Modules-Tapestry-monitoring">Tapestry-monitoring</h2><ul><li><a  class="ext
 ernal-link" href="https://github.com/joshcanfield/tapestry-monitoring"; 
rel="nofollow">Tapestry-monitoring</a> is a lightweight, unobtrusive way to add 
JMX performance metrics to any Tapestry application, using the Java Simon 
monitoring API.</li></ul><h2 
id="Modules-Tapestry-profiler">Tapestry-profiler</h2><ul><li><a  
class="external-link" href="https://github.com/bdotte/tapestry-profiler"; 
rel="nofollow">Tapestry-profiler</a> is a simple, configurable, sampling 
profiler designed to be used in production Tapestry 5 applications to track 
down performance issues.</li></ul><h2 
id="Modules-Tapestry-spring-security">Tapestry-spring-security</h2><ul><li><a  
class="external-link" 
href="http://www.localhost.nu/java/tapestry-spring-security/conf.html"; 
rel="nofollow">Tapestry-spring-security</a> integrates Spring Security with 
Tapestry applications</li></ul><h2 
id="Modules-Tapestry-Testify">Tapestry-Testify</h2><ul><li><a  
class="external-link" href="http://tapestrytestify.sourceforge.net/"; rel
 ="nofollow">Tapestry-Testify</a> is an extension that makes it easier to write 
page and component tests and run them efficiently</li></ul><h2 
id="Modules-Tapestry-XPath">Tapestry-XPath</h2><ul><li><a  
class="external-link" href="http://tapestryxpath.sourceforge.net/"; 
rel="nofollow">Tapestry-XPath</a> allows you to use XPath expressions to query 
the Tapestry DOM (useful for page &amp; component tests)</li></ul><h2 
id="Modules-Tapestry-zbreadcrumbs">Tapestry-zbreadcrumbs</h2><ul><li><a  
class="external-link" href="https://bitbucket.org/zenios/tapestry-zbreadcrumbs"; 
rel="nofollow">Tapestry-zbreadcrumbs</a> is a bread crumb trail implementation, 
with configuration through contributions and annotations, dynamic breadcrumb 
titles, and a very flexible breadcrumbs trail component</li></ul><h2 
id="Modules-Tynamo">Tynamo</h2><ul><li><a  class="external-link" 
href="http://tynamo.org/tapestry-model+guide"; rel="nofollow">Tapestry-Model</a> 
provides rapid development of CRUD-style applications</l
 i><li><a  class="external-link" href="http://tynamo.org/tapestry-jpa+guide"; 
rel="nofollow">Tapestry-JPA Integration</a> allows you to use JPA with 
Tapestry</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-resteasy+guide"; 
rel="nofollow">Tapestry-ReSTEasy</a> integrates with JBoss' RESTEasy, an 
implementation of JAX-RS</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-security+guide"; 
rel="nofollow">Tapestry-security</a> is a security module for Tapestry apps 
based on Apache Shiro</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-watchdog+guide"; 
rel="nofollow">Tapestry-Watchdog</a> lets your Tapestry app monitor 
itself</li></ul><p><a  class="external-link" href="http://tynamo.org/"; 
rel="nofollow">Other Tynamo Modules</a>...</p><h2 
id="Modules-TapX">TapX</h2><ul><li><a  class="external-link" 
href="http://tapestry.formos.com/nightly/tapx/tapx-datefield/"; 
rel="nofollow">Tapx-Datefield</a> is an enhanced DateField component</li><li><a 
 cl
 ass="external-link" href="https://github.com/hlship/tapx"; 
rel="nofollow">Tapx-plainmessage</a> adds a new binding prefix, "plain:", which 
works just like "message:", except that any HTML elements are scrubbed, and XML 
entities are replaced with the corresponding characters</li><li><a  
class="external-link" 
href="http://tapestry.formos.com/nightly/tapx/tapx-templating/"; 
rel="nofollow">Tapx-Templating</a> enables using Tapestry to generate offline 
content</li><li><a  class="external-link" href="https://github.com/hlship/tapx"; 
rel="nofollow">Tapx-yui</a> bundles YUI (Yahoo User Interface) JavaScript 
library, including its RichTextEditor</li></ul><p><a  class="external-link" 
href="http://tapestry.formos.com/projects/tapx/"; rel="nofollow">Other TapX 
Modules</a>...</p><h2 id="Modules-Tawus">Tawus</h2><ul><li><a  
class="external-link" 
href="http://tawus.wordpress.com/2011/06/25/ajax-upload-for-tapestry/"; 
rel="nofollow">Tawus-ajaxupload</a> is a multiple-file upload module based on 
the exce
 llent Valums File Uploader (Fine Uploader), with a progress-bar and 
drag-and-drop features</li><li><a  class="external-link" 
href="http://tawus.wordpress.com/2011/07/30/tapestry-jfreechart-integration/"; 
rel="nofollow">Tawus-jfreechart</a> makes it easier to use the JFreeChart 
charting library (<a  class="external-link" 
href="http://www.jfree.org/jfreechart/"; 
rel="nofollow">http://www.jfree.org/jfreechart/</a>) within Tapestry 
apps</li></ul><h2 id="Modules-Weaves(forTapestry5.3)">Weaves (for Tapestry 
5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/intercommit/Weaves"; rel="nofollow">Weaves</a> is a 
collection of Tapestry 5 components from 
InterCommIT</li></ul></div></div></div></div></div>
+                <div id="ConfluenceContent"><div 
class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><h2 
id="Modules-Built-inModules">Built-in Modules</h2>Tapestry comes with a 
collection of add-on modules to let you extend the framework beyond its 
core.<h3 id="Modules-HibernateIntegration">Hibernate Integration</h3><ul><li><a 
 href="hibernate-core-conf.html">Hibernate Configuration</a></li><li><a  
href="hibernate-user-guide.html">Hibernate User Guide</a></li><li><a  
href="hibernate-statistics.html">Hibernate Statistics</a></li></ul><h3 
id="Modules-SpringIntegration">Spring Integration</h3><ul><li><a  
href="integrating-with-spring-framework.html">Spring Core</a></li></ul><h3 
id="Modules-JPAIntegration">JPA Integration</h3><ul><li><a  
href="integrating-with-jpa.html">Integrating with JPA</a></li></ul><h3 
id="Modules-OtherModules">Other Modules</h3><ul><li><a  
href="bean-validation.html">JSR 303 Bean Validation</a></li><li><a  h
 ref="functional-flows.html">Functional Flows</a></li><li><a  
href="jmx-module.html">JMX Integration</a></li><li><a  
href="json.html">JSON</a></li><li><a  href="component-report.html">Component 
Report</a></li></ul></div><div class="columnMacro"><h2 
id="Modules-ThirdPartyModules">Third Party Modules</h2>Independent developers 
have build a rich collection of Tapestry modules for your immediate use. These 
modules greatly expand upon the capabilities already included in Tapestry. 
<em>These links take you to external sites.</em><h2 
id="Modules-Tapestry5-Cayenne">Tapestry5-Cayenne</h2><ul><li><a  
class="external-link" href="http://code.google.com/p/tapestry5-cayenne/"; 
rel="nofollow">Tapestry5-Cayenne</a> (for Tapestry 5.3) integrates with the 
Apache Cayenne persistence framework.</li></ul><h2 
id="Modules-Argoyle(forTapestry5.3)">Argoyle (for Tapestry 5.3)</h2><ul><li><a  
class="external-link" href="https://github.com/argoyle/tapestry-breadcrumbs"; 
rel="nofollow">Tapestry-breadcrumbs</a> is 
 a breadcrumb trail implementation, implemented as an annotation to be placed 
at each page-class that should be part of the trail.</li><li><a  
class="external-link" href="https://github.com/argoyle/tapestry-mfautocomplete"; 
rel="nofollow">Tapestry-mfautocomplete</a> An autocomplete implementation that 
can populate multiple fields</li></ul><h2 
id="Modules-ChenilleKit(forTapestry5.3)">Chenille Kit (for Tapestry 
5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-ldap/"; 
rel="nofollow">Chenillekit-LDAP</a> helps with LDAP querying</li><li><a  
class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-lucene/";
 rel="nofollow">Chenillekit-Lucene</a> provides Apache Lucene indexing &amp; 
searching</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-image/";
 rel="nofollow">Chenillekit-Image</a> is an image scaling service</li><li><a  
class="e
 xternal-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-mail/"; 
rel="nofollow">Chenillekit-Mail</a> is a mail service based on Apache Commons 
Email</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-quartz/";
 rel="nofollow">Chenillekit-Quartz</a> provides Quartz-based scheduling 
capabilities</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-scripting/";
 rel="nofollow">Chenillekit-Script</a> enables Apache's Bean Scripting 
Framework</li><li><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-template/";
 rel="nofollow">Chenillekit-Template</a> enables Velocity and FreeMarker 
templates</li></ul><p><a  class="external-link" 
href="https://github.com/chenillekit/chenillekit"; rel="nofollow">Other Chenille 
Kit Modules</a>...</p><h2 id="Modules-CiaranW">CiaranW</h2><ul><li><a  
class="external-link" href="htt
 ps://github.com/ciaranw/tapestry-service-cache/wiki" 
rel="nofollow">Tapestry-Service-Cache</a> provides easy, annotation-based 
caching for Tapestry 5 services.</li></ul><h2 
id="Modules-Exanpe">Exanpe</h2><ul><li><a  class="external-link" 
href="https://github.com/exanpe/tapestry-tldgen"; 
rel="nofollow">Tapestry-Tldgen</a> generates TLD files to let you use the 
Eclipse JSP editor for code completion on TML files.</li></ul><h2 
id="Modules-FlowLogix">FlowLogix</h2><ul><li><a  class="external-link" 
href="http://code.google.com/p/flowlogix/"; rel="nofollow">FlowLogix</a> is a 
collection of components, services and utilities that integrates Tapestry into 
JEE environments and provides other commonly needed functionality.</li></ul><h2 
id="Modules-GangOfTapestry5">Gang Of Tapestry 5</h2><ul><li><a  
class="external-link" href="https://github.com/got5/tapestry5-highcharts"; 
rel="nofollow">Tapestry5-HighCharts</a> integrates the Highcharts library (<a  
class="external-link" href="http://www.highcha
 rts.com/" rel="nofollow">http://www.highcharts.com/</a>) into a 
Tapestry5-jQuery based application</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-jqPlot"; 
rel="nofollow">Tapestry5-jqPlot</a> integrates with JQuery jqPlot, a plotting 
and charting plugin for the jQuery Javascript framework. jqPlot produces 
beautiful line, bar and pie charts with many features.</li><li><a  
class="external-link" href="https://github.com/got5/tapestry5-jquery"; 
rel="nofollow">Tapestry5-Jquery</a> lets you use jQuery to supplement <em>or 
completely replace</em> Prototype, Scriptaculous and the base tapestry.js 
script.</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-jquery-mobile"; 
rel="nofollow">Tapestry5-jquery-mobile</a> provides jQuery mobile integration 
for Tapestry</li><li><a  class="external-link" 
href="https://github.com/got5/tapestry5-portlet"; 
rel="nofollow">Tapestry5-Portlet</a> provides functionality for Portlet 
Development in Tapestry</li></ul><
 h2 id="Modules-Spock">Spock</h2><ul><li><a  class="external-link" 
href="http://code.google.com/p/spock/wiki/TapestryExtension"; 
rel="nofollow">Spock Tapestry Extension</a> provides integration with Spock, a 
testing and specification framework for Java and Groovy 
applications.</li></ul><h2 id="Modules-SpreadtheSource">Spread the 
Source</h2><ul><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-db-migrations"; 
rel="nofollow">Tapestry5-db-migrations</a> supports Tapestry 5 Database 
Migrations: Ruby on Rails-like database migrations powered by Tapestry IOC and 
Tapestry Hibernate Core</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-googleanalytics"; 
rel="nofollow">Tapestry5-googleanalytics</a> integrates with Google 
Analytics</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-hornet"; 
rel="nofollow">Tapestry5-hornet</a> integrates the Hornet java connector inside 
Tapestry 5. Hornet is a realt
 ime publish/suscribe engine that let you enhance your web application by 
connecting users together, powered by NodeJs and <a  class="external-link" 
href="http://Socket.io"; rel="nofollow">Socket.io</a></li><li><a  
class="external-link" 
href="https://github.com/spreadthesource/tapestry5-installer"; 
rel="nofollow">Tapestry5-installer</a> is a Tapestry 5 webapp installer: Live 
load your Tapestry app right after having set the configuration. This 
contribution aims to provide an easy way for Tapestry developers to include an 
installation application in their application so the user can provide its 
production environment configuration values</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-rome"; 
rel="nofollow">Tapestry5-rome</a> provides RSS &amp; Atom feed support in 
Tapestry apps</li><li><a  class="external-link" 
href="https://github.com/spreadthesource/tapestry5-spring-tx"; 
rel="nofollow">Tapestry5-spring-tx</a> supports using Spring Transaction Manager
  inside your Tapestry 5 application. Allows you to access to a Hibernate 
session factory configured via Spring through your Tapestry business layer in 
the same transaction</li></ul><h2 
id="Modules-T5conduit">T5conduit</h2><ul><li><a  class="external-link" 
href="https://github.com/cezary-biernacki/t5conduit"; 
rel="nofollow">T5conduit</a> allows seamless integration of LessCSS and 
CoffeeScript.</li></ul><h2 id="Modules-Tacos">Tacos</h2><ul><li><a  
class="external-link" href="http://tacos.sourceforge.net/tacos5/tacos-seam/"; 
rel="nofollow">Tacos-Seam</a> provides an integration between Tapestry and 
JBoss Seam</li></ul><h2 
id="Modules-Tapestry-bootstrap(forTapestry5.3)">Tapestry-bootstrap (for 
Tapestry 5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/trsvax/tapestry-bootstrap"; 
rel="nofollow">Tapestry-bootstrap</a> integrates Twitter Bootstrap with 
Tapestry 5. (Bootstrap is a grid based toolkit of polished HTML, CSS and 
JavaScript.</li></ul><h2 id="Modules-Tapestry-comet
 d">Tapestry-cometd</h2><ul><li><a  class="external-link" 
href="https://github.com/uklance/tapestry-cometd"; 
rel="nofollow">Tapestry-cometd</a> is a push library for Tapestry based on 
CometD (an HTTP-based event routing bus that uses an Ajax Push technology 
pattern known as Comet)</li></ul><h2 
id="Modules-Tapestry-monitoring">Tapestry-monitoring</h2><ul><li><a  
class="external-link" 
href="https://github.com/joshcanfield/tapestry-monitoring"; 
rel="nofollow">Tapestry-monitoring</a> is a lightweight, unobtrusive way to add 
JMX performance metrics to any Tapestry application, using the Java Simon 
monitoring API.</li></ul><h2 
id="Modules-Tapestry-profiler">Tapestry-profiler</h2><ul><li><a  
class="external-link" href="https://github.com/bdotte/tapestry-profiler"; 
rel="nofollow">Tapestry-profiler</a> is a simple, configurable, sampling 
profiler designed to be used in production Tapestry 5 applications to track 
down performance issues.</li></ul><h2 
id="Modules-Tapestry-spring-security">Tapestry
 -spring-security</h2><ul><li><a  class="external-link" 
href="http://www.localhost.nu/java/tapestry-spring-security/conf.html"; 
rel="nofollow">Tapestry-spring-security</a> integrates Spring Security with 
Tapestry applications</li></ul><h2 
id="Modules-Tapestry-Testify">Tapestry-Testify</h2><ul><li><a  
class="external-link" href="http://tapestrytestify.sourceforge.net/"; 
rel="nofollow">Tapestry-Testify</a> is an extension that makes it easier to 
write page and component tests and run them efficiently</li></ul><h2 
id="Modules-Tapestry-XPath">Tapestry-XPath</h2><ul><li><a  
class="external-link" href="http://tapestryxpath.sourceforge.net/"; 
rel="nofollow">Tapestry-XPath</a> allows you to use XPath expressions to query 
the Tapestry DOM (useful for page &amp; component tests)</li></ul><h2 
id="Modules-Tapestry-zbreadcrumbs">Tapestry-zbreadcrumbs</h2><ul><li><a  
class="external-link" href="https://bitbucket.org/zenios/tapestry-zbreadcrumbs"; 
rel="nofollow">Tapestry-zbreadcrumbs</a> is a bread cru
 mb trail implementation, with configuration through contributions and 
annotations, dynamic breadcrumb titles, and a very flexible breadcrumbs trail 
component</li></ul><h2 id="Modules-Tynamo">Tynamo</h2><ul><li><a  
class="external-link" href="http://tynamo.org/tapestry-model+guide"; 
rel="nofollow">Tapestry-Model</a> provides rapid development of CRUD-style 
applications</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-jpa+guide"; rel="nofollow">Tapestry-JPA 
Integration</a> allows you to use JPA with Tapestry</li><li><a  
class="external-link" href="http://tynamo.org/tapestry-resteasy+guide"; 
rel="nofollow">Tapestry-ReSTEasy</a> integrates with JBoss' RESTEasy, an 
implementation of JAX-RS</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-security+guide"; 
rel="nofollow">Tapestry-security</a> is a security module for Tapestry apps 
based on Apache Shiro</li><li><a  class="external-link" 
href="http://tynamo.org/tapestry-watchdog+guide"; rel="nofollow">Tapestry-
 Watchdog</a> lets your Tapestry app monitor itself</li></ul><p><a  
class="external-link" href="http://tynamo.org/"; rel="nofollow">Other Tynamo 
Modules</a>...</p><h2 id="Modules-TapX">TapX</h2><ul><li><a  
class="external-link" 
href="http://tapestry.formos.com/nightly/tapx/tapx-datefield/"; 
rel="nofollow">Tapx-Datefield</a> is an enhanced DateField component</li><li><a 
 class="external-link" href="https://github.com/hlship/tapx"; 
rel="nofollow">Tapx-plainmessage</a> adds a new binding prefix, "plain:", which 
works just like "message:", except that any HTML elements are scrubbed, and XML 
entities are replaced with the corresponding characters</li><li><a  
class="external-link" 
href="http://tapestry.formos.com/nightly/tapx/tapx-templating/"; 
rel="nofollow">Tapx-Templating</a> enables using Tapestry to generate offline 
content</li><li><a  class="external-link" href="https://github.com/hlship/tapx"; 
rel="nofollow">Tapx-yui</a> bundles YUI (Yahoo User Interface) JavaScript 
library, including it
 s RichTextEditor</li></ul><p><a  class="external-link" 
href="http://tapestry.formos.com/projects/tapx/"; rel="nofollow">Other TapX 
Modules</a>...</p><h2 id="Modules-Tawus">Tawus</h2><ul><li><a  
class="external-link" 
href="http://tawus.wordpress.com/2011/06/25/ajax-upload-for-tapestry/"; 
rel="nofollow">Tawus-ajaxupload</a> is a multiple-file upload module based on 
the excellent Valums File Uploader (Fine Uploader), with a progress-bar and 
drag-and-drop features</li><li><a  class="external-link" 
href="http://tawus.wordpress.com/2011/07/30/tapestry-jfreechart-integration/"; 
rel="nofollow">Tawus-jfreechart</a> makes it easier to use the JFreeChart 
charting library (<a  class="external-link" 
href="http://www.jfree.org/jfreechart/"; 
rel="nofollow">http://www.jfree.org/jfreechart/</a>) within Tapestry 
apps</li></ul><h2 id="Modules-Weaves(forTapestry5.3)">Weaves (for Tapestry 
5.3)</h2><ul><li><a  class="external-link" 
href="https://github.com/intercommit/Weaves"; rel="nofollow">Weaves</a> is a c
 ollection of Tapestry 5 components from 
InterCommIT</li></ul></div></div></div></div></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/object-providers.html
==============================================================================
--- websites/production/tapestry/content/object-providers.html (original)
+++ websites/production/tapestry/content/object-providers.html Sat Feb  3 
17:21:22 2018
@@ -44,13 +44,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Object Providers</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";>
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Object Providers</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -62,17 +75,17 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>When you don't provide the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html";>InjectService</a>
 annotation on a parameter (to a service builder method or constructor), 
Tapestry will resolve the parameter automatically.</p><p>This is called 
<em>object injection</em>, rather than <em>service injection</em>, because the 
value that will ultimately be injected is not necessarily a service; it may be 
some arbitrary object.</p><p>If this sounds vague, its because there is not 
just one <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html";>ObjectProvider</a>;
 there's a whole set of them, forming a <a  
href="chainbuilder-service.html">chain of command</a>. The commands in the 
chain may provide an object based on the parameter type, or based on additional 
annotations on the parameter.</p><p>There are 
 several built-in object providers:</p><ul><li>Check for @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html";>Value</a>
 annotation</li><li>Check for @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html";>Symbol</a>
 annotation</li><li>Check for a <em>unique</em> service in the Registry whose 
service interface matches the parameter type<br clear="none"> Usually, the 
@Inject annotation is supplemented by an additional annotation which triggers a 
specific ObjectProvider to provide the value.</li></ul><h1 
id="ObjectProviders-@ValueAnnotationProvider">@Value Annotation 
Provider</h1><p>The Value annotation allows a literal value to be injected. 
When combined with <a  href="symbols.html">symbols</a>, they represent a way 
for parts of the overall service network to be spot-configured. For 
example:</p><div class="code panel pdl" style="border-width: 1px
 ;"><div class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><p>When you don't provide the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html";>InjectService</a>
 annotation on a parameter (to a service builder method or constructor), 
Tapestry will resolve the parameter automatically.</p><p>This is called 
<em>object injection</em>, rather than <em>service injection</em>, because the 
value that will ultimately be injected is not necessarily a service; it may be 
some arbitrary object.</p><p>If this sounds vague, its because there is not 
just one <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html";>ObjectProvider</a>;
 there's a whole set of them, forming a <a  href="object-providers.html">chain 
of command</a>. The commands in the chain may provide an object based on the 
parameter type, or based on additional annotations on the 
parameter.</p><p>There are seve
 ral built-in object providers:</p><ul><li>Check for @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html";>Value</a>
 annotation</li><li>Check for @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html";>Symbol</a>
 annotation</li><li>Check for a <em>unique</em> service in the Registry whose 
service interface matches the parameter type<br clear="none"> Usually, the 
@Inject annotation is supplemented by an additional annotation which triggers a 
specific ObjectProvider to provide the value.</li></ul><h1 
id="ObjectProviders-@ValueAnnotationProvider">@Value Annotation 
Provider</h1><p>The Value annotation allows a literal value to be injected. 
When combined with <a  href="object-providers.html">symbols</a>, they represent 
a way for parts of the overall service network to be spot-configured. 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 MyService build(@Value("${max-seconds}") long 
maxSeconds)
   {
     return new MyServiceImpl(maxSeconds);
   }</pre>
-</div></div><p>Here, the MyService service requires a configuration of a 
number of seconds. The value is supplied as a symbol, with a factory default 
that may be overwritten with an application default.</p><p>Usually, the symbol 
reference is only part of the string, i.e. 
<code>@Value("${report.dir}/${report.name}.txt")</code></p><h1 
id="ObjectProviders-@SymbolAnnotationProvider">@Symbol Annotation 
Provider</h1><p>This is closely related to the @Value annotation approach, 
except that the annotation directly specifies a symbol name.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><p>Here, the MyService service requires a configuration of a 
number of seconds. The value is supplied as a symbol, with a factory default 
that may be overwritten with an application default.</p><p>Usually, the symbol 
reference is only part of the string, i.e. <code>@Value("${report.dir}/${<a  
class="external-link" href="http://report.name"; 
rel="nofollow">report.name</a>}.txt")</code></p><h1 
id="ObjectProviders-@SymbolAnnotationProvider">@Symbol Annotation 
Provider</h1><p>This is closely related to the @Value annotation approach, 
except that the annotation directly specifies a symbol name.</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 MyService build(@Symbol("max-seconds") long 
maxSeconds)
   {
     return new MyServiceImpl(maxSeconds);
   }</pre>
-</div></div><h1 id="ObjectProviders-ServiceProvider">Service 
Provider</h1><p>This is always that last object provider checked.</p><p>A 
<em>single</em> service must exist whose service interface matches the 
parameter type. This is <em>not</em> an exact match: a search is made for any 
and all services whose service interface is a super class of the parameter 
type.</p><p>An exception is thrown if there are no matches, or if there are 
multiple matches.</p><h1 id="ObjectProviders-AliasObjectProvider">Alias Object 
Provider</h1><p>The tapestry-core module defines the <a  
href="aliases.html">Alias object provider</a>, which is used as a way to 
override services or disambiguate services (when multiple services implement 
the same interface).</p><h1 id="ObjectProviders-DefiningNewProviders">Defining 
New Providers</h1><p>New providers can be specified by contributing to the 
MasterObjectProvider service's configuration. The configuration is mapped, with 
the keys being the provider prefix, and th
 e values being the object provider implementation.</p><p>Example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><h1 id="ObjectProviders-ServiceProvider">Service 
Provider</h1><p>This is always that last object provider checked.</p><p>A 
<em>single</em> service must exist whose service interface matches the 
parameter type. This is <em>not</em> an exact match: a search is made for any 
and all services whose service interface is a super class of the parameter 
type.</p><p>An exception is thrown if there are no matches, or if there are 
multiple matches.</p><h1 id="ObjectProviders-AliasObjectProvider">Alias Object 
Provider</h1><p>The tapestry-core module defines the <a  
href="object-providers.html">Alias object provider</a>, which is used as a way 
to override services or disambiguate services (when multiple services implement 
the same interface).</p><h1 id="ObjectProviders-DefiningNewProviders">Defining 
New Providers</h1><p>New providers can be specified by contributing to the 
MasterObjectProvider service's configuration. The configuration is mapped, with 
the keys being the provider prefi
 x, and the values being the object provider 
implementation.</p><p>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 void 
contributeMasterObjectProvider(OrderedConfiguration&lt;ObjectProvider&gt; 
configuration)
   {
     configuration.add("MyObject", new MyObjectProvider());


Reply via email to