Modified: websites/production/tapestry/content/configuration.html
==============================================================================
--- websites/production/tapestry/content/configuration.html (original)
+++ websites/production/tapestry/content/configuration.html Wed Sep 20 12:29:16 
2017
@@ -27,6 +27,16 @@
       </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>
+      SyntaxHighlighter.defaults['toolbar'] = false;
+      SyntaxHighlighter.all();
+    </script>
   
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -67,7 +77,84 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><parameter 
ac:name="style">float:right</parameter><parameter ac:name="title">Related 
Articles</parameter><parameter 
ac:name="class">aui-label</parameter><rich-text-body><parameter 
ac:name="showLabels">false</parameter><parameter 
ac:name="showSpace">false</parameter><parameter ac:name="title">Related 
Articles</parameter><parameter ac:name="cql">label = "configuration" and space 
= currentSpace()</parameter></rich-text-body><h1 
id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This page 
discusses all the ways in which Tapestry can be configured. Tapestry 
applications are configured almost entirely using Java, with very little XML at 
all.</p><p><strong>Contents</strong></p><p><parameter 
ac:name="maxLevel">2</parameter><parameter 
ac:name="minLevel">2</parameter></p><h2 
id="Configuration-XMLconfiguration(web.xml)">XML configuration 
(web.xml)</h2><p>Tapestry runs on top of the standard Java Servlet API. To the 
servlet container, 
 such as Tomcat, Tapestry appears as a <em>servlet filter</em>. This gives 
Tapestry great flexibility in matching URLs without requiring lots of XML 
configuration.</p><p>Although most configuration is done with Java, a small but 
necessary amount of configuration occurs inside the servlet deployment 
descriptor, WEB-INF/web.xml. Most of the configuration is boilerplate, nearly 
the same for all applications.</p><parameter 
ac:name="language">xml</parameter><parameter ac:name="title">web.xml 
(partial)</parameter><plain-text-body>&lt;!DOCTYPE web-app
+                <div id="ConfluenceContent"><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="application-module-class-cheat-sheet.html">Application Module Class Cheat 
Sheet</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="ioc-cookbook-service-configurations.html">IoC cookbook - Service 
Configurations</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="symbols.html">Symbols</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="tapestry-ioc-configuration.html">Tapestry 
IoC Configuration</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="response-compression.html">Response 
Compression</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="configuration.html">Configuration</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<h1 id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This 
page discusses all the ways in which Tapestry can be configured. Tapestry 
applications are configured almost entirely using Java, with very little XML at 
all.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1499639540986 {padding: 0px;}
+div.rbtoc1499639540986 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1499639540986 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1499639540986">
+<ul class="toc-indentation"><li><a  
href="#Configuration-XMLconfiguration(web.xml)">XML configuration 
(web.xml)</a></li><li><a  
href="#Configuration-YourApplication'sModuleClass">Your Application's Module 
Class</a></li><li><a  
href="#Configuration-ConfigurationSymbolNames">Configuration Symbol 
Names</a></li><li><a  
href="#Configuration-SettingComponentParameterDefaults">Setting Component 
Parameter Defaults</a></li><li><a  
href="#Configuration-ConfiguringIgnoredPaths">Configuring Ignored 
Paths</a></li><li><a  
href="#Configuration-ConfiguringContentTypeMapping">Configuring Content Type 
Mapping</a></li><li><a  href="#Configuration-SettingExecutionModes">Setting 
Execution Modes</a></li></ul>
+</div><h2 id="Configuration-XMLconfiguration(web.xml)">XML configuration 
(web.xml)</h2><p>Tapestry runs on top of the standard Java Servlet API. To the 
servlet container, such as Tomcat, Tapestry appears as a <em>servlet 
filter</em>. This gives Tapestry great flexibility in matching URLs without 
requiring lots of XML configuration.</p><p>Although most configuration is done 
with Java, a small but necessary amount of configuration occurs inside the 
servlet deployment descriptor, WEB-INF/web.xml. Most of the configuration is 
boilerplate, nearly the same for all applications.</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>web.xml (partial)</b></div><div 
class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;!DOCTYPE web-app
       PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
 &lt;web-app&gt;
@@ -85,13 +172,14 @@
         &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
     &lt;/filter-mapping&gt;
 &lt;/web-app&gt;
-</plain-text-body><p><plain-text-body>{float:right|width=30%|background=#eee}
-{color:#539126}*Tapestry Requests vs. Container Requests*{color}
+</pre>
+</div></div><p></p><div class="navmenu" style="float:right; width:30%; 
background:#eee; margin:3px; padding:3px">
+<p><font color="#539126"><strong>Tapestry Requests vs. Container 
Requests</strong></font></p>
 
-The Tapestry filter matches all the requests that apply to Tapestry, and 
passes the rest off to the servlet container. In situations where there would 
be a naming conflict, actual files inside the web application take precedence 
over Tapestry pages.
+<p>The Tapestry filter matches all the requests that apply to Tapestry, and 
passes the rest off to the servlet container. In situations where there would 
be a naming conflict, actual files inside the web application take precedence 
over Tapestry pages.</p>
 
-Tapestry recognizes the _root URL_, where the servlet path is simply "/", and 
renders the application page "Index", if it exists.
-{float}</plain-text-body>The application-specific part, the 
<code>tapestry.app-package</code> context parameter, provides your 
application's root package name. Tapestry uses this to locate your page and 
component classes. It expects page classes in the <code>pages</code> 
sub-package and components in the <code>components</code> sub-package. In the 
example above, page classes will be stored in the 
<code>org.example.myapp.pages</code> package (or in sub-packages below). 
Likewise, component classes will be stored in the 
<code>org.example.myapp.components</code> package.</p><p>By convention, the 
filter name (<code>filter-name</code>) is almost always "app", but you can use 
any name you want. Tapestry uses this to determine what <em>module class</em> 
name to look for (see below).</p><h2 
id="Configuration-YourApplication'sModuleClass">Your Application's Module 
Class</h2><p>Main Article: <a  href="tapestry-ioc-configuration.html">Tapestry 
IoC Configuration</a></p><p>Most other configuratio
 n occurs inside your application's module class. The application module class 
will often define new services, provide overrides of services, or make 
contributions to service configurations.</p><p>Tapestry looks for your 
application module class in the services package (under the root package) of 
your application. It capitalizes the &lt;filter-name&gt; and appends "Module". 
In the previous example, because the filter name was "app" and the 
application's root package name is "org.example.myapp", the module class would 
be org.example.myapp.services.AppModule.</p><p>If such a class exists, it is 
added to the IoC Registry. It is not an error for your application to not have 
a module class, though any non-trivial application will have one.</p><p>Your 
application module class (usually AppModule.java) will typically override some 
of Tapestry's default, or "factory", symbols, by contributing overrides to the 
ApplicationDefaults service configuration. For example:</p><parameter 
ac:name="langu
 age">java</parameter><parameter 
ac:name="title">AppModule.java</parameter><plain-text-body>public class 
AppModule
+<p>Tapestry recognizes the <em>root URL</em>, where the servlet path is simply 
"/", and renders the application page "Index", if it exists.</p></div>The 
application-specific part, the <code>tapestry.app-package</code> context 
parameter, provides your application's root package name. Tapestry uses this to 
locate your page and component classes. It expects page classes in the 
<code>pages</code> sub-package and components in the <code>components</code> 
sub-package. In the example above, page classes will be stored in the 
<code>org.example.myapp.pages</code> package (or in sub-packages below). 
Likewise, component classes will be stored in the 
<code>org.example.myapp.components</code> package.<p>By convention, the filter 
name (<code>filter-name</code>) is almost always "app", but you can use any 
name you want. Tapestry uses this to determine what <em>module class</em> name 
to look for (see below).</p><h2 
id="Configuration-YourApplication'sModuleClass">Your Application's Module 
Class</h2>
 <p>Main Article: <a  href="tapestry-ioc-configuration.html">Tapestry IoC 
Configuration</a></p><p>Most other configuration occurs inside your 
application's module class. The application module class will often define new 
services, provide overrides of services, or make contributions to service 
configurations.</p><p>Tapestry looks for your application module class in the 
services package (under the root package) of your application. It capitalizes 
the &lt;filter-name&gt; and appends "Module". In the previous example, because 
the filter name was "app" and the application's root package name is 
"org.example.myapp", the module class would be 
org.example.myapp.services.AppModule.</p><p>If such a class exists, it is added 
to the IoC Registry. It is not an error for your application to not have a 
module class, though any non-trivial application will have one.</p><p>Your 
application module class (usually AppModule.java) will typically override some 
of Tapestry's default, or "factory", symbol
 s, by contributing overrides to the ApplicationDefaults service configuration. 
For example:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>AppModule.java</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class AppModule
 {
   public static void 
contributeApplicationDefaults(MappedConfiguration&lt;String,String&gt; 
configuration)
   {
@@ -99,7 +187,8 @@ Tapestry recognizes the _root URL_, wher
     configuration.add(SymbolConstants.FILE_CHECK_INTERVAL, "10 m");
   }
 }
-</plain-text-body><h2 
id="Configuration-ConfigurationSymbolNames">Configuration Symbol 
Names</h2><p>Main Article: <a  href="symbols.html">Symbols</a></p><p>Many of 
Tapestry's built-in services (some of which are not even public) are configured 
via symbols. These symbols can be overridden by contributing to the 
ApplicationDefaults service configuration, or by placing a 
&lt;context-param&gt; element into the application's web.xml, or on the command 
line by defining JVM System Properties with the -D command line 
option.</p><p>These symbols are always defined in terms of strings, and those 
strings are coerced to the appropriate type (a number, a boolean, etc.). Of 
special note are <em>time intervals</em>, which are specified in a <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/util/TimeInterval.html";>particular
 format</a>.</p><p>Most of these symbols have a constant defined in the <a  
class="external-link" href="http://tapestry.apache.
 
org/current/apidocs/org/apache/tapestry5/SymbolConstants.html">SymbolConstants</a>
 class, while others are in the <a  
href="https://cwiki.apache.org/confluence/tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/IOCSymbols.html";>IOCSymbols</a>
 class. Those are noted in parentheses below. Use the symbol name (tapestry.*) 
for JVM System Properties with the -D option, and use the constant (in 
parentheses) from within your Java classes (e.g. AppModule.java).</p><h3 
id="Configuration-tapestry.app-catalog(SymbolConstants.APPLICATION_CATALOG)">tapestry.app-catalog
 (SymbolConstants.APPLICATION_CATALOG)</h3><p>The location of the global 
application message catalog, the default is 
context:WEB-INF/<em>app-name</em>.properties.</p><h3 
id="Configuration-tapestry.application-version(SymbolConstants.APPLICATION_VERSION)">tapestry.application-version
 (SymbolConstants.APPLICATION_VERSION)</h3><p>The version of the application, 
which is incorporated into URLs for context and classpath assets
 . Assets may be <a  href="response-compression.html">compressed</a>, and will 
have far-future expiration headers; they will be aggressively cached by the 
client web browser. You should change the application version on each new 
deployment of the application (that is, any time assets in the context change), 
to force clients to re-download changed versions of files. If you do not 
specify an application version, a <em>random</em> one will be assigned on every 
deployment (which is good for development but very bad for production).</p><h3 
id="Configuration-tapestry.application-folder(SymbolConstants.APPLICATION_FOLDER)">tapestry.application-folder
 (SymbolConstants.APPLICATION_FOLDER)</h3>
+</pre>
+</div></div><h2 id="Configuration-ConfigurationSymbolNames">Configuration 
Symbol Names</h2><p>Main Article: <a  
href="symbols.html">Symbols</a></p><p>Many of Tapestry's built-in services 
(some of which are not even public) are configured via symbols. These symbols 
can be overridden by contributing to the ApplicationDefaults service 
configuration, or by placing a &lt;context-param&gt; element into the 
application's web.xml, or on the command line by defining JVM System Properties 
with the -D command line option.</p><p>These symbols are always defined in 
terms of strings, and those strings are coerced to the appropriate type (a 
number, a boolean, etc.). Of special note are <em>time intervals</em>, which 
are specified in a <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/util/TimeInterval.html";>particular
 format</a>.</p><p>Most of these symbols have a constant defined in the <a  
class="external-link" href="http://tapestry.apache.org/cu
 rrent/apidocs/org/apache/tapestry5/SymbolConstants.html">SymbolConstants</a> 
class, while others are in the <a  
href="https://cwiki.apache.org/confluence/tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/IOCSymbols.html";>IOCSymbols</a>
 class. Those are noted in parentheses below. Use the symbol name (tapestry.*) 
for JVM System Properties with the -D option, and use the constant (in 
parentheses) from within your Java classes (e.g. AppModule.java).</p><h3 
id="Configuration-tapestry.app-catalog(SymbolConstants.APPLICATION_CATALOG)">tapestry.app-catalog
 (SymbolConstants.APPLICATION_CATALOG)</h3><p>The location of the global 
application message catalog, the default is 
context:WEB-INF/<em>app-name</em>.properties.</p><h3 
id="Configuration-tapestry.application-version(SymbolConstants.APPLICATION_VERSION)">tapestry.application-version
 (SymbolConstants.APPLICATION_VERSION)</h3><p>The version of the application, 
which is incorporated into URLs for context and classpath assets. Asse
 ts may be <a  href="response-compression.html">compressed</a>, and will have 
far-future expiration headers; they will be aggressively cached by the client 
web browser. You should change the application version on each new deployment 
of the application (that is, any time assets in the context change), to force 
clients to re-download changed versions of files. If you do not specify an 
application version, a <em>random</em> one will be assigned on every deployment 
(which is good for development but very bad for production).</p><h3 
id="Configuration-tapestry.application-folder(SymbolConstants.APPLICATION_FOLDER)">tapestry.application-folder
 (SymbolConstants.APPLICATION_FOLDER)</h3>
 
 <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>
@@ -263,7 +352,7 @@ Tapestry recognizes the _root URL_, wher
 <div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Added in 
5.4</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>
 <div class="error"><span class="error">Unknown macro: {div}</span> 
-<p>&#160;</p></div><p>If true (the default), then Tapestry will use a lock 
when reading/updating HttpSession attributes, to avoid simultaneous access by 
multiple threads when using AJAX. See <a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-2049";>TAP5-2049</a>. Set to 
false to deactivate the session locking logic.</p><p>Prior to version 5.4 
session locking was not performed.</p><h3 
id="Configuration-tapestry.start-page-name(SymbolConstants.START_PAGE_NAME)">tapestry.start-page-name
 (SymbolConstants.START_PAGE_NAME)</h3><p>The logical name of the start page, 
the page that is rendered for the <em>root URL</em>. This is normally "start". 
This functionality is vestigial: it has been superseded by the use of Index 
pages.</p><p><parameter ac:name="">supported-locales</parameter></p><h3 
id="Configuration-tapestry.strict-css-url-rewriting(SymbolConstants.STRICT_CSS_URL_REWRITING)">tapestry.strict-css-url-rewriting
 (SymbolConstants.STRICT_CSS_URL_REWRITING)</h3><p>Co
 ntrols whether to throw an exception (true) or log a warning (false) when 
Tapestry encounters a URL reference to a non-existing file within a CSS file. 
The default is false.</p><h3 
id="Configuration-tapestry.supported-locales(SymbolConstants.SUPPORTED_LOCALES)">tapestry.supported-locales
 (SymbolConstants.SUPPORTED_LOCALES)</h3><p>A comma-separated list of supported 
locales. Incoming requests as "narrowed" to one of these locales, based on 
closest match. If no match can be found, the first locale in the list is 
treated as the default.</p><p>The default is (currently) 
"en,it,es,zh_CN,pt_PT,de,ru,hr,fi_FI,sv_SE,fr_FR,da,pt_BR,ja,el". As the 
community contributes new localizations of the necessary messages files, this 
list will expand. Note that the Tapestry quickstart archetype overrides the 
factory default, forcing the application to be localized only for "en".</p><h3 
id="Configuration-tapestry.suppress-redirect-from-action-requests(SymbolConstants.SUPPRESS_REDIRECT_FROM_ACTION_REQUES
 TS)">tapestry.suppress-redirect-from-action-requests 
(SymbolConstants.SUPPRESS_REDIRECT_FROM_ACTION_REQUESTS)</h3>
+<p>&#160;</p></div><p>If true (the default), then Tapestry will use a lock 
when reading/updating HttpSession attributes, to avoid simultaneous access by 
multiple threads when using AJAX. See <a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-2049";>TAP5-2049</a>. Set to 
false to deactivate the session locking logic.</p><p>Prior to version 5.4 
session locking was not performed.</p><h3 
id="Configuration-tapestry.start-page-name(SymbolConstants.START_PAGE_NAME)">tapestry.start-page-name
 (SymbolConstants.START_PAGE_NAME)</h3><p>The logical name of the start page, 
the page that is rendered for the <em>root URL</em>. This is normally "start". 
This functionality is vestigial: it has been superseded by the use of Index 
pages.</p><p><span class="confluence-anchor-link" 
id="Configuration-supported-locales"></span></p><h3 
id="Configuration-tapestry.strict-css-url-rewriting(SymbolConstants.STRICT_CSS_URL_REWRITING)">tapestry.strict-css-url-rewriting
 (SymbolConstants.STRIC
 T_CSS_URL_REWRITING)</h3><p>Controls whether to throw an exception (true) or 
log a warning (false) when Tapestry encounters a URL reference to a 
non-existing file within a CSS file. The default is false.</p><h3 
id="Configuration-tapestry.supported-locales(SymbolConstants.SUPPORTED_LOCALES)">tapestry.supported-locales
 (SymbolConstants.SUPPORTED_LOCALES)</h3><p>A comma-separated list of supported 
locales. Incoming requests as "narrowed" to one of these locales, based on 
closest match. If no match can be found, the first locale in the list is 
treated as the default.</p><p>The default is (currently) 
"en,it,es,zh_CN,pt_PT,de,ru,hr,fi_FI,sv_SE,fr_FR,da,pt_BR,ja,el". As the 
community contributes new localizations of the necessary messages files, this 
list will expand. Note that the Tapestry quickstart archetype overrides the 
factory default, forcing the application to be localized only for "en".</p><h3 
id="Configuration-tapestry.suppress-redirect-from-action-requests(SymbolConstants.SUPPRE
 
SS_REDIRECT_FROM_ACTION_REQUESTS)">tapestry.suppress-redirect-from-action-requests
 (SymbolConstants.SUPPRESS_REDIRECT_FROM_ACTION_REQUESTS)</h3>
 
 <div class="confluence-information-macro 
confluence-information-macro-warning"><p class="title">Deprecated since 
5.2</p><span class="aui-icon aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 </div></div>
@@ -285,12 +374,17 @@ Tapestry recognizes the _root URL_, wher
 configuration.add(ComponentParameterConstants.GRID_ROWS_PER_PAGE, "15");
 </pre>
 </div></div>
-</div><p>See the complete list of such constants at <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ComponentParameterConstants.html";>ComponentParameterConstants</a>.</p><h2
 id="Configuration-ConfiguringIgnoredPaths">Configuring Ignored 
Paths</h2><p>You may sometimes need to use Tapestry in concert with other 
servlets. This can cause problems, since Tapestry (being a servlet filter) may 
see URLs intended for another servlet and attempt to process them.</p><p>The 
Servlet API does not provide Tapestry with any clues about what other servlets 
are available in the web application. Instead, you must configure Tapestry to 
ignore paths intended for other servlets.</p><p>The IgnoredPathsFilter service 
is the method for this kind of configuration. Its configuration is an unordered 
collection of regular expression patterns. A request whose path matches any of 
these patterns is <strong>not</strong> processed by Tapestry.</p><p>For 
example, say yo
 u are using <a  class="external-link" href="http://getahead.org/dwr/"; 
rel="nofollow">Direct Web Remoting</a>. You'll likely have the servlet path 
/dwr mapped to the Direct Web Remoting servlet.</p><p>You contribution would 
look like:</p><parameter ac:name="language">java</parameter><plain-text-body>  
public static void contributeIgnoredPathsFilter(Configuration&lt;String&gt; 
configuration)
+</div><p>See the complete list of such constants at <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ComponentParameterConstants.html";>ComponentParameterConstants</a>.</p><h2
 id="Configuration-ConfiguringIgnoredPaths">Configuring Ignored 
Paths</h2><p>You may sometimes need to use Tapestry in concert with other 
servlets. This can cause problems, since Tapestry (being a servlet filter) may 
see URLs intended for another servlet and attempt to process them.</p><p>The 
Servlet API does not provide Tapestry with any clues about what other servlets 
are available in the web application. Instead, you must configure Tapestry to 
ignore paths intended for other servlets.</p><p>The IgnoredPathsFilter service 
is the method for this kind of configuration. Its configuration is an unordered 
collection of regular expression patterns. A request whose path matches any of 
these patterns is <strong>not</strong> processed by Tapestry.</p><p>For 
example, say yo
 u are using <a  class="external-link" href="http://getahead.org/dwr/"; 
rel="nofollow">Direct Web Remoting</a>. You'll likely have the servlet path 
/dwr mapped to the Direct Web Remoting servlet.</p><p>You contribution would 
look like:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  public static void 
contributeIgnoredPathsFilter(Configuration&lt;String&gt; configuration)
   {
     configuration.add("/dwr/.*");
   }
-</plain-text-body><p>The regular expression matches any path that begins with 
"/dwr/".</p><p>The regular expressions provided in the configuration are always 
compiled with case insensitivity enabled.</p><p>Also note that actual files in 
your web application (images, stylesheets, etc.) are always ignored by 
Tapestry.</p><h2 id="Configuration-ConfiguringContentTypeMapping">Configuring 
Content Type Mapping</h2><p>The mapping from file type (by extension) to 
content type is typically done as part of your servlet-containers 
configuration. Alternately, you may contribute to the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/internal/services/ResourceStreamer.html";>ResourceStreamer</a>
 service's configuration. This is a mapped configuration; it maps file 
extensions (such as "css" or "js") to content types ("text/css" or 
"text/javascript") respectively.</p><h2 
id="Configuration-SettingExecutionModes">Setting Execution 
Modes</h2><p>Starting wi
 th Tapestry 5.2.4, we can specify an <em>execution mode</em> by loading 
specific Tapestry Modules through a JVM System property. All modules declared 
in this way will be loaded after the AppModule of your application. This 
feature is very useful for defining a different environment for Production and 
Development modes, for example.</p><p>This JVM System property, named 
tapestry.execution-mode, is a comma-separated list of mode names. You can 
declare this property in a number of different ways:</p><p>1. Add the parameter 
to your JVM command line:</p><plain-text-body>-Dtapestry.execution-mode=uat 
jetty:run
-</plain-text-body><p>2. Add the parameter to the Jetty plugin:</p><parameter 
ac:name="language">xml</parameter><parameter 
ac:name="title">pom.xml</parameter><plain-text-body>&lt;plugin&gt;
+</pre>
+</div></div><p>The regular expression matches any path that begins with 
"/dwr/".</p><p>The regular expressions provided in the configuration are always 
compiled with case insensitivity enabled.</p><p>Also note that actual files in 
your web application (images, stylesheets, etc.) are always ignored by 
Tapestry.</p><h2 id="Configuration-ConfiguringContentTypeMapping">Configuring 
Content Type Mapping</h2><p>The mapping from file type (by extension) to 
content type is typically done as part of your servlet-containers 
configuration. Alternately, you may contribute to the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/internal/services/ResourceStreamer.html";>ResourceStreamer</a>
 service's configuration. This is a mapped configuration; it maps file 
extensions (such as "css" or "js") to content types ("text/css" or 
"text/javascript") respectively.</p><h2 
id="Configuration-SettingExecutionModes">Setting Execution 
Modes</h2><p>Starting with Tap
 estry 5.2.4, we can specify an <em>execution mode</em> by loading specific 
Tapestry Modules through a JVM System property. All modules declared in this 
way will be loaded after the AppModule of your application. This feature is 
very useful for defining a different environment for Production and Development 
modes, for example.</p><p>This JVM System property, named 
tapestry.execution-mode, is a comma-separated list of mode names. You can 
declare this property in a number of different ways:</p><p>1. Add the parameter 
to your JVM command line:</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;">-Dtapestry.execution-mode=uat jetty:run
+</pre>
+</div></div><p>2. Add the parameter to the Jetty plugin:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>pom.xml</b></div><div class="codeContent 
panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;plugin&gt;
     &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
     &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;
     &lt;version&gt;6.1.16&lt;/version&gt;
@@ -306,7 +400,9 @@ configuration.add(ComponentParameterCons
         &lt;/systemProperties&gt;
     &lt;/configuration&gt;
 &lt;/plugin&gt;
-</plain-text-body><p>3. Add the parameter to the Surefire plugin for your 
test:</p><parameter ac:name="language">xml</parameter><parameter 
ac:name="title">pom.xml</parameter><plain-text-body>&lt;plugin&gt;
+</pre>
+</div></div><p>3. Add the parameter to the Surefire plugin for your 
test:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>pom.xml</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;plugin&gt;
     &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
     &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
     &lt;version&gt;2.8.1&lt;/version&gt;
@@ -316,7 +412,9 @@ configuration.add(ComponentParameterCons
        &lt;/systemPropertyVariables&gt;
     &lt;/configuration&gt;
 &lt;/plugin&gt;
-</plain-text-body><p>For each mode declared in your JVM System Property, 
TapestryFilter checks for a parameter in your web.xml, named 
tapestry.TheModeName-modules, with TheModeName being the name of the desired 
mode. Its value will be a comma-separated list of modules.</p><p>If the 
tapestry.execution-mode is not declared, Tapestry will automatically look for 
the tapestry.production-modules parameter, because &#8220;production&#8221; is 
the default tapestry.execution-mode value.</p><p>The example below defines two 
different execution modes in your web.xml file: production (the default value) 
and uat (for "user acceptance testing"). For each mode, we list the modules we 
want to load. If we use JVM System property declared in the example above, the 
UatModeModule&#160;module will be loaded.</p><parameter 
ac:name="language">xml</parameter><parameter 
ac:name="title">web.xml</parameter><plain-text-body>&lt;context-param&gt;
+</pre>
+</div></div><p>For each mode declared in your JVM System Property, 
TapestryFilter checks for a parameter in your web.xml, named 
tapestry.TheModeName-modules, with TheModeName being the name of the desired 
mode. Its value will be a comma-separated list of modules.</p><p>If the 
tapestry.execution-mode is not declared, Tapestry will automatically look for 
the tapestry.production-modules parameter, because &#8220;production&#8221; is 
the default tapestry.execution-mode value.</p><p>The example below defines two 
different execution modes in your web.xml file: production (the default value) 
and uat (for "user acceptance testing"). For each mode, we list the modules we 
want to load. If we use JVM System property declared in the example above, the 
UatModeModule&#160;module will be loaded.</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>web.xml</b></div><div class="codeContent 
panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;context-param&gt;
     &lt;param-name&gt;tapestry.production-modules&lt;/param-name&gt;
     
&lt;param-value&gt;com.example.myapp.services.ProductionModeModule&lt;/param-value&gt;
 &lt;/context-param&gt;
@@ -329,18 +427,24 @@ configuration.add(ComponentParameterCons
     &lt;param-name&gt;tapestry.integration-modules&lt;/param-name&gt;
     
&lt;param-value&gt;com.example.myapp.services.IntegrationModeModule&lt;/param-value&gt;
 &lt;/context-param&gt;
-</plain-text-body><p>Execution mode itself may be a comma separated 
list:</p><plain-text-body>-Dtapestry.execution-mode=uat,integration jetty:run
-</plain-text-body><p><span style="color: rgb(83,145,38);font-size: 
20.0px;line-height: 1.5;">Segregating Applications Into Folders</span></p><p>In 
many cases where Tapestry is being adopted into an existing web application 
(possibly written in Tapestry 4 or some other framework), it is nice to 
segregate the Tapestry application into its own folder, to avoid conflicts with 
the existing application or servlets.</p>
+</pre>
+</div></div><p>Execution mode itself may be a comma separated list:</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;">-Dtapestry.execution-mode=uat,integration jetty:run
+</pre>
+</div></div><p><span style="color: rgb(83,145,38);font-size: 
20.0px;line-height: 1.5;">Segregating Applications Into Folders</span></p><p>In 
many cases where Tapestry is being adopted into an existing web application 
(possibly written in Tapestry 4 or some other framework), it is nice to 
segregate the Tapestry application into its own folder, to avoid conflicts with 
the existing application or servlets.</p>
 
 <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>
 <div class="error"><span class="error">Unknown macro: {div}</span> 
 <p>Support for application folders was added in release 5.3.</p>
-</div><p>Setting this up is in two parts:</p><ul><li>Modifying the 
configuration of the <code>&lt;url-pattern&gt;</code> for the Tapestry filter 
to match the specified folder.</li><li>Identifying the folder name using a 
Tapestry symbol value contribution.</li></ul><p>So, if you wanted to run the 
Tapestry application inside folder <code>t5app</code>, you would modify your 
<code>web.xml</code> indicate the use of the folder:</p><parameter 
ac:name="language">xml</parameter><plain-text-body>  &lt;filter-mapping&gt;
+</div><p>Setting this up is in two parts:</p><ul><li>Modifying the 
configuration of the <code>&lt;url-pattern&gt;</code> for the Tapestry filter 
to match the specified folder.</li><li>Identifying the folder name using a 
Tapestry symbol value contribution.</li></ul><p>So, if you wanted to run the 
Tapestry application inside folder <code>t5app</code>, you would modify your 
<code>web.xml</code> indicate the use of the folder:</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">  &lt;filter-mapping&gt;
     &lt;filter-name&gt;app&lt;/filter-name&gt;
     &lt;url-pattern&gt;/t5app/*&lt;/url-pattern&gt;
   &lt;/filter-mapping&gt;
-</plain-text-body><p>... and in your AppModule, you would inform Tapestry 
about the mapping change:</p><parameter 
ac:name="language">java</parameter><plain-text-body>public class AppModule
+</pre>
+</div></div><p>... and in your AppModule, you would inform Tapestry about the 
mapping change:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class AppModule
 {
     @Contribute(SymbolProvider.class)
     @ApplicationDefaults
@@ -349,7 +453,8 @@ configuration.add(ComponentParameterCons
         configuration.add(SymbolConstants.APPLICATION_FOLDER, "t5app")
     }
 }
-</plain-text-body><rich-text-body><p>This extra mapping is unfortunately 
necessary, because the Servlet API does not provide a way for a servlet filter, 
such as the one used by Tapestry, to know about its 
mapping.</p></rich-text-body><p>This changes the servlet container to 
<em>only</em> forward requests inside the <code>t5app</code> folder to 
Tapestry; requests for other folders (or the root folder) will not be passed to 
Tapestry at all. The symbol contribution informs Tapestry to change the URLs it 
generates to include the necessary folder name; it also affects the logic in 
Tapestry that recognizes and handles requests.</p><p>In addition, if you choose 
to place page template files in the context, rather than on the classpath (as 
with component templates), then you will place those template files inside the 
<code>t5app</code> folder.</p><p>At this time, it is still not possible to run 
multiple Tapestry 5 applications within the same web application.</p></div>
+</pre>
+</div></div><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This extra mapping is 
unfortunately necessary, because the Servlet API does not provide a way for a 
servlet filter, such as the one used by Tapestry, to know about its 
mapping.</p></div></div><p>This changes the servlet container to <em>only</em> 
forward requests inside the <code>t5app</code> folder to Tapestry; requests for 
other folders (or the root folder) will not be passed to Tapestry at all. The 
symbol contribution informs Tapestry to change the URLs it generates to include 
the necessary folder name; it also affects the logic in Tapestry that 
recognizes and handles requests.</p><p>In addition, if you choose to place page 
template files in the context, rather than on the classpath (as with component 
templates), then you will place those tem
 plate files inside the <code>t5app</code> folder.</p><p>At this time, it is 
still not possible to run multiple Tapestry 5 applications within the same web 
application.</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/confluence-site-setup.html
==============================================================================
--- websites/production/tapestry/content/confluence-site-setup.html (original)
+++ websites/production/tapestry/content/confluence-site-setup.html Wed Sep 20 
12:29:16 2017
@@ -36,26 +36,13 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
-
-</div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
-<form enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";>
-  <input type="text" name="q">
-  <input type="submit" value="Search">
-</form>
-
-</div>
-
-
-<div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div>
-
-
-<div class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Confluence Site Setup</h1></div>
-
-</div>
+            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
+ <input type="text" name="q"> 
+ <input type="submit" value="Search"> 
+</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Confluence Site Setup</h1></div></div>
       <div class="clearer"></div>
       </div>
 
@@ -67,7 +54,43 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>This document describes our web 
site setup: what is where and how it works.</p><parameter 
ac:name="style">float:right</parameter><parameter ac:name="title">Related 
Articles</parameter><parameter 
ac:name="class">aui-label</parameter><rich-text-body><parameter 
ac:name="showLabels">false</parameter><parameter 
ac:name="showSpace">false</parameter><parameter ac:name="title">Related 
Articles</parameter><parameter ac:name="cql">label = "tapestry-dev" and space = 
currentSpace()</parameter></rich-text-body><h1 
id="ConfluenceSiteSetup-Overview">Overview</h1><p>Most of the web site and 
documentation (with the notable exception of the Javadoc API pages) are kept in 
Confluence.</p><p>Since the Confluence instance at <a  class="external-link" 
href="https://cwiki.apache.org/confluence/";>https://cwiki.apache.org/confluence/</a>
 isn't capable of handling a lot of incoming requests, all wiki spaces are 
statically exported. The SiteExporter program is res
 ponsible for that. Once a page in Confluence changes, that page gets 
re-exported automatically.</p><h2 
id="ConfluenceSiteSetup-HowSiteExporterworks">How SiteExporter 
works</h2><p><em>For more details see the <a  class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/README";>SiteExporter
 README</a>.</em></p><p>SiteExporter is a command-line Java program that is run 
hourly (currently at 19 minutes after the hour) from Apache's BuildBot. It 
makes a web service call to Confluence (to its RSS feed, actually) to get a 
list of pages that have changed since the last run, and the HTML-formatted 
export of those pages. For each, it post-processes the file (described below). 
Finally, SiteExporter commits all changed HTML files into Tapestry's part of 
the Apache Subversion repository, which (nearly instantly) makes it available 
to the public at <a  class="external-link" 
href="http://tapestry.apache.org";>http://tapestry.apache.org</a>, and commit 
emails are sent
  to Tapestry's "commits" mailing list.</p><p>Attachments (to Confluence pages) 
are exported in roughly the same way.</p><p>The time between saving a change in 
Confluence and seeing the result on the public site is at most 1 hour, 
depending on when you do it. If you save a change at 18 minutes after the hour 
you'll see the change in about a minute. If you publish it at 20 minutes after 
the hour then you'll have to wait almost an hour.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>HTML files in SVN</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><a  class="external-link" 
href="https://svn.apache.org/repos/infra/websites/production/tapestry";>https://svn.apache.org/repos/infra/websites/production/tapestry</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Cache File</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><a  class="external-link" 
href="https://svn.apache.org/repos/infr
 
a/websites/production/tapestry/content/cache/main.pageCache">https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>SiteExporter 
source</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a  
class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk";>https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Velocity template</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><a  class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm";>https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm</a></td></tr></tbody></table></div><h3
 id="ConfluenceSiteSetup-Post-processingHTMLPages">Post-processing HTML 
Pages</h3><p>HTML pages exported from Confluence are post-processed in several 
ways bef
 ore being committed to SVN. Here are just a few of the things going 
on:</p><ul><li>Tagsoup is used to clean up the HTML.</li><li>The breadcrumb 
links are updated.</li><li>Empty paragraph (&lt;p&gt;) tags are removed from 
the top of the page.</li><li>{code} macro output (code examples) are detected, 
and SyntaxHighlighter JavaScript links are added to the page when 
needed.</li><li>{include} tags (when one Confluence page includes another) are 
detected, causing the <em>including</em> page to be regenerated 
autoamtically.</li><li>{children} tags are also detected and 
handled</li></ul><h2 id="ConfluenceSiteSetup-ManualIntervention">Manual 
Intervention</h2><p>You can cause the <em>whole site</em> to be republished by 
deleting the main.pageCache file (above) in the subversion repo. This is 
usually only needed after changing the template.</p><h2 
id="ConfluenceSiteSetup-ChangingSiteExporteritself">Changing SiteExporter 
itself</h2><p>Currently the SiteExporter source code is an unmodified cop
 y of a program of the same name written by Dan Kulp for the Apache CXF project 
and also used by Camel, Geronimo, and Struts (and possibly others). It can be 
customized, but proceed with caution, because any customizations will make it 
harder to pull in future changes from the original CXF SiteExporter code. The 
CXF SiteExporter is likely to change as Confluence versions change.</p><p>To 
pick up changes to the original CXF SiteExporter code, just compare <a  
class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/src/main/java/org/apache/cxf/cwiki";>the
 Tapestry source code</a> with <a  class="external-link" 
href="http://svn.apache.org/repos/asf/cxf/web/src/main/java/org/apache/cxf/cwiki/";>the
 CXF source code</a>.</p><hr><h1 
id="ConfluenceSiteSetup-WikiFormattingGuidelines">Wiki Formatting 
Guidelines</h1><ul><li>Precede annotation names with '@'. If the annotation 
name is hyperlinked, put the '@' character <em>outside</em> of the link: 
@[AnnotationTyp
 e|http://...AnnotationType.html]</li><li>The first reference to a type on a 
page should be a link to <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/";>http://tapestry.apache.org/current/apidocs/</a>...
 (or the component reference)</li><li>Treat the page title as if it were an h0. 
element, and put top level sections within the page as h1.</li><li>Page names 
as headings should have All Words Captialized.</li><li>For other headings, only 
the first word of multi-word headings should be capitalized, e.g. "h2. Naming 
conventions" (following Wikipedia)</li><li>Use <code>code</code> font for 
method and property names: <code>myProperty</code>, 
<code>someMethod()</code>.</li><li>Use the default font for Class names 
(qualified or not).</li><li>Use the default font for path names.</li><li>Use 
{code} for listings, not {noformat}.</li><li>Use {noformat} for console 
output.</li><li>Images and diagrams should be small-sized thumbnails, centered, 
with no border.</li><li>Us
 e the <a  href="since-and-deprecated-user-macros.html">Since and 
Deprecated</a> macros to mark new or deprecated features.</li><li><em>Proposed: 
Each page should include explicit links to its child pages. Don't rely on the 
"Child Pages" links at the bottom, which don't carry over to the exported 
site.</em></li><li><em>Proposed: In pages other than the User Guide pages, 
subsections that briefly discuss topics that are more fully covered in the User 
Guide should lead with a "Main Article: [Foo]" line, where Foo is the name of 
the page in the User Guide. Example: the "Template Localization" section of <a  
href="component-templates.html">Component 
Templates</a></em></li><li><em>Proposed: User Guide pages should generally 
start with a right-floated "Related Articles" box that provides links to 
related content in the FAQ, Cookbook, Cheat Sheets, etc. <a  
href="component-classes.html">Example</a></em></li><li><em>Proposed: The lead 
paragraph should generally lead with the title word or phr
 ase in bold (following Wikipedia)</em></li></ul><h1 
id="ConfluenceSiteSetup-Websitestructure">Website structure</h1><p>The <a  
href="index.html">Index</a> page includes the <a  href="banner.html">Banner</a> 
and <a  href="key-features.html">Key Features</a> pages as well as the blog 
posts. Most other pages are just plain pages and may or may not include other 
parts. In addition the <a  href="navigation.html">Navigation</a>, <a  
href="small-banner.html">Small Banner</a> and <a  href="footer.html">Footer</a> 
pages exist.</p><p>Our SiteExporter template (described above) glues everything 
together. It adds the contents of the <a  href="navigation.html">Navigation</a> 
and <a  href="footer.html">Footer</a> pages in the appropriate places and on 
all pages except the <a  href="index.html">Index</a> page. It also adds the 
contents of the <a  href="small-banner.html">Small Banner</a> page as well as 
the breadcrumbs navigation.</p><rich-text-body><p>HLS: I've noticed that pages 
with footnotes t
 hat are combined with the {include} macro do not render correctly ... the 
footnote numbers and anchors reset back to 1 for each included page. Perhaps 
there's a way to fix that with the template?</p></rich-text-body><h1 
id="ConfluenceSiteSetup-Updatingthetemplate">Updating the template</h1><p>You 
must be a Tapestry committer or otherwise have write access to the subversion 
repository (see link above).</p><p>To edit the template:</p><ol><li>check out 
the SiteExporter source project (see link above)</li><li>find and edit the 
template.vm file</li><li>commit your changes</li></ol></div>
+                <div id="ConfluenceContent"><p>This document describes our web 
site setup: what is where and how it works.</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="building-tapestry-from-source.html">Building Tapestry from 
Source</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="version-numbers.html">Version Numbers</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="developer-bible.html">Developer Bible</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="release-process.html">Release Process</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="developer-information.html">Developer Information</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="confluence-site-setup.html">Confluence Site Setup</a> 
+  </div> </li></ul></div><h1 
id="ConfluenceSiteSetup-Overview">Overview</h1><p>Most of the web site and 
documentation (with the notable exception of the Javadoc API pages) are kept in 
Confluence.</p><p>Since the Confluence instance at <a  class="external-link" 
href="https://cwiki.apache.org/confluence/";>https://cwiki.apache.org/confluence/</a>
 isn't capable of handling a lot of incoming requests, all wiki spaces are 
statically exported. The SiteExporter program is responsible for that. Once a 
page in Confluence changes, that page gets re-exported automatically.</p><h2 
id="ConfluenceSiteSetup-HowSiteExporterworks">How SiteExporter 
works</h2><p><em>For more details see the <a  class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/README";>SiteExporter
 README</a>.</em></p><p>SiteExporter is a command-line Java program that is run 
hourly (currently at 19 minutes after the hour) from Apache's BuildBot. It 
makes a web service call to Confluence (to its R
 SS feed, actually) to get a list of pages that have changed since the last 
run, and the HTML-formatted export of those pages. For each, it post-processes 
the file (described below). Finally, SiteExporter commits all changed HTML 
files into Tapestry's part of the Apache Subversion repository, which (nearly 
instantly) makes it available to the public at <a  class="external-link" 
href="http://tapestry.apache.org";>http://tapestry.apache.org</a>, and commit 
emails are sent to Tapestry's "commits" mailing list.</p><p>Attachments (to 
Confluence pages) are exported in roughly the same way.</p><p>The time between 
saving a change in Confluence and seeing the result on the public site is at 
most 1 hour, depending on when you do it. If you save a change at 18 minutes 
after the hour you'll see the change in about a minute. If you publish it at 20 
minutes after the hour then you'll have to wait almost an hour.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" ro
 wspan="1" class="confluenceTd"><p>HTML files in SVN</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><a  class="external-link" 
href="https://svn.apache.org/repos/infra/websites/production/tapestry";>https://svn.apache.org/repos/infra/websites/production/tapestry</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Cache File</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><a  class="external-link" 
href="https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache";>https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>SiteExporter 
source</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a  
class="external-link" 
href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk";>https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk</a></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p
 >Velocity template</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a 
 > class="external-link" 
 >href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm";>https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm</a></td></tr></tbody></table></div><h3
 > id="ConfluenceSiteSetup-Post-processingHTMLPages">Post-processing HTML 
 >Pages</h3><p>HTML pages exported from Confluence are post-processed in 
 >several ways before being committed to SVN. Here are just a few of the things 
 >going on:</p><ul><li>Tagsoup is used to clean up the HTML.</li><li>The 
 >breadcrumb links are updated.</li><li>Empty paragraph (&lt;p&gt;) tags are 
 >removed from the top of the page.</li><li>{code} macro output (code examples) 
 >are detected, and SyntaxHighlighter JavaScript links are added to the page 
 >when needed.</li><li>{include} tags (when one Confluence page includes 
 >another) are detected, causing the <em>including</em> page to be regenerated 
 >autoamtically.</
 li><li>{children} tags are also detected and handled</li></ul><h2 
id="ConfluenceSiteSetup-ManualIntervention">Manual Intervention</h2><p>You can 
cause the <em>whole site</em> to be republished by deleting the main.pageCache 
file (above) in the subversion repo. This is usually only needed after changing 
the template.</p><h2 
id="ConfluenceSiteSetup-ChangingSiteExporteritself">Changing SiteExporter 
itself</h2><p>Currently the SiteExporter source code is an unmodified copy of a 
program of the same name written by Dan Kulp for the Apache CXF project and 
also used by Camel, Geronimo, and Struts (and possibly others). It can be 
customized, but proceed with caution, because any customizations will make it 
harder to pull in future changes from the original CXF SiteExporter code. The 
CXF SiteExporter is likely to change as Confluence versions change.</p><p>To 
pick up changes to the original CXF SiteExporter code, just compare <a  
class="external-link" href="https://svn.apache.org/repos/asf/ta
 pestry/tapestry-site/trunk/src/main/java/org/apache/cxf/cwiki">the Tapestry 
source code</a> with <a  class="external-link" 
href="http://svn.apache.org/repos/asf/cxf/web/src/main/java/org/apache/cxf/cwiki/";>the
 CXF source code</a>.</p><hr><h1 
id="ConfluenceSiteSetup-WikiFormattingGuidelines">Wiki Formatting 
Guidelines</h1><ul><li>Precede annotation names with '@'. If the annotation 
name is hyperlinked, put the '@' character <em>outside</em> of the link: 
@[AnnotationType|http://...AnnotationType.html]</li><li>The first reference to 
a type on a page should be a link to <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/";>http://tapestry.apache.org/current/apidocs/</a>...
 (or the component reference)</li><li>Treat the page title as if it were an h0. 
element, and put top level sections within the page as h1.</li><li>Page names 
as headings should have All Words Captialized.</li><li>For other headings, only 
the first word of multi-word headings should be capitalized
 , e.g. "h2. Naming conventions" (following Wikipedia)</li><li>Use 
<code>code</code> font for method and property names: <code>myProperty</code>, 
<code>someMethod()</code>.</li><li>Use the default font for Class names 
(qualified or not).</li><li>Use the default font for path names.</li><li>Use 
{code} for listings, not {noformat}.</li><li>Use {noformat} for console 
output.</li><li>Images and diagrams should be small-sized thumbnails, centered, 
with no border.</li><li>Use the <a  
href="since-and-deprecated-user-macros.html">Since and Deprecated</a> macros to 
mark new or deprecated features.</li><li><em>Proposed: Each page should include 
explicit links to its child pages. Don't rely on the "Child Pages" links at the 
bottom, which don't carry over to the exported site.</em></li><li><em>Proposed: 
In pages other than the User Guide pages, subsections that briefly discuss 
topics that are more fully covered in the User Guide should lead with a "Main 
Article: [Foo]" line, where Foo is the nam
 e of the page in the User Guide. Example: the "Template Localization" section 
of <a  href="component-templates.html">Component 
Templates</a></em></li><li><em>Proposed: User Guide pages should generally 
start with a right-floated "Related Articles" box that provides links to 
related content in the FAQ, Cookbook, Cheat Sheets, etc. <a  
href="component-classes.html">Example</a></em></li><li><em>Proposed: The lead 
paragraph should generally lead with the title word or phrase in bold 
(following Wikipedia)</em></li></ul><h1 
id="ConfluenceSiteSetup-Websitestructure">Website structure</h1><p>The <a  
href="index.html">Index</a> page includes the <a  href="banner.html">Banner</a> 
and <a  href="key-features.html">Key Features</a> pages as well as the blog 
posts. Most other pages are just plain pages and may or may not include other 
parts. In addition the <a  href="navigation.html">Navigation</a>, <a  
href="small-banner.html">Small Banner</a> and <a  href="footer.html">Footer</a> 
pages exist.</
 p><p>Our SiteExporter template (described above) glues everything together. It 
adds the contents of the <a  href="navigation.html">Navigation</a> and <a  
href="footer.html">Footer</a> pages in the appropriate places and on all pages 
except the <a  href="index.html">Index</a> page. It also adds the contents of 
the <a  href="small-banner.html">Small Banner</a> page as well as the 
breadcrumbs navigation.</p><div class="confluence-information-macro 
confluence-information-macro-warning"><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>HLS: I've noticed that pages with 
footnotes that are combined with the {include} macro do not render correctly 
... the footnote numbers and anchors reset back to 1 for each included page. 
Perhaps there's a way to fix that with the template?</p></div></div><h1 
id="ConfluenceSiteSetup-Updatingthetemplate">Updating the template</h1><p>You 
must be a Tapestry commi
 tter or otherwise have write access to the subversion repository (see link 
above).</p><p>To edit the template:</p><ol><li>check out the SiteExporter 
source project (see link above)</li><li>find and edit the template.vm 
file</li><li>commit your changes</li></ol></div>
       </div>
 
       <div class="clearer"></div>

Modified: 
websites/production/tapestry/content/creating-the-skeleton-application.html
==============================================================================
--- websites/production/tapestry/content/creating-the-skeleton-application.html 
(original)
+++ websites/production/tapestry/content/creating-the-skeleton-application.html 
Wed Sep 20 12:29:16 2017
@@ -27,6 +27,14 @@
       </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/shBrushXml.js' 
type='text/javascript'></script>
+        <script>
+      SyntaxHighlighter.defaults['toolbar'] = false;
+      SyntaxHighlighter.all();
+    </script>
   
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -67,7 +75,8 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>First, let's create an empty 
application. Tapestry provides a Maven <strong>archetype</strong> (a project 
template) to make this easy.</p><p>For the tutorial, we're using a fresh 
install of Eclipse and an empty workspace at 
<code>/users/joeuser/workspace</code>. You may need to adjust a few things for 
other operating systems or local paths.</p><h2 
id="CreatingTheSkeletonApplication-UsingtheQuickstartArchetype">Using the 
Quickstart Archetype</h2><p>From Eclipse, we'll use a Maven archetype to create 
a skeleton Tapestry project.</p><h3 
id="CreatingTheSkeletonApplication-MavenBehindaFirewall">Maven Behind a 
Firewall</h3><p>If you are behind a firewall/proxy, before performing any Maven 
downloads, you may need to configure your proxy settings in your Maven 
settings.xml file (typically in the .m2 subdirectory of your home directory, 
~/.m2 or C:\users\joeuser\.m2). Here is an example (but check with your network 
administrator for the names an
 d numbers you should use here).</p><parameter 
ac:name="language">xml</parameter><parameter 
ac:name="title">settings.xml</parameter><plain-text-body>&lt;settings&gt;
+                <div id="ConfluenceContent"><p>First, let's create an empty 
application. Tapestry provides a Maven <strong>archetype</strong> (a project 
template) to make this easy.</p><p>For the tutorial, we're using a fresh 
install of Eclipse and an empty workspace at 
<code>/users/joeuser/workspace</code>. You may need to adjust a few things for 
other operating systems or local paths.</p><h2 
id="CreatingTheSkeletonApplication-UsingtheQuickstartArchetype">Using the 
Quickstart Archetype</h2><p>From Eclipse, we'll use a Maven archetype to create 
a skeleton Tapestry project.</p><h3 
id="CreatingTheSkeletonApplication-MavenBehindaFirewall">Maven Behind a 
Firewall</h3><p>If you are behind a firewall/proxy, before performing any Maven 
downloads, you may need to configure your proxy settings in your Maven 
settings.xml file (typically in the .m2 subdirectory of your home directory, 
~/.m2 or C:\users\joeuser\.m2). Here is an example (but check with your network 
administrator for the names an
 d numbers you should use here).</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>settings.xml</b></div><div 
class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;settings&gt;
   &lt;proxies&gt;
     &lt;proxy&gt;
       &lt;active&gt;true&lt;/active&gt;
@@ -81,7 +90,11 @@
   &lt;/proxies&gt;
   
&lt;localRepository&gt;C:/Users/joeuser/.m2/repository&lt;/localRepository&gt;
 &lt;/settings&gt;
-</plain-text-body><p>Of course, adjust the <code>localRepository</code> 
element to match the correct path for your computer.</p><h3 
id="CreatingTheSkeletonApplication-CreateProject">Create Project</h3><p>Okay, 
let's get started creating our new project.</p><p>In Eclipse, go to 
<strong>File &gt; New &gt;</strong> <strong>Project... &gt; Maven &gt; Maven 
Project</strong></p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/select-a-wizard.png"></span></p><p>Then
 click <strong>Next</strong>, <strong>Next</strong> (again), and then on the 
<strong>Select an Archetype</strong> page click the <strong>Configure</strong> 
button on the Catalog line. The <strong>Archetype</strong> preferences dialog 
should appear. Click the <strong>Add Remote Catalog...</strong> button, as 
shown below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="creating-the-skeleton-applicati
 on.data/add-archetype-catalog.png"></span></p><p>As shown above, enter <span 
class="nolink"><span class="nolink">"http://tapestry.apache.org";</span></span> 
in the Catalog File field, and "Apache Tapestry" in the Description 
field.</p><rich-text-body><p>If you want to try an unreleased (alpha or beta) 
version of Tapestry, use <span class="nolink">the 
<strong>https://repository.apache.org/content/repositories/staging</strong></span>
 archetype catalog file instead.</p></rich-text-body><p>Click 
<strong>OK</strong>, then<strong> OK</strong> again.</p><p>On the Select an 
Archetype dialog (shown below), select the newly-added Apache Tapestry catalog, 
then select the "quickstart" artifact from the list and click 
<strong>Next</strong>.</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/select-archetype.png"></span></p><p><em><strong>Note:</strong>
 Screenshots in this tutorial may show different (either newer
  or older) versions of Tapestry than you may see.</em></p><p>Fill in the Group 
Id, Artifact Id, Version and Package&#160; as follows:</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/specify-archetype-parameters.png"></span></p><p>then
 click Finish.</p><rich-text-body><p>The first time you use Maven, project 
creation may take a while as Maven downloads a large number of JAR dependencies 
for Maven, Jetty and Tapestry. These downloaded files are cached locally and 
will not need to be downloaded again, but you do have to be patient on first 
use.</p></rich-text-body><p>After Maven finishes, you'll see a new directory, 
<code>tutorial1, in your Package Explorer view in Eclipse.</code></p><h2 
id="CreatingTheSkeletonApplication-RunningtheApplicationusingJetty">Running the 
Application using Jetty</h2><p>One of the first things you can do is use Maven 
to run Jetty directly.</p><p>Right-click on the <code>tu
 torial1</code> project in your Package Explorer view and select <strong>Run As 
&gt; Maven Build... &gt;</strong>, enter a Goal of 
<strong>"jetty:run"</strong>. This creates a "Run Configuration" named 
"tutorial1" that we'll use throughout this tutorial to start the 
app:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/run-configuration.png"></span></p><p>Tapestry
 runs best with a couple of additional options; click the "JRE" tab and enter 
the following VM 
Arguments:</p><rich-text-body><p>-XX:MaxPermSize=256M</p><p>-Xmx600m</p><p>-Dtapestry.execution-mode=development</p></rich-text-body><p><code><em>(If
 you're using JDK 1.8 then you should omit the MaxPermSize 
argument.)</em></code></p><p><code>Here's how it looks:<br 
clear="none"></code></p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/run-configuration-jre.png"
 ></span></p><p>Finally, click <strong>Run</strong>.</p><p>Again, the first 
 >time, there's a dizzying number of downloads, but before you know it, the 
 >Jetty servlet container is up and running.</p><p>Once Jetty is initialized 
 >(which only takes a few seconds after the first time), you'll see the 
 >following in your console:</p><p><span 
 >class="confluence-embedded-file-wrapper"><img 
 >class="confluence-embedded-image" 
 >src="creating-the-skeleton-application.data/console-startup.png"></span></p><p><em>Note
 > the red square icon above. Later on you'll use that icon to stop Jetty 
 >before restarting the app.</em></p><p>You can now open a web browser to <a  
 >class="external-link" href="http://localhost:8080/tutorial1/"; 
 >rel="nofollow">http://localhost:8080/tutorial1/</a> to see the running 
 >application:</p><p>&#160;</p><p><span class="confluence-embedded-file-wrapper 
 >image-left-wrapper"><img class="confluence-embedded-image 
 >confluence-content-image-border image-left" 
 >src="creating-the-skeleton-applicati
 on.data/startpage.png"></span></p><p>&#160;</p><parameter 
ac:name="atlassian-macro-output-type">BLOCK</parameter><plain-text-body>&lt;div 
style="clear: both"&gt;&lt;/div&gt;</plain-text-body><p style="text-align: 
left;"><strong><em>NOTE: Your screen may look very different depending on the 
version of Tapestry you are using!</em></strong></p><p style="text-align: 
left;">The date and time in the middle of the page shows that this is a live 
application.</p><p>This is a complete little web app; it doesn't do much, but 
it demonstrate how to create a number of pages sharing a common layout, and 
demonstrates some simple navigation and link handling. You can see that it has 
several different pages that share a common layout. (<span style="line-height: 
1.4285715;"><em>Layout</em> is a loose term meaning common look and feel and 
navigation across many or all of the pages of an application. Often an 
application will include a Layout component to provide that 
commonness.)</span></p><p><span sty
 le="line-height: 1.4285715;">Next: <a  
href="exploring-the-project.html">Exploring the Project</a></span></p><p><span 
style="line-height: 1.4285715;"><br clear="none"></span></p></div>
+</pre>
+</div></div><p>Of course, adjust the <code>localRepository</code> element to 
match the correct path for your computer.</p><h3 
id="CreatingTheSkeletonApplication-CreateProject">Create Project</h3><p>Okay, 
let's get started creating our new project.</p><p>In Eclipse, go to 
<strong>File &gt; New &gt;</strong> <strong>Project... &gt; Maven &gt; Maven 
Project</strong></p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/select-a-wizard.png"></span></p><p>Then
 click <strong>Next</strong>, <strong>Next</strong> (again), and then on the 
<strong>Select an Archetype</strong> page click the <strong>Configure</strong> 
button on the Catalog line. The <strong>Archetype</strong> preferences dialog 
should appear. Click the <strong>Add Remote Catalog...</strong> button, as 
shown below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="creating-the-skeleton-application.dat
 a/add-archetype-catalog.png"></span></p><p>As shown above, enter <span 
class="nolink"><span class="nolink">"http://tapestry.apache.org";</span></span> 
in the Catalog File field, and "Apache Tapestry" in the Description 
field.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>If you want to try an unreleased 
(alpha or beta) version of Tapestry, use <span class="nolink">the 
<strong>https://repository.apache.org/content/repositories/staging</strong></span>
 archetype catalog file instead.</p></div></div><p>Click <strong>OK</strong>, 
then<strong> OK</strong> again.</p><p>On the Select an Archetype dialog (shown 
below), select the newly-added Apache Tapestry catalog, then select the 
"quickstart" artifact from the list and click 
<strong>Next</strong>.</p><p><span 
class="confluence-embedded-file-wrapper"><img cl
 ass="confluence-embedded-image" 
src="creating-the-skeleton-application.data/select-archetype.png"></span></p><p><em><strong>Note:</strong>
 Screenshots in this tutorial may show different (either newer or older) 
versions of Tapestry than you may see.</em></p><p>Fill in the Group Id, 
Artifact Id, Version and Package&#160; as follows:</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/specify-archetype-parameters.png"></span></p><p>then
 click Finish.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>The first time you use Maven, 
project creation may take a while as Maven downloads a large number of JAR 
dependencies for Maven, Jetty and Tapestry. These downloaded files are cached 
locally and will not need to be downloaded a
 gain, but you do have to be patient on first use.</p></div></div><p>After 
Maven finishes, you'll see a new directory, <code>tutorial1, in your Package 
Explorer view in Eclipse.</code></p><h2 
id="CreatingTheSkeletonApplication-RunningtheApplicationusingJetty">Running the 
Application using Jetty</h2><p>One of the first things you can do is use Maven 
to run Jetty directly.</p><p>Right-click on the <code>tutorial1</code> project 
in your Package Explorer view and select <strong>Run As &gt; Maven Build... 
&gt;</strong>, enter a Goal of <strong>"jetty:run"</strong>. This creates a 
"Run Configuration" named "tutorial1" that we'll use throughout this tutorial 
to start the app:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/run-configuration.png"></span></p><p>Tapestry
 runs best with a couple of additional options; click the "JRE" tab and enter 
the following VM Arguments:</p><pre></pre><p>-XX:MaxPermSize=
 256M</p><p>-Xmx600m</p><p>-Dtapestry.execution-mode=development</p>
+
+
+<p><code><em>(If you're using JDK 1.8 then you should omit the MaxPermSize 
argument.)</em></code></p><p><code>Here's how it looks:<br 
clear="none"></code></p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/run-configuration-jre.png"></span></p><p>Finally,
 click <strong>Run</strong>.</p><p>Again, the first time, there's a dizzying 
number of downloads, but before you know it, the Jetty servlet container is up 
and running.</p><p>Once Jetty is initialized (which only takes a few seconds 
after the first time), you'll see the following in your console:</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="creating-the-skeleton-application.data/console-startup.png"></span></p><p><em>Note
 the red square icon above. Later on you'll use that icon to stop Jetty before 
restarting the app.</em></p><p>You can now open a web browser to <a  
class="external-link" href="http
 ://localhost:8080/tutorial1/" 
rel="nofollow">http://localhost:8080/tutorial1/</a> to see the running 
application:</p><p>&#160;</p><p><span class="confluence-embedded-file-wrapper 
image-left-wrapper"><img class="confluence-embedded-image 
confluence-content-image-border image-left" 
src="creating-the-skeleton-application.data/startpage.png"></span></p><p>&#160;</p><div
 style="clear: both"></div><p style="text-align: left;"><strong><em>NOTE: Your 
screen may look very different depending on the version of Tapestry you are 
using!</em></strong></p><p style="text-align: left;">The date and time in the 
middle of the page shows that this is a live application.</p><p>This is a 
complete little web app; it doesn't do much, but it demonstrate how to create a 
number of pages sharing a common layout, and demonstrates some simple 
navigation and link handling. You can see that it has several different pages 
that share a common layout. (<span style="line-height: 
1.4285715;"><em>Layout</em> is a loose 
 term meaning common look and feel and navigation across many or all of the 
pages of an application. Often an application will include a Layout component 
to provide that commonness.)</span></p><p><span style="line-height: 
1.4285715;">Next: <a  href="exploring-the-project.html">Exploring the 
Project</a></span></p><p><span style="line-height: 1.4285715;"><br 
clear="none"></span></p></div>
       </div>
 
       <div class="clearer"></div>


Reply via email to