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> </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> </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><script type="text/javascript" src="xxx.js"></script></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><script type="text/javascript" src="xxx.js"></script></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
<link> elements are added to the <em>top</em> of the document (in the
<head> element). With Tapestry 5.3 and later the new elements are
inserted at the bottom of the <head> element; in versions before 5.3 they
appear at the top of the <head> 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
<link> elements are added to the <em>top</em> of the document (in the
<head> element). With Tapestry 5.3 and later the new elements are
inserted at the bottom of the <head> element; in versions before 5.3 they
appear at the top of the <head> 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> </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> </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
<version>${tapestry-release-version}</version>
</dependency>
</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> – Using JQuery <em>instead of</em>
Prototype</li><li><a class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5HowToIntegrateJQuery">Tapestry5HowToIntegrateJQuery</a>
– 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 & 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 & 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 & 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 & 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 &
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 & 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 & 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 &
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 & 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 & 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 & 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 & 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<ObjectProvider>
configuration)
{
configuration.add("MyObject", new MyObjectProvider());