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

svn commit: r961168 [3/5] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/getting-started.html
==============================================================================
--- websites/production/tapestry/content/getting-started.html (original)
+++ websites/production/tapestry/content/getting-started.html Sat Aug  8 17:20:04 2015
@@ -176,13 +176,7 @@ package: com.example.newapp
 [INFO] Parameter: version, Value: 1.0-SNAPSHOT
 [INFO] Parameter: groupId, Value: com.example
 [INFO] Parameter: artifactId, Value: newapp
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/test/java
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/main/webapp
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/main/resources/com/example/newapp
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/test/resources
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/test/conf
-[WARNING] Don't override file /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp/src/site
-[INFO] project created from Archetype in dir: /Users/hlship/workspaces/tapestry/tapestry-doc-examples/newapp
+[INFO] project created from Archetype in dir: /users/joeuser/workspace/tapestry/tapestry-doc-examples/newapp
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
==============================================================================
--- websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html (original)
+++ websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html Sat Aug  8 17:20:04 2015
@@ -32,7 +32,6 @@
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -295,7 +294,7 @@ public class GameOver
   
 &lt;/html&gt;
 </pre>
-</div></div><p>The result, when you guess correctly, should be this:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="implementing-the-hi-lo-guessing-game.data/gameover.png"></span></p><p>That wraps up the basics of Tapestry; we've demonstrated the basics of linking pages together and passing information from page to page in code as well as incorporating data inside URLs.</p><p>There's still more room to refactor this toy application; for example, making it possible to start a new game from the GameOver page (and doing it in a way that doesn't duplicate code). In addition, later we'll see other ways of sharing information between pages that are less cumbersome than the setup-and-persist approach shown here.</p><p>Next up: let's find out how Tapestry handles HTML forms and user input.</p><p>Next: <a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></p><p>&#160;</p></div>
+</div></div><p>The result, when you guess correctly, should be this:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="implementing-the-hi-lo-guessing-game.data/gameover.png"></span></p><p>That wraps up the basics of Tapestry; we've demonstrated the basics of linking pages together and passing information from page to page in code as well as incorporating data inside URLs.</p><p>There's still more room to refactor this toy application; for example, making it possible to start a new game from the GameOver page (and doing it in a way that doesn't duplicate code). In addition, later we'll see other ways of sharing information between pages that are less cumbersome than the setup-and-persist approach shown here.</p><p>Next up: let's find out how Tapestry handles HTML forms and user input.</p><p>Next: <a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></p><p></p><p>&#160;</p><p>&#16
 0;</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/injection-in-detail.html
==============================================================================
--- websites/production/tapestry/content/injection-in-detail.html (original)
+++ websites/production/tapestry/content/injection-in-detail.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -122,7 +120,7 @@
 </div></div>
 <div style="border-right: 20px solid #D8E4F1;border-left: 20px solid #D8E4F1;">
 <p>ComponentResourceSelector is new as of release 5.3. It encapsulates a locale plus additional application-specific data used for skinning and/or themeing.</p>
-</div><h2 id="InjectioninDetail-AssetInjectionProvider">Asset InjectionProvider</h2><p>Triggered by the @Path annotation: the Path value has symbols expanded, and is then converted to an Asset.</p><h2 id="InjectioninDetail-ServiceInjectionProvider">Service InjectionProvider</h2><p>Equivalent to the Service Lookup phase in an IoC layer injection.</p><h1 id="InjectioninDetail-@InjectServiceinComponents">@InjectService in Components</h1><p>You may use the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotation on component fields.</p><p>&#160;</p></div>
+</div><h2 id="InjectioninDetail-AssetInjectionProvider">Asset InjectionProvider</h2><p>Triggered by the @Path annotation: the Path value has symbols expanded, and is then converted to an Asset.</p><h2 id="InjectioninDetail-ServiceInjectionProvider">Service InjectionProvider</h2><p>Equivalent to the Service Lookup phase in an IoC layer injection.</p><h1 id="InjectioninDetail-@InjectServiceinComponents">@InjectService in Components</h1><p>You may use the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotation on component fields.</p><p></p></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 Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -82,7 +80,7 @@
   {
     configuration.add("MyObject", new MyObjectProvider());
   }</pre>
-</div></div><p>This establishes a name for the object provider (useful if the exact order of execution of the provider, relative to other providers, is relevant).</p><p>Of course, this is a simplified example. In a real scenario, the provider is most likely a service with its own dependencies.</p></div>
+</div></div><p>This establishes a name for the object provider (useful if the exact order of execution of the provider, relative to other providers, is relevant).</p><p>Of course, this is a simplified example. In a real scenario, the provider is most likely a service with its own dependencies.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/ordering-by-constraints.html
==============================================================================
--- websites/production/tapestry/content/ordering-by-constraints.html (original)
+++ websites/production/tapestry/content/ordering-by-constraints.html Sat Aug  8 17:20:04 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -62,44 +52,12 @@
 <div class="clearer"></div>
 
   <div id="breadcrumbs">
-        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="documentation.html">Documentation</a>&nbsp;&gt;&nbsp;<a href="user-guide.html">User Guide</a>&nbsp;&gt;&nbsp;<a href="ioc.html">IoC</a>&nbsp;&gt;&nbsp;<a href="ordering-by-constraints.html">Ordering by Constraints</a>
+        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="documentation.html">Documentation</a>&nbsp;&gt;&nbsp;<a href="user-guide.html">User Guide</a>&nbsp;&gt;&nbsp;<a href="ioc.html">IOC</a>&nbsp;&gt;&nbsp;<a href="ordering-by-constraints.html">Ordering by Constraints</a>
     <a class="edit" title="Edit this page (requires approval -- just ask on the mailing list)" href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=23338485">edit</a>
   </div>
 
 <div id="content">
-<div id="ConfluenceContent">
-
-<h1 id="OrderingbyConstraints-OrderingbyConstraints">Ordering by Constraints</h1>
-
-<p>Tapestry IoC has two specific areas where it must put some form of contribution into a specific order:</p>
-
-<ul><li><a shape="rect" href="tapestry-ioc-configuration.html">Ordered Configurations</a>, where different modules may contribute into a service's configuration</li><li><a shape="rect" href="tapestry-ioc-decorators.html">Service Decorators</a> which must be applied to services from a number of modules.<br clear="none">
-In both these cases, objects (either contributions to a configuration, or decorators) are assigning qualified IDs, simple IDs qualified with the containing/contributing module's ID.</li></ul>
-
-
-<p>Because the contributions can come from different modules, and there isn't a specific order in which the service contribution methods are invoked, there is no natural ordering of the contributed objects.</p>
-
-<p>To resolve this, <em>constraints</em> are applied to each contribution. These constraints control what other objects must come before a contribution or after it.</p>
-
-<p>The constraints are specified using the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Order.html">Order</a> annotation (for service decorator methods), or as variable arguments at the end of the add() method for ordered configurations.</p>
-
-<p>Often a single contribution will have more than one constraint.</p>
-
-<h1 id="OrderingbyConstraints-ConstraintTypes">Constraint Types</h1>
-
-<p>Each constraint string begins with a prefix, <code>before:</code> or <code>after:</code>, used to identify the type of constraint.</p>
-
-<p>The remainder of the constraint string is a comma-separated list of <em>patterns</em>. The contributed object will be ordered before or after the contributions identified by the patterns.</p>
-
-<p><span class="confluence-anchor-link" id="OrderingbyConstraints-Match_Patterns"></span></p>
-<h1 id="OrderingbyConstraints-ConstraintMatchPatterns">Constraint Match Patterns</h1>
-
-<p>A constraint match pattern is used to select one or more objects by their ID.</p>
-
-<p>Match patterns support a very simple kind of wildcard matching. A <code>*</code> (asterisk character) may appear at the start and/or end of the pattern, and it will match zero or more characters there. Thus you can have patterns such as <code>Data*</code> or <code>*Logic</code> or even <code>*User*</code>.</p>
-
-<p>Matching is <a shape="rect" href="case-insensitivity.html">case insensitive</a>.</p>
-</div>
+<div id="ConfluenceContent"><p>Tapestry IoC has two specific areas where it must put some form of contribution into a specific order:</p><ul><li><a shape="rect" href="tapestry-ioc-configuration.html">Ordered Configurations</a>, where different modules may contribute into a service's configuration</li><li><a shape="rect" href="tapestry-ioc-decorators.html">Service Decorators</a> which must be applied to services from a number of modules.<br clear="none"> In both these cases, objects (either contributions to a configuration, or decorators) are assigning qualified IDs, simple IDs qualified with the containing/contributing module's ID.</li></ul><p>Because the contributions can come from different modules, and there isn't a specific order in which the service contribution methods are invoked, there is no natural ordering of the contributed objects.</p><p>To resolve this, <em>constraints</em> are applied to each contribution. These constraints control what other objects must come before a
  contribution or after it.</p><p>The constraints are specified using the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Order.html">Order</a> annotation (for service decorator methods), or as variable arguments at the end of the add() method for ordered configurations.</p><p>Often a single contribution will have more than one constraint.</p><h1 id="OrderingbyConstraints-ConstraintTypes">Constraint Types</h1><p>Each constraint string begins with a prefix, <code>before:</code> or <code>after:</code>, used to identify the type of constraint.</p><p>The remainder of the constraint string is a comma-separated list of <em>patterns</em>. The contributed object will be ordered before or after the contributions identified by the patterns.</p><p><span class="confluence-anchor-link" id="OrderingbyConstraints-Match_Patterns"></span></p><h1 id="OrderingbyConstraints-ConstraintMatchPatterns">Constraint Match Patterns</h1
 ><p>A constraint match pattern is used to select one or more objects by their ID.</p><p>Match patterns support a very simple kind of wildcard matching. A <code>*</code> (asterisk character) may appear at the start and/or end of the pattern, and it will match zero or more characters there. Thus you can have patterns such as <code>Data*</code> or <code>*Logic</code> or even <code>*User*</code>.</p><p>Matching is <a shape="rect" href="case-insensitivity.html">case insensitive</a>.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/pipelinebuilder-service.html
==============================================================================
--- websites/production/tapestry/content/pipelinebuilder-service.html (original)
+++ websites/production/tapestry/content/pipelinebuilder-service.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -162,7 +160,7 @@ public interface StringTransformFilter
         configuration,
         terminator);
     }    </pre>
-</div></div><p>Here, we create the terminator for the pipeline as an inner class instance, and feed that into the builder. The result is a new service that encapsulates the entire pipeline. When there are no filters, this is just the terminator.</p></div>
+</div></div><p>Here, we create the terminator for the pipeline as an inner class instance, and feed that into the builder. The result is a new service that encapsulates the entire pipeline. When there are no filters, this is just the terminator.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/service-advisors.html
==============================================================================
--- websites/production/tapestry/content/service-advisors.html (original)
+++ websites/production/tapestry/content/service-advisors.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -62,28 +60,13 @@
 <div class="clearer"></div>
 
   <div id="breadcrumbs">
-        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="documentation.html">Documentation</a>&nbsp;&gt;&nbsp;<a href="user-guide.html">User Guide</a>&nbsp;&gt;&nbsp;<a href="ioc.html">IoC</a>&nbsp;&gt;&nbsp;<a href="service-advisors.html">Service Advisors</a>
+        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="documentation.html">Documentation</a>&nbsp;&gt;&nbsp;<a href="user-guide.html">User Guide</a>&nbsp;&gt;&nbsp;<a href="ioc.html">IOC</a>&nbsp;&gt;&nbsp;<a href="service-advisors.html">Service Advisors</a>
     <a class="edit" title="Edit this page (requires approval -- just ask on the mailing list)" href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=23338475">edit</a>
   </div>
 
 <div id="content">
-<div id="ConfluenceContent">
-
-<h1 id="ServiceAdvisors-ServiceAdvisors">Service Advisors</h1>
-
-<p>Service advice represents a powerful meta-programming facility available to services. In fact, it is a kind of limited Aspect Oriented Programming.</p>
-
-<p>Service advice allows you to intercept method invocations on your services; you have the ability to see what methods get invoked, what the parameters are. You can let the normal code do it work, and then inspect or even adjust the return value, or any thrown exceptions. And you can do this all in normal Java code.</p>
-
-<p>A common example of method-level service advice is to log method entry and exit, complete with parameter values, return values, and thrown exceptions. Other approaches include security checks, transaction management, and other broadly spanning concerns.</p>
-
-<p>Let's start with a (contrived) example. Let's say you have an existing set of services that have methods that sometimes return null, and you want them to return an empty string instead because you are getting some NullPointerExceptions elsewhere in your application.</p>
-
-<p>You could track down the implementation of each service and fix the logic that provides a return value ... or you could advise the methods:</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;">
-  @Match("*")
+<div id="ConfluenceContent"><h1 id="ServiceAdvisors-ServiceAdvisors">Service Advisors</h1><p>Service advice represents a powerful meta-programming facility available to services. In fact, it is a kind of limited Aspect Oriented Programming.</p><p>Service advice allows you to intercept method invocations on your services; you have the ability to see what methods get invoked, what the parameters are. You can let the normal code do it work, and then inspect or even adjust the return value, or any thrown exceptions. And you can do this all in normal Java code.</p><p>A common example of method-level service advice is to log method entry and exit, complete with parameter values, return values, and thrown exceptions. Other approaches include security checks, transaction management, and other broadly spanning concerns.</p><p>Let's start with a (contrived) example. Let's say you have an existing set of services that have methods that sometimes return null, and you want them to return an empt
 y string instead because you are getting some NullPointerExceptions elsewhere in your application.</p><p>You could track down the implementation of each service and fix the logic that provides a return value ... or you could advise the methods:</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;">  @Match("*")
   public static void adviseNonNull(MethodAdviceReceiver receiver)
   {
     MethodAdvice advice = new MethodAdvice()
@@ -100,31 +83,8 @@
     receiver.adviseAllMethods(advice);
   };
 </pre>
-</div></div>
-
-<p>This is a method that is placed in a module class. Note the terminology: <em>advise</em> is the verb ("to advise a method") and <em>advice</em> is the noun ("with this advice"). The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/MethodAdviceReceiver.html">MethodAdviceReceiver</a> is a wrapper around the service being advised: you can add advice to some or all methods of the service, and also obtain the interface of the service. It is automatically passed into service advisor methods.</p>
-
-<p>See <a shape="rect" href="injection-in-detail.html">Injection in Detail</a> for what can be injected into a service advisor method.</p>
-
-<p>Service advisor methods must have a parameter of type MethodAdviceReceiver.</p>
-
-<p>A service will often be advised multiple times; any method may have any number of advice objects applied to it. Some methods may not get any advice. All of this is acceptable.</p>
-
-<p>Service advisor methods are always void methods (this is different from <a shape="rect" href="tapestry-ioc-decorators.html">service decorator methods</a>).</p>
-
-<p>The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Match.html">Match</a>("*") annotation indicates that this advice applies to all services (both your own, and those defined by Tapestry). You will want to narrow down which services are actually targeted in most cases.</p>
-
-<p>Note that some services, especially those built into Tapestry IoC, are marked as <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PreventServiceDecoration.html">not subject to decoration</a>, this applies to service advice as well as service decoration.</p>
-
-<p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/MethodAdvice.html">MethodAdvice</a> interface is very simple; it receives an <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/Invocation.html">Invocation</a> representing a method call. Invocation has methods for inspecting the type and value of the parameters, and for overriding the values of the parameters.</p>
-
-<p>The call to <code>proceed()</code> allows the invocation to continue; that is, the original method is invoked. If the method has been advised multiple times, the call to proceed() may chain into the next MethodAdvice object. In any case, after invoking <code>proceed()</code>, you may inspect and override the result (the return value).</p>
-
-<p>Advice is pretty efficient, but it is still better to apply it only to methods that make sense. We can improve the service advisor method in our example to only advise methods that return String:</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;">
-  @Match("*")
+</div></div><p>This is a method that is placed in a module class. Note the terminology: <em>advise</em> is the verb ("to advise a method") and <em>advice</em> is the noun ("with this advice"). The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/MethodAdviceReceiver.html">MethodAdviceReceiver</a> is a wrapper around the service being advised: you can add advice to some or all methods of the service, and also obtain the interface of the service. It is automatically passed into service advisor methods.</p><p>See <a shape="rect" href="injection-in-detail.html">Injection in Detail</a> for what can be injected into a service advisor method.</p><p>Service advisor methods must have a parameter of type MethodAdviceReceiver.</p><p>A service will often be advised multiple times; any method may have any number of advice objects applied to it. Some methods may not get any advice. All of this is acceptable.</p><p>Service advisor meth
 ods are always void methods (this is different from <a shape="rect" href="tapestry-ioc-decorators.html">service decorator methods</a>).</p><p>The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Match.html">Match</a>("*") annotation indicates that this advice applies to all services (both your own, and those defined by Tapestry). You will want to narrow down which services are actually targeted in most cases.</p><p>Note that some services, especially those built into Tapestry IoC, are marked as <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PreventServiceDecoration.html">not subject to decoration</a>, this applies to service advice as well as service decoration.</p><p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/MethodAdvice.html">MethodAdvice</a> interface is ve
 ry simple; it receives an <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/Invocation.html">Invocation</a> representing a method call. Invocation has methods for inspecting the type and value of the parameters, and for overriding the values of the parameters.</p><p>The call to <code>proceed()</code> allows the invocation to continue; that is, the original method is invoked. If the method has been advised multiple times, the call to proceed() may chain into the next MethodAdvice object. In any case, after invoking <code>proceed()</code>, you may inspect and override the result (the return value).</p><p>Advice is pretty efficient, but it is still better to apply it only to methods that make sense. We can improve the service advisor method in our example to only advise methods that return String:</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;">  @Match("*")
   public static void adviseNonNull(MethodAdviceReceiver receiver)
   {
     MethodAdvice advice = new MethodAdvice()
@@ -145,113 +105,51 @@
     }
   };
 </pre>
-</div></div>
-
-<h1 id="ServiceAdvisors-Built-inAdvice">Built-in Advice</h1>
-
-<p>Tapestry includes two built-in advisor services.</p>
-
-<h2 id="ServiceAdvisors-LoggingAdvice">Logging Advice</h2>
-
-<p>Logging advice is built into Tapestry. You can apply logging advice to your services very easily:</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;">
-  @Match("*")
+</div></div><h1 id="ServiceAdvisors-Built-inAdvice">Built-in Advice</h1><p>Tapestry includes two built-in advisor services.</p><h2 id="ServiceAdvisors-LoggingAdvice">Logging Advice</h2><p>Logging advice is built into Tapestry. You can apply logging advice to your services very easily:</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;">  @Match("*")
   public static void adviseLogging(LoggingAdvisor loggingAdvisor, Logger logger, MethodAdviceReceiver receiver)
   {
     loggingAdvisor.addLoggingAdvice(logger, receiver);
   }
 </pre>
-</div></div>
-
-<p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/LoggingAdvisor.html">LoggingAdvisor</a> is a built-in Tapestry IoC service. This demonstrates how services can be injected into service advisor methods. The Logger parameter is the logger for the service being advised.</p>
-
-<h2 id="ServiceAdvisors-LazyAdvice">Lazy Advice</h2>
+</div></div><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/LoggingAdvisor.html">LoggingAdvisor</a> is a built-in Tapestry IoC service. This demonstrates how services can be injected into service advisor methods. The Logger parameter is the logger for the service being advised.</p><h2 id="ServiceAdvisors-LazyAdvice">Lazy Advice</h2><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/LazyAdvisor.html">LazyAdvisor</a> makes method invocations lazy: methods that return an interface (rather than a value) will not execute immediately; instead, the method invocation is postponed until a method of the return value is invoked.</p><h1 id="ServiceAdvisors-MatchingAndOrdering">Matching And Ordering</h1><p>Each service advice method gets a unique id, obtained by stripping the "advise" prefix from the method name. Advice ids must be unique across all
  modules.</p><p>If the @Match annotation is omitted, the advice will match against a service with the same id.</p><p>In many cases, the order in which the advice is given is very important; for example, you may want logging first, then transaction management, then security checks. The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Order.html">Order</a> annotation allows you to explicitly set the order.</p><h1 id="ServiceAdvisors-Annotationdrivenadvisors">Annotation driven advisors</h1><p>
 
-<p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/LazyAdvisor.html">LazyAdvisor</a> makes method invocations lazy: methods that return an interface (rather than a value) will not execute immediately; instead, the method invocation is postponed until a method of the return value is invoked.</p>
-
-<h1 id="ServiceAdvisors-MatchingAndOrdering">Matching And Ordering</h1>
-
-<p>Each service advice method gets a unique id, obtained by stripping the "advise" prefix from the method name. Advice ids must be unique across all modules.</p>
-
-<p>If the @Match annotation is omitted, the advice will match against a service with the same id.</p>
-
-<p>In many cases, the order in which the advice is given is very important; for example, you may want logging first, then transaction management, then security checks. The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Order.html">Order</a> annotation allows you to explicitly set the order.</p>
-
-<h1 id="ServiceAdvisors-Annotationdrivenadvisors">Annotation driven advisors</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">
+</p><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>
 <div style="border-right: 20px solid #D8E4F1;border-left: 20px solid #D8E4F1;">
-</div>
-
-<p>Starting from version 5.2, Tapestry supports annotation-driven advise methods. If the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Advise.html">@Advise</a> annotation is present, the advise method can be arbitrary named, as shown in the following 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;">
-  @Advise
+<p>&#160;</p></div>Starting from version 5.2, Tapestry supports annotation-driven advise methods. If the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Advise.html">@Advise</a> annotation is present, the advise method can be arbitrary named, as shown in the following example.<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;">  @Advise
   @Match("*DAO")
   public static void byServiceId(MethodAdviceReceiver receiver)
   {
     ...
   }
 </pre>
-</div></div>
-
-<p>The advice above is applied to any service whose id matches the "*DAO" pattern.</p>
-
-<p>Alternatively, marker annotations can be placed on the advise method to match a specific service.</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;">
-  @Advise
+</div></div><p>The advice above is applied to any service whose id matches the "*DAO" pattern.</p><p>Alternatively, marker annotations can be placed on the advise method to match a specific service.</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;">  @Advise
   @Blue
   public static void byMarkerAnnotation(MethodAdviceReceiver receiver)
   {
     ...
   }
 </pre>
-</div></div>
-
-<p>The advice above is applied to any service that is marked by the @Blue annotation.</p>
-
-<p>By default, <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Advise.html">@Advise</a> annotation applies the advice to any service matched by the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Match.html">@Match</a> or marker annotations. You can limit the matching to a single service interface, as shown in the following 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;">
-  @Advise(serviceInterface=MyService.class)
+</div></div><p>The advice above is applied to any service that is marked by the @Blue annotation.</p><p>By default, <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Advise.html">@Advise</a> annotation applies the advice to any service matched by the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Match.html">@Match</a> or marker annotations. You can limit the matching to a single service interface, as shown in the following 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;">  @Advise(serviceInterface=MyService.class)
   @Match("*DAO")
   public static void byMatchAnnotation(MethodAdviceReceiver receiver)
   {
     ...
   }
 </pre>
-</div></div>
-
-<p>In the example above, the advice is applied to any implementation of MyService interfaces whose id matches the "*DAO" pattern.</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;">
-  @Advise(serviceInterface=MyService.class)
+</div></div><p>In the example above, the advice is applied to any implementation of MyService interfaces whose id matches the "*DAO" pattern.</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;">  @Advise(serviceInterface=MyService.class)
   @Blue
   public static void byMarkerAnnotation(MethodAdviceReceiver receiver)
   {
     ...
   }
 </pre>
-</div></div>
-
-<p>The advice above is applied to any implementation of the MyService interface that is marked by the @Blue annotation.</p>
-
-<h1 id="ServiceAdvisors-DecoratorsandAdvice">Decorators and Advice</h1>
-
-<p><a shape="rect" href="tapestry-ioc-decorators.html">Service decorators</a> are another way to achieve the same thing; service advisors are a more recent addition, added in Tapestry 5.1.</p>
-
-<p>It is not recommended that you mix advice and decoration. If you do, decoration take precedence; all decorators will be in effect before any advice (internally, they are two separate steps, with advice being processed and the result of that used by the decorators).</p>
-</div>
+</div></div><p>The advice above is applied to any implementation of the MyService interface that is marked by the @Blue annotation.</p><h1 id="ServiceAdvisors-DecoratorsandAdvice">Decorators and Advice</h1><p><a shape="rect" href="tapestry-ioc-decorators.html">Service decorators</a> are another way to achieve the same thing; service advisors are a more recent addition, added in Tapestry 5.1.</p><p>It is not recommended that you mix advice and decoration. If you do, decoration take precedence; all decorators will be in effect before any advice (internally, they are two separate steps, with advice being processed and the result of that used by the decorators).</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/service-implementation-reloading.html
==============================================================================
--- websites/production/tapestry/content/service-implementation-reloading.html (original)
+++ websites/production/tapestry/content/service-implementation-reloading.html Sat Aug  8 17:20:04 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -102,37 +92,7 @@
                         
                     </div>
     </li></ul>
-</div><p>Why is this important?</p><p>On the one hand, a good application design keeps the page and component classes "thin" and moves logic into the services layer, for easier reuse across pages. On the other hand, moving logic into services would be less agile if those services didn't auto-reload the way Tapestry pages do.</p><p>There are several restrictions on this, and a couple of <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Leaky_abstraction" >leaky abstractions</a>, but on the whole it's quite serviceable.</p><p>As of release 5.2, you can change your service implementation, and Tapestry picks up the change immediately. A service can even change its dependencies when being reloaded ... but it can't change its interface.</p><h2 id="ServiceImplementationReloading-Limitations">Limitations</h2><ul><li>Reloading only works for services, and only for services with the default service scope (i.e., global singletons). Live reloading does not apply to <stron
 g>modules</strong>, <strong>service interfaces</strong>, contributions, or anything but just the service implementation.</li><li>Reloading is limited to services that can be proxied: services with an interface and an implementation of that interface.</li><li>Reloading requires that the underlying class files be simple, local, filesystem files (not, for example, files inside a JAR).</li><li>If a service has internal state of any kind, that state is lost when the class is reloaded and the service re-instantiated. However, if a service has a configuration, the configuration will be <strong>reconstructed</strong> and injected into the service.</li><li>Services are decorated only once, so any decorations or advice applies to the initially loaded version of the class, and will not be recalculated when the class changes.</li></ul><h2 id="ServiceImplementationReloading-ClassLoaderIssues">Class Loader Issues</h2><p>Tapestry creates a new class loader for <em>each service implementation</em>.
  When the underlying .class file changes, the class loader is discarded along with the instance, and a new class loader is created.</p><p>The class loader only loads the service implementation class, and any inner classes for the service implementation. All other classes are loaded by the standard class loader for the application.</p><p>Because of how class loaders work, the class will no longer be able to access package private classes and members of other classes in the same package. You may see some odd IllegalAccessErrors and need to change the visibility of package-private classes to be public.</p><p>The JVM should be able to eventually garbage collect the class loader. However, if the class publishes itself to some other service (for example, adding itself as a listener to an event published by some other service), then the instance and the garbage collector will be leaked.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui
 -icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Be careful about publishing any instances of a reloadable class.</p></div></div><h2 id="ServiceImplementationReloading-UpdateChecks">Update Checks</h2><p>Update checks are normally driven by tapestry-core, which periodically checks for changed templates, message catalogs, and component classes. Checks for changed service implementation classes occur at the same time.</p><p>In an application that is not driven by the web tier, you will need to periodically invoke the <code>fireCheckForUpdates()</code> method of the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/UpdateListenerHub.html">UpdateListenerHub</a> service (which was moved from tapestry-core to tapestry-ioc for this purpose).</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 shape="rect" href="service-implementation-reloading.html">Service Implementation Reloading</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 shape="rect" href="class-reloading.html">Class Reloading</a>
-                
-                        
-                    </div>
-    </li></ul>
-</div></div>
+</div><p>Why is this important?</p><p>On the one hand, a good application design keeps the page and component classes "thin" and moves logic into the services layer, for easier reuse across pages. On the other hand, moving logic into services would be less agile if those services didn't auto-reload the way Tapestry pages do.</p><p>There are several restrictions on this, and a couple of <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Leaky_abstraction" >leaky abstractions</a>, but on the whole it's quite serviceable.</p><p>As of release 5.2, you can change your service implementation, and Tapestry picks up the change immediately. A service can even change its dependencies when being reloaded ... but it can't change its interface.</p><h2 id="ServiceImplementationReloading-Limitations">Limitations</h2><ul><li>Reloading only works for services, and only for services with the default service scope (i.e., global singletons). Live reloading does not apply to <stron
 g>modules</strong>, <strong>service interfaces</strong>, contributions, or anything but just the service implementation.</li><li>Reloading is limited to services that can be proxied: services with an interface and an implementation of that interface.</li><li>Reloading requires that the underlying class files be simple, local, filesystem files (not, for example, files inside a JAR).</li><li>If a service has internal state of any kind, that state is lost when the class is reloaded and the service re-instantiated. However, if a service has a configuration, the configuration will be <strong>reconstructed</strong> and injected into the service.</li><li>Services are decorated only once, so any decorations or advice applies to the initially loaded version of the class, and will not be recalculated when the class changes.</li></ul><h2 id="ServiceImplementationReloading-ClassLoaderIssues">Class Loader Issues</h2><p>Tapestry creates a new class loader for <em>each service implementation</em>.
  When the underlying .class file changes, the class loader is discarded along with the instance, and a new class loader is created.</p><p>The class loader only loads the service implementation class, and any inner classes for the service implementation. All other classes are loaded by the standard class loader for the application.</p><p>Because of how class loaders work, the class will no longer be able to access package private classes and members of other classes in the same package. You may see some odd IllegalAccessErrors and need to change the visibility of package-private classes to be public.</p><p>The JVM should be able to eventually garbage collect the class loader. However, if the class publishes itself to some other service (for example, adding itself as a listener to an event published by some other service), then the instance and the garbage collector will be leaked.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui
 -icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Be careful about publishing any instances of a reloadable class.</p></div></div><h2 id="ServiceImplementationReloading-UpdateChecks">Update Checks</h2><p>Update checks are normally driven by tapestry-core, which periodically checks for changed templates, message catalogs, and component classes. Checks for changed service implementation classes occur at the same time.</p><p>In an application that is not driven by the web tier, you will need to periodically invoke the <code>fireCheckForUpdates()</code> method of the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/UpdateListenerHub.html">UpdateListenerHub</a> service (which was moved from tapestry-core to tapestry-ioc for this purpose).</p><p>&#160;</p><p></p><p>&#160;</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/service-serialization.html
==============================================================================
--- websites/production/tapestry/content/service-serialization.html (original)
+++ websites/production/tapestry/content/service-serialization.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -71,7 +69,7 @@
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">[ERROR] SerializationSupport Setting a new service proxy provider when there's already
 an existing provider. This may indicate that you have multiple IoC Registries.
 </pre>
-</div></div><p></p></div>
+</div></div><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/shadowbuilder-service.html
==============================================================================
--- websites/production/tapestry/content/shadowbuilder-service.html (original)
+++ websites/production/tapestry/content/shadowbuilder-service.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -67,7 +65,7 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><p>The ShadowBuilder service (see the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyShadowBuilder.html">PropertyShadowBuilder</a> API) is used to build a special, delegating kind of service implementation that, essentially, allows a property of another service to be exposed as its own service.</p><div class="aui-label" style="float:right" title="Related Articles">
+<div id="ConfluenceContent"><p>The <strong>ShadowBuilder service</strong> (see the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyShadowBuilder.html">PropertyShadowBuilder</a> API) is used to build a special, delegating kind of service implementation that, essentially, allows a property of another service to be exposed as its own service.</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -132,7 +130,7 @@ public String getParameter(String name)
 {
   return source.getRequest().getParameter(name);
 }</pre>
-</div></div><p>That is, the shadow implementation holds onto the target object (in the above example, the RequestGlobals service) and invokes a method on it directly, not using reflection, no differently than you would if you wrote the code yourself.</p></div>
+</div></div><p>That is, the shadow implementation holds onto the target object (in the above example, the RequestGlobals service) and invokes a method on it directly, not using reflection, no differently than you would if you wrote the code yourself.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/strategybuilder-service.html
==============================================================================
--- websites/production/tapestry/content/strategybuilder-service.html (original)
+++ websites/production/tapestry/content/strategybuilder-service.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -129,7 +127,7 @@
   
      return builder.build(registry);
   }</pre>
-</div></div><p></p></div>
+</div></div><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/symbols.html
==============================================================================
--- websites/production/tapestry/content/symbols.html (original)
+++ websites/production/tapestry/content/symbols.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -176,7 +174,7 @@
   {
       configuration.add("report.path", "${report.url}/report.cgi");
   }</pre>
-</div></div><p>When the <code>report.url</code> is referenced, an exception will be thrown with the message: <em>Symbol 'report.path' is defined in terms of itself (report.path --&gt; report.url --&gt; report.path)</em>.</p></div>
+</div></div><p>When the <code>report.url</code> is referenced, an exception will be thrown with the message: <em>Symbol 'report.path' is defined in terms of itself (report.path --&gt; report.url --&gt; report.path)</em>.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/tapestry-ioc-configuration.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-configuration.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-configuration.html Sat Aug  8 17:20:04 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -67,7 +65,7 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><p><strong>Configuration of Tapestry IOC services</strong> &#8211; both those provided by Tapestry and those you write yourself &#8211; is done using Java, not XML.</p><div class="aui-label" style="float:right" title="Related Articles">
+<div id="ConfluenceContent"><p><strong>Tapestry IOC Configuration</strong> is the configuration of both the IOC services provided by Tapestry and those you write yourself. Both are configured in the same way: using Java, not XML.</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -133,7 +131,7 @@
                         
                     </div>
     </li></ul>
-</div><p>One of the key concepts in Tapestry IoC is <em>distributed configuration</em>. The <em>distributed</em> part refers to the fact that <em>any module</em> may configure a service. Distributed configuration is the key feature of Tapestry IoC that supports extensibility and modularity.</p><p>Modules configure a service by <em>contributing</em> to service configurations. This seems esoteric, but is quite handy, and is best explained by an example.</p><p>Let's say you've written a bunch of different services, each of which does something specific for a particular type of file (identified by the file's extension), and each implements the same interface, which we'll call FileServicer. And now let's say you need a central service that selects the one of your FileServicer implementations based on a given file extension. You start by providing a <a shape="rect" href="defining-tapestry-ioc-services.html">service builder method</a>:</p><div class="code panel pdl" style="border-width: 1p
 x;"><div class="codeContent panelContent pdl">
+</div><p>One of the key concepts in Tapestry IoC is <em>distributed configuration</em>. The <em>distributed</em> part refers to the fact that <em>any module</em> may configure a service. Distributed configuration is the key feature of Tapestry IoC that supports extensibility and modularity.</p><p>Modules configure a service by <em>contributing</em> to service configurations. This may seem esoteric but is really pretty simple. We'll explain with an example.</p><p>Let's say you've written a bunch of different services, each of which does something specific for a particular type of file (identified by the file's extension), and each implements the same interface, which we'll call FileServicer. And now let's say you need a central service that selects the one of your FileServicer implementations based on a given file extension. You start by providing a <a shape="rect" href="defining-tapestry-ioc-services.html">service builder method</a>:</p><div class="code panel pdl" style="border-widt
 h: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static FileServiceDispatcher buildFileServicerDispatcher(Map&lt;String,FileServicer&gt; contributions)
   {
     return new FileServiceDispatcherImpl(contributions);
@@ -237,7 +235,7 @@ public static void arbitraryMethodName(M
 </p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Added in 5.1</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 style="border-right: 20px solid #D8E4F1;border-left: 20px solid #D8E4F1;">
-<p>&#160;</p></div>The OrderedConfiguration and MappedConfiguration interfaces now support overrides. An override is a replacement for a normally contributed object. An override <em>must</em> match a contributed object, and each contributed object may be overridden at most once.<p>The new object replaces the original object; alternately, you may override the original object with null.</p><p>This allows you to fine tune configuration values that are contributed from modules that you are using, rather than just those that you write yourself. It is powerful and a bit dangerous.</p><p>In Tapestry 5.0, services that wanted to support this kind of override behavior had to implement it on an ad-hoc basis, such as ApplicationDefaults overriding FactoryDefaults. In many cases, that is still useful.</p></div>
+<p>&#160;</p></div>The OrderedConfiguration and MappedConfiguration interfaces now support overrides. An override is a replacement for a normally contributed object. An override <em>must</em> match a contributed object, and each contributed object may be overridden at most once.<p>The new object replaces the original object; alternately, you may override the original object with null.</p><p>This allows you to fine tune configuration values that are contributed from modules that you are using, rather than just those that you write yourself. It is powerful and a bit dangerous.</p><p>In Tapestry 5.0, services that wanted to support this kind of override behavior had to implement it on an ad-hoc basis, such as ApplicationDefaults overriding FactoryDefaults. In many cases, that is still useful.</p><p>&#160;</p><p></p></div>
 </div>
 
 <div class="clearer"></div>