Modified: websites/production/tapestry/content/hibernate-core-conf.html
==============================================================================
--- websites/production/tapestry/content/hibernate-core-conf.html (original)
+++ websites/production/tapestry/content/hibernate-core-conf.html Sat Feb  3 
17:21:22 2018
@@ -44,13 +44,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Hibernate - Core - Conf</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">Hibernate - Core - Conf</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -62,59 +75,95 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p><strong>Hibernate 
Configuration</strong> is handled by the Tapestry Hibernate Core module. This 
is done in a just-in-time manner, the first time a Hibernate Session is 
required.</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="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</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="hibernate-support-faq.html">Hibernate Support FAQ</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="hibernate.html">Hibernate</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="hibernate-user-guide.html">Hibernate User Guide</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="hibernate-statistics.html">Hibernate Statistics</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="hibernate-core-conf.html">Hibernate - Core - Conf</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="hibernate-core.html">Hibernate - Core</a> 
-  </div> </li></ul></div><h2 
id="Hibernate-Core-Conf-HibernateSessionSourceConfiguration">HibernateSessionSource
 Configuration</h2><p>One way to configure hibernate is to create a 
<code>hibernate.cfg.xml</code> file and place it in the root of your 
application (i.e., under src/main/resources). Most Hibernate-specific 
configuration occurs in this file. Another way is to contribute objects that 
perform configuration (such as setting event listeners). Example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+                <div id="ConfluenceContent"><p><strong>Hibernate 
Configuration</strong> is handled by the Tapestry Hibernate Core module. This 
is done in a just-in-time manner, the first time a Hibernate Session is 
required.</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="using-tapestry-with-hibernate.html">Using 
Tapestry With Hibernate</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="hibernate-support-faq.html">Hibernate 
Support FAQ</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="hibernate.html">Hibernate</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="hibernate-statistics.html">Hibernate 
Statistics</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="hibernate-user-guide.html">Hibernate User 
Guide</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="hibernate-core-conf.html">Hibernate - Core - 
Conf</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="hibernate-core.html">Hibernate - Core</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<h2 
id="Hibernate-Core-Conf-HibernateSessionSourceConfiguration">HibernateSessionSource
 Configuration</h2><p>One way to configure hibernate is to create a 
<code>hibernate.cfg.xml</code> file and place it in the root of your 
application (i.e., under src/main/resources). Most Hibernate-specific 
configuration occurs in this file. Another way is to contribute objects that 
perform configuration (such as setting event listeners). Example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public static void 
contributeHibernateSessionSource(OrderedConfiguration&lt;HibernateConfigurer&gt;
 config)
 {
   config.add("Widget", new WidgetHibernateConfigurer());
 }</pre>
-</div></div><p>Note that the configuration is an OrderedConfiguration. The 
library contributes two configurers by 
default:</p><ul><li><strong>Default</strong> - performs default hibernate 
configuration</li><li><strong>PackageName</strong> - loads entities by package 
name as contributed to the HibernateEntityPackageManager service</li></ul><h2 
id="Hibernate-Core-Conf-HibernateEntityPackageManagerConfiguration">HibernateEntityPackageManager
 Configuration</h2><p>This configuration is a set of package names, identifying 
where to search for entity classes.</p><p>For each package contributed, the 
library will:</p><ul><li><a  class="external-link" 
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addPackage(java.lang.String)"
 rel="nofollow">Add the package to the configuration</a>, which will load 
annotations from the package-info class within the named package, if 
present.</li><li>Every Java class in the package (or any subpackage) will b
 e <a  class="external-link" 
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addAnnotatedClass(java.lang.Class)"
 rel="nofollow">added as an annotated class</a>. This excludes inner classes, 
but includes all other classes.</li></ul><p>By default, the package 
<em>application-root-package.entities</em> is scanned as described above. If 
you have additional packages containing entities, you must <a  
href="configuration.html">contribute</a> them to the 
tapestry.hibernate.HibernateEntityPackageManager service 
configuration.</p><p>Example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Note that the configuration is an OrderedConfiguration. The 
library contributes two configurers by 
default:</p><ul><li><strong>Default</strong> - performs default hibernate 
configuration</li><li><strong>PackageName</strong> - loads entities by package 
name as contributed to the HibernateEntityPackageManager service</li></ul><h2 
id="Hibernate-Core-Conf-HibernateEntityPackageManagerConfiguration">HibernateEntityPackageManager
 Configuration</h2><p>This configuration is a set of package names, identifying 
where to search for entity classes.</p><p>For each package contributed, the 
library will:</p><ul><li><a  class="external-link" 
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addPackage(java.lang.String)"
 rel="nofollow">Add the package to the configuration</a>, which will load 
annotations from the package-info class within the named package, if 
present.</li><li>Every Java class in the package (or any subpackage) will b
 e <a  class="external-link" 
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addAnnotatedClass(java.lang.Class)"
 rel="nofollow">added as an annotated class</a>. This excludes inner classes, 
but includes all other classes.</li></ul><p>By default, the package 
<em>application-root-package.entities</em> is scanned as described above. If 
you have additional packages containing entities, you must <a  
href="hibernate-core-conf.html">contribute</a> them to the 
tapestry.hibernate.HibernateEntityPackageManager service 
configuration.</p><p>Example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public static void 
contributeHibernateEntityPackageManager(Configuration&lt;String&gt; 
configuration)
 {
   configuration.add("org.example.myapp.domain");
 }</pre>
-</div></div><p>You may add as many packages in this manner as you wish. This 
option is most often used when the entities themselves are contained in a 
library included within an application, rather than part of the application 
directly.</p><h1 id="Hibernate-Core-Conf-HibernateSymbols">Hibernate 
Symbols</h1><p>The Hibernate integration includes a number of <a  
href="symbols.html">symbols</a> used to control certain features:</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p>tapestry.hibernate.provide-entity-value-encoders</p></td><td
 colspan="1" rowspan="1" class="confluenceTd"><p>If true (the default) then 
ValueEncoders are automatically provided for all Hibernate entities 
(ValueEncoders are used to encode the primary keys of entities as strings that 
can be included in URLs). Set to false if you want direct control over this 
feature.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>tapestry.hi
 bernate.default-configuration</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>If true (the default), then the application must 
include a <code>hibernate.cfg.xml</code> file. If your application configures 
itself entirely in code, you should set this symbol to 
false.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>tapestry.hibernate.early-startup</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>If "true", the Hibernate is 
initialized when the application starts up. The default is "false", to start 
Hibernate up lazily, on first use.</p></td></tr></tbody></table></div></div>
+</div></div><p>You may add as many packages in this manner as you wish. This 
option is most often used when the entities themselves are contained in a 
library included within an application, rather than part of the application 
directly.</p><h1 id="Hibernate-Core-Conf-HibernateSymbols">Hibernate 
Symbols</h1><p>The Hibernate integration includes a number of <a  
href="hibernate-core-conf.html">symbols</a> used to control certain 
features:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>tapestry.hibernate.provide-entity-value-encoders</p></td><td
 colspan="1" rowspan="1" class="confluenceTd"><p>If true (the default) then 
ValueEncoders are automatically provided for all Hibernate entities 
(ValueEncoders are used to encode the primary keys of entities as strings that 
can be included in URLs). Set to false if you want direct control over this 
feature.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p
 >tapestry.hibernate.default-configuration</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>If true (the default), then the application must 
 >include a <code>hibernate.cfg.xml</code> file. If your application configures 
 >itself entirely in code, you should set this symbol to 
 >false.</p></td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>tapestry.hibernate.early-startup</p></td><td 
 >colspan="1" rowspan="1" class="confluenceTd"><p>If "true", the Hibernate is 
 >initialized when the application starts up. The default is "false", to start 
 >Hibernate up lazily, on first use.</p></td></tr></tbody></table></div></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/hibernate-core.html
==============================================================================
--- websites/production/tapestry/content/hibernate-core.html (original)
+++ websites/production/tapestry/content/hibernate-core.html Sat Feb  3 
17:21:22 2018
@@ -36,13 +36,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Hibernate - Core</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">Hibernate - Core</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -54,49 +67,85 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p><strong>Hibernate-Core 
</strong>is a Tapestry module that provides basic Hibernate support without 
dependencies on the Tapestry-core (the web framework part of Tapestry).</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="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</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="hibernate-support-faq.html">Hibernate Support FAQ</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="hibernate.html">Hibernate</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="hibernate-user-guide.html">Hibernate User Guide</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="hibernate-statistics.html">Hibernate Statistics</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="hibernate-core-conf.html">Hibernate - Core - Conf</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="hibernate-core.html">Hibernate - Core</a> 
-  </div> </li></ul></div><p>This module only requires the <a  
href="ioc.html">Tapestry IoC</a> module. This makes it useful in non-web 
applications, such as back-end processing.</p><p>The <a  
href="hibernate.html">Tapestry-hibernate</a> module extends this further, 
adding features to support the creation of CRUD (Create/Read/Update/Delete) 
database applications in Tapestry.</p><h1 
id="Hibernate-Core-LicensingIssues">Licensing Issues</h1><p>Hibernate is 
licensed under the Lesser GNU Public License. This is more restrictive license 
than the Apache Software License used by the rest of Tapestry. The restrictions 
mostly apply to redistributing Hibernate, especially in any altered form, and 
will likely be irrelvant to the vast majority of users, but you should be 
aware.</p><p>This library is compiled against version <strong>3.3.1.GA</strong> 
of Hibernate (and version 3.4.0.GA of hibernate-annotations), but should work 
with more recent versions.</p></div>
+                <div id="ConfluenceContent"><p><strong>Hibernate-Core 
</strong>is a Tapestry module that provides basic Hibernate support without 
dependencies on the Tapestry-core (the web framework part of Tapestry).</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="using-tapestry-with-hibernate.html">Using 
Tapestry With Hibernate</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="hibernate-support-faq.html">Hibernate 
Support FAQ</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="hibernate.html">Hibernate</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="hibernate-statistics.html">Hibernate 
Statistics</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="hibernate-user-guide.html">Hibernate User 
Guide</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="hibernate-core-conf.html">Hibernate - Core - 
Conf</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="hibernate-core.html">Hibernate - Core</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<p>This module only requires the <a  href="hibernate-core.html">Tapestry 
IoC</a> module. This makes it useful in non-web applications, such as back-end 
processing.</p><p>The <a  href="hibernate-core.html">Tapestry-hibernate</a> 
module extends this further, adding features to support the creation of CRUD 
(Create/Read/Update/Delete) database applications in Tapestry.</p><h1 
id="Hibernate-Core-LicensingIssues">Licensing Issues</h1><p>Hibernate is 
licensed under the Lesser GNU Public License. This is more restrictive license 
than the Apache Software License used by the rest of Tapestry. The restrictions 
mostly apply to redistributing Hibernate, especially in any altered form, and 
will likely be irrelvant to the vast majority of users, but you should be 
aware.</p><p>This library is compiled against version <strong>3.3.1.GA</strong> 
of Hibernate (and version 3.4.0.GA of hibernate-annotations), but should work 
with more recent versions.</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/hibernate.html
==============================================================================
--- websites/production/tapestry/content/hibernate.html (original)
+++ websites/production/tapestry/content/hibernate.html Sat Feb  3 17:21:22 2018
@@ -36,13 +36,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" 
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; 
font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Hibernate</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">Hibernate</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -54,49 +67,85 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>The <strong>Tapestry-hibernate 
</strong>module provides out-of-the-box support for using Hibernate 3 as the 
back end for normal CRUD style Tapestry applications.</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="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</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="hibernate-support-faq.html">Hibernate Support FAQ</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="hibernate.html">Hibernate</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="hibernate-user-guide.html">Hibernate User Guide</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="hibernate-statistics.html">Hibernate Statistics</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="hibernate-core-conf.html">Hibernate - Core - Conf</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="hibernate-core.html">Hibernate - Core</a> 
-  </div> </li></ul></div><p>This represents access to the native Hibernate 
interfaces, exposed in a thread-safe manner, within a 
<em>session-per-request</em> strategy.</p><p>Note that a number of the more 
esoteric ideas in Hibernate are not supported, including nested transactions 
and supporting multiple persistence units.</p><p>The <a  
href="hibernate-core.html">tapestry-hibernate-core</a> module allows non-web 
applications to access Hibernate.</p><h1 
id="Hibernate-LicensingIssues">Licensing Issues</h1><p>Hibernate is licensed 
under the Lesser GNU Public License. This is more restrictive license than the 
Apache Software License used by the rest of Tapestry. The restrictions mostly 
apply to redistributing Hibernate, especially in any altered form, and will 
likely be irrelevant to the vast majority of users, but you should be 
aware.</p><p>This library is compiled against version <strong>3.3.1.GA</strong> 
of Hibernate (and version 3.4.0.GA of hibernate-annotations), but should work wi
 th more recent versions.</p><h2 
id="Hibernate-Notes">Notes</h2><ul><li>Transactions are <em>aborted</em> (not 
<em>committed</em>) at the end of each request: you must explicitly commit the 
transaction if changes are to be saved.</li><li>The CommitAfter annotation for 
component and service methods can commit the transaction automatically after 
the method is invoked.</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/hibernate/HibernateGridDataSource.html";>HibernateGridDataSource</a>
 can be used with the Grid component to support optimized queries against large 
data sets.</li></ul></div>
+                <div id="ConfluenceContent"><p>The <strong>Tapestry-hibernate 
</strong>module provides out-of-the-box support for using Hibernate 3 as the 
back end for normal CRUD style Tapestry applications.</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="using-tapestry-with-hibernate.html">Using 
Tapestry With Hibernate</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="hibernate-support-faq.html">Hibernate 
Support FAQ</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="hibernate.html">Hibernate</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="hibernate-statistics.html">Hibernate 
Statistics</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="hibernate-user-guide.html">Hibernate User 
Guide</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="hibernate-core-conf.html">Hibernate - Core - 
Conf</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="hibernate-core.html">Hibernate - Core</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<p>This represents access to the native Hibernate interfaces, exposed in a 
thread-safe manner, within a <em>session-per-request</em> strategy.</p><p>Note 
that a number of the more esoteric ideas in Hibernate are not supported, 
including nested transactions and supporting multiple persistence 
units.</p><p>The <a  href="hibernate.html">tapestry-hibernate-core</a> module 
allows non-web applications to access Hibernate.</p><h1 
id="Hibernate-LicensingIssues">Licensing Issues</h1><p>Hibernate is licensed 
under the Lesser GNU Public License. This is more restrictive license than the 
Apache Software License used by the rest of Tapestry. The restrictions mostly 
apply to redistributing Hibernate, especially in any altered form, and will 
likely be irrelevant to the vast majority of users, but you should be 
aware.</p><p>This library is compiled against version <strong>3.3.1.GA</strong> 
of Hibernate (and version 3.4.0.GA of hibernate-annotations), but should work 
with more recent versions.</p><h
 2 id="Hibernate-Notes">Notes</h2><ul><li>Transactions are <em>aborted</em> 
(not <em>committed</em>) at the end of each request: you must explicitly commit 
the transaction if changes are to be saved.</li><li>The CommitAfter annotation 
for component and service methods can commit the transaction automatically 
after the method is invoked.</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/hibernate/HibernateGridDataSource.html";>HibernateGridDataSource</a>
 can be used with the Grid component to support optimized queries against large 
data sets.</li></ul></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 Feb  3 
17:21:22 2018
@@ -117,7 +117,7 @@
 </div>
 
 
-<p>Despite this, injection generally <em>Just Works</em>: most of the time, 
you want Tapestry to inject a service, and only a single service implements the 
service interface.</p><p>This document discusses what to do when you hit a case 
that doesn't Just Work, or when you want to extend the injection logic in some 
way.</p><p>Some aspects of this discussion reflect Tapestry IoC used within a 
Tapestry web application: the tapestry-core module makes some extensions to 
injection.</p><h1 id="InjectioninDetail-InjectionTriggers">Injection 
Triggers</h1><p>Injection is triggered in a number of ways:</p><ul><li>A field 
in a component class, autobuilt object, or service implementation class is 
annotated with @Inject.</li><li>A method parameter to a service builder method, 
a decorator method, or a contribute method (in a Tapestry IoC module 
class).</li><li>A constructor parameter to an autobuilt object, or a service 
implementation class.</li><li>Any of the above with an @InjectService annotatio
 n.</li></ul><p>These define the&#160;<em>point of 
injection</em>.</p><p>Injection also covers a related matter: providing special 
resources to a service or component (remember that pages are specialized 
components). For a service, the service's id (as a string) or extensible 
configuration (as a Collection, List or Map) may be provided. For a component, 
the component's id, locale, message catalog, or component resources may be 
provided.</p><h1 id="InjectioninDetail-StandardInjectionProcessing">Standard 
Injection Processing</h1><p>This section describes standard injection, which 
applies at the IoC layer: autobuilt objects and service implementations. The 
steps for injection into Tapestry components are slightly different and are 
covered later.</p><p>So a the point of injection, Tapestry has identified a 
field or parameter that should be injected. At this point, Tapestry knows the 
following:</p><ul><li>The field name (if field injection). The parameter name 
is not available.</li><li>Th
 e field or parameter type, as a Java class. In many cases, this will be enough 
to identify what object shall be injected.</li><li>Any additional annotations 
on the field or parameter.</li></ul><p>Tapestry proceeds with this 
information.</p><h2 id="InjectioninDetail-Checkfor@InjectService">Check for 
@InjectService</h2><p>Tapestry checks first for the @InjectService annotation. 
The value of this annotation is the service id to inject. When @InjectService 
is present at the point of injection, the search is complete, though the 
injection can fail (throwing an exception) if the service id indicated does not 
exist, or if the service's interface is not compatible with the field's 
type.</p><h2 id="InjectioninDetail-Checkforserviceresources">Check for service 
resources</h2><p>This step applies only to IoC layer injection (not to 
injection into components).</p><p>When the @Inject annotation is <em>not 
present</em> at the point of injection, Tapestry checks to see if a resource 
can be injected
 . Services are global values, but resources are specific to the service under 
construction.</p><p>When the Inject annotation is present, this step is skipped 
(this is necessary when the object to be injected has a type that conflicts 
with a resource type, such as List or Class).</p><ul><li>org.slf4j.Logger 
&#8211; The Logger of the service being constructed (or the logger of the 
Module class being instantiated).</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectLocator.html";>ObjectLocator</a>
 &#8211; For contribute methods, used to locate additional objects.</li><li><a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ServiceResources.html";>ServiceResources</a>
 &#8211; For service builder methods, an extended version of 
ObjectLocator.&#160;</li><li>Class &#8211;&#160;The service interface 
type.</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apido
 cs/org/apache/tapestry5/ioc/OperationTracker.html">OperationTracker</a> 
&#8211; Used to track deeply nested operations so that errors can be reported 
sensibly.</li><li>Object, or service interface type &#8211; Passed to decorator 
methods.</li><li>Collection, List, Map &#8211; Assembled service configurations 
passed to service builder methods (or service class 
constructors).</li><li><p>Configuration, OrderedConfiguration, 
MappedConfiguration &#8211; Configuration passed to contribute methods, to 
build service configurations. <br clear="none" class="atl-forced-newline"> <br 
clear="none" class="atl-forced-newline"> If field type does not match any of 
the available resource types, or the Inject annotation is present, logic 
continues to the next step.</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>Injection 
 of resources into fields is triggered by the presence of the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectResource.html";>InjectResource</a>
 annotation, whereas injection of resources into parameters occurs when the 
Inject or InjectService annotation is <em>not</em> present. These rules are 
slightly tricky, which reflects a desire to avoid any annotations except when 
needed, and the fact that field injection came much later than parameter 
injection.</p></div></div></li></ul><h2 
id="InjectioninDetail-ServiceLookupbyTypeandAnnotations">Service Lookup by Type 
and Annotations</h2><p>Tapestry attempts to find a matching 
<em>service</em>.</p><p>First, it generates a set of services whose service 
interface is compatible with the injection type. This is based on 
assignability.</p><p>If the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Local.html";>Local<
 /a> annotation is present, then services not from the module containing the 
service being constructed will be eliminated.</p><p>Tapestry then works through 
the known marker annotations. For each marker annotation that is present at the 
point of injection, Tapestry eliminates services which <em>do not</em> have the 
marker. Thus, if multiple marker annotations are present, the final service 
must have <em>all of them</em>.</p><p>At the end, of this, Tapestry determines 
how many services match.</p><ul><li>If there is a single matching service, then 
the service to inject as been identified.</li><li>If there are no matches, and 
there were no marker annotations at the point of injection, then the Tapestry 
continues to the next step.</li><li>Otherwise there were either no matches, or 
too many matches: Tapestry will throw a RuntimeException.</li></ul><h2 
id="InjectioninDetail-MasterObjectProviderLookup">MasterObjectProvider 
Lookup</h2><p>This is the point at which Tapestry's extensibility co
 mes into play. MasterObjectProvider is a service, with a configuration of <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html";>ObjectProviders</a>.</p><p>The
 MasterObjectProvider is also the point at which Tapestry's IoC layer 
injection, and Tapestry's component injection, unite.</p><p>As a 
chain-of-command, each of the following ObjectProviders will be considered and 
will attempt to identify the object to be injected.</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>A common problem when extending 
injection is that contributions into the MasterObjectProvider configuration 
have to be handled carefully. Any dependencies of the contributed objects 
should be resolvable using only the early stages of the injection process, 
otherwise MasterObje
 ctProvider will have to be instantiated in order to handle its own injection: 
Tapestry will detect this impossibility and throw an exception. In addition, 
the <a  href="typecoercer-service.html">TypeCoercer</a> service is used by 
several ObjectProvider implementations, so the same restrictions apply to 
TypeCoercer service contributions.</p></div></div><h3 
id="InjectioninDetail-ValueObjectProvider">Value ObjectProvider</h3><p>Checks 
for the presence of the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html";>Value</a>
 annotation. If present, then the annotation's value is evaluated (to expand 
any symbol references), and the TypeCoercer service is used to convert the 
resulting String to the injection type (the field or parameter type).</p><h3 
id="InjectioninDetail-SymbolObjectProvider">Symbol 
ObjectProvider</h3><p>Similar to the Value ObjectProvider: the @<a  
class="external-link" href="http://tapestry.apache.org/
 current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html">Symbol</a> 
annotation's value (if present) is looked up using the <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolSource.html";>SymbolSource</a>
 service,&#160;and converted to the injection type via the TypeCoercer 
service.</p><h3 id="InjectioninDetail-AutobuildObjectProvider">Autobuild 
ObjectProvider</h3><p>Checks to see if the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Autobuild.html";>Autobuild</a>
 annotation is present and, if so, autobuilds the value for the parameter. Of 
course, the object being built will itself be configured via injection.</p><h3 
id="InjectioninDetail-ServiceOverrideObjectProvider">ServiceOverride 
ObjectProvider</h3><p>Checks any contributions to the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/Ser
 viceOverride.html">ServiceOverride</a> service. Contributions map a type to an 
object of that type. Thus, ServiceOverrides will override injections of 
services that are not qualified with a marker annotation.</p><h3 
id="InjectioninDetail-AliasObjectProvider(tapestry-core)">Alias ObjectProvider 
(tapestry-core)</h3><p>Uses the Alias service (<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/Alias.html";>API</a>)
 to look for an object that can be injected.</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>Deprecated in Tapestry 5.2 and 
removed in 5.4.</p></div></div><p>This is commonly used to override a built-in 
service by contributing an object with the exact same interface. This is an 
older and more complex version of the ServiceOverride provider.</p><h
 3 id="InjectioninDetail-AssetObjectProvider(tapestry-core)">Asset 
ObjectProvider (tapestry-core)</h3><p>Checks for the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Path.html";>Path</a>
 annotation.</p><p>If present, the annotation's value has embedded symbols 
expanded, and is converted into an Asset (which must exist).</p><p>The 
TypeCoercer can then convert the Asset to the injection type, for example, as 
Resource.</p><h3 
id="InjectioninDetail-ServiceObjectProvider(tapestry-core)">Service 
ObjectProvider (tapestry-core)</h3><p>Looks for the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Service.html";>Service</a>
 annotation; if present, the annotation's value is the exact service id to 
inject. This is necessary because injections into <em>component</em> fields are 
always triggered by the Inject annotation.</p><div 
class="confluence-information-macro confluence-in
 formation-macro-note"><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This is supported but no longer 
necessary, as the @InjectService annotation is now also supported for component 
fields.</p></div></div><h3 
id="InjectioninDetail-SpringBeanObjectProvider(tapestry-spring)">SpringBean 
ObjectProvider (tapestry-spring)</h3><p>Attempts to resolve a Spring bean 
purely by object type (Spring qualifiers are not supported). If no beans are 
assignable to the type, then processing continues. If exactly one is 
assignable, it is used as the injection value. If more than one bean is 
assignable, it is an error (and a list of matching beans names will be part of 
the thrown exception).</p><h2 id="InjectioninDetail-ServiceLookup">Service 
Lookup</h2><p>If none of the ObjectProviders can identify the value to inject, 
a last step occurs: lookup by service type. If exactly <em>one</em> service 
matches t
 he injection type, then that service is injected.</p><p>Otherwise, the lookup 
fails because either no services match, or more than one matches. An exception 
will be thrown with the details, including a list of matching services (if 
there is more than one match).</p><h1 
id="InjectioninDetail-Post-InjectionMethods">Post-Injection 
Methods</h1><p>Autobuilt objects (services and the like, but <em>not</em> 
components) may have post-injection methods.</p><p>Any public method may have 
the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/PostInjection.html";>PostInjection</a>
 annotation.</p><p>Such methods are invoked after constructor and/or field 
injection. Only <strong>public methods</strong> will be invoked. Any return 
value is ignored.</p><p>The method often takes no parameters; however if the 
method has parameters, these parameters are new points of 
injection.</p><p>Often this is used to perform additional setup, such as regist
 erring a service as a listener of events produced by another service:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+<p>Despite this, injection generally <em>Just Works</em>: most of the time, 
you want Tapestry to inject a service, and only a single service implements the 
service interface.</p><p>This document discusses what to do when you hit a case 
that doesn't Just Work, or when you want to extend the injection logic in some 
way.</p><p>Some aspects of this discussion reflect Tapestry IoC used within a 
Tapestry web application: the tapestry-core module makes some extensions to 
injection.</p><h1 id="InjectioninDetail-InjectionTriggers">Injection 
Triggers</h1><p>Injection is triggered in a number of ways:</p><ul><li>A field 
in a component class, autobuilt object, or service implementation class is 
annotated with @Inject.</li><li>A method parameter to a service builder method, 
a decorator method, or a contribute method (in a Tapestry IoC module 
class).</li><li>A constructor parameter to an autobuilt object, or a service 
implementation class.</li><li>Any of the above with an @InjectService annotatio
 n.</li></ul><p>These define the&#160;<em>point of 
injection</em>.</p><p>Injection also covers a related matter: providing special 
resources to a service or component (remember that pages are specialized 
components). For a service, the service's id (as a string) or extensible 
configuration (as a Collection, List or Map) may be provided. For a component, 
the component's id, locale, message catalog, or component resources may be 
provided.</p><h1 id="InjectioninDetail-StandardInjectionProcessing">Standard 
Injection Processing</h1><p>This section describes standard injection, which 
applies at the IoC layer: autobuilt objects and service implementations. The 
steps for injection into Tapestry components are slightly different and are 
covered later.</p><p>So a the point of injection, Tapestry has identified a 
field or parameter that should be injected. At this point, Tapestry knows the 
following:</p><ul><li>The field name (if field injection). The parameter name 
is not available.</li><li>Th
 e field or parameter type, as a Java class. In many cases, this will be enough 
to identify what object shall be injected.</li><li>Any additional annotations 
on the field or parameter.</li></ul><p>Tapestry proceeds with this 
information.</p><h2 id="InjectioninDetail-Checkfor@InjectService">Check for 
@InjectService</h2><p>Tapestry checks first for the @InjectService annotation. 
The value of this annotation is the service id to inject. When @InjectService 
is present at the point of injection, the search is complete, though the 
injection can fail (throwing an exception) if the service id indicated does not 
exist, or if the service's interface is not compatible with the field's 
type.</p><h2 id="InjectioninDetail-Checkforserviceresources">Check for service 
resources</h2><p>This step applies only to IoC layer injection (not to 
injection into components).</p><p>When the @Inject annotation is <em>not 
present</em> at the point of injection, Tapestry checks to see if a resource 
can be injected
 . Services are global values, but resources are specific to the service under 
construction.</p><p>When the Inject annotation is present, this step is skipped 
(this is necessary when the object to be injected has a type that conflicts 
with a resource type, such as List or Class).</p><ul><li>org.slf4j.Logger 
&#8211; The Logger of the service being constructed (or the logger of the 
Module class being instantiated).</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectLocator.html";>ObjectLocator</a>
 &#8211; For contribute methods, used to locate additional objects.</li><li><a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ServiceResources.html";>ServiceResources</a>
 &#8211; For service builder methods, an extended version of 
ObjectLocator.&#160;</li><li>Class &#8211;&#160;The service interface 
type.</li><li><a  class="external-link" 
href="http://tapestry.apache.org/current/apido
 cs/org/apache/tapestry5/ioc/OperationTracker.html">OperationTracker</a> 
&#8211; Used to track deeply nested operations so that errors can be reported 
sensibly.</li><li>Object, or service interface type &#8211; Passed to decorator 
methods.</li><li>Collection, List, Map &#8211; Assembled service configurations 
passed to service builder methods (or service class 
constructors).</li><li><p>Configuration, OrderedConfiguration, 
MappedConfiguration &#8211; Configuration passed to contribute methods, to 
build service configurations. <br clear="none" class="atl-forced-newline"> <br 
clear="none" class="atl-forced-newline"> If field type does not match any of 
the available resource types, or the Inject annotation is present, logic 
continues to the next step.</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>Injection 
 of resources into fields is triggered by the presence of the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectResource.html";>InjectResource</a>
 annotation, whereas injection of resources into parameters occurs when the 
Inject or InjectService annotation is <em>not</em> present. These rules are 
slightly tricky, which reflects a desire to avoid any annotations except when 
needed, and the fact that field injection came much later than parameter 
injection.</p></div></div></li></ul><h2 
id="InjectioninDetail-ServiceLookupbyTypeandAnnotations">Service Lookup by Type 
and Annotations</h2><p>Tapestry attempts to find a matching 
<em>service</em>.</p><p>First, it generates a set of services whose service 
interface is compatible with the injection type. This is based on 
assignability.</p><p>If the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Local.html";>Local<
 /a> annotation is present, then services not from the module containing the 
service being constructed will be eliminated.</p><p>Tapestry then works through 
the known marker annotations. For each marker annotation that is present at the 
point of injection, Tapestry eliminates services which <em>do not</em> have the 
marker. Thus, if multiple marker annotations are present, the final service 
must have <em>all of them</em>.</p><p>At the end, of this, Tapestry determines 
how many services match.</p><ul><li>If there is a single matching service, then 
the service to inject as been identified.</li><li>If there are no matches, and 
there were no marker annotations at the point of injection, then the Tapestry 
continues to the next step.</li><li>Otherwise there were either no matches, or 
too many matches: Tapestry will throw a RuntimeException.</li></ul><h2 
id="InjectioninDetail-MasterObjectProviderLookup">MasterObjectProvider 
Lookup</h2><p>This is the point at which Tapestry's extensibility co
 mes into play. MasterObjectProvider is a service, with a configuration of <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html";>ObjectProviders</a>.</p><p>The
 MasterObjectProvider is also the point at which Tapestry's IoC layer 
injection, and Tapestry's component injection, unite.</p><p>As a 
chain-of-command, each of the following ObjectProviders will be considered and 
will attempt to identify the object to be injected.</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>A common problem when extending 
injection is that contributions into the MasterObjectProvider configuration 
have to be handled carefully. Any dependencies of the contributed objects 
should be resolvable using only the early stages of the injection process, 
otherwise MasterObje
 ctProvider will have to be instantiated in order to handle its own injection: 
Tapestry will detect this impossibility and throw an exception. In addition, 
the <a  href="injection-in-detail.html">TypeCoercer</a> service is used by 
several ObjectProvider implementations, so the same restrictions apply to 
TypeCoercer service contributions.</p></div></div><h3 
id="InjectioninDetail-ValueObjectProvider">Value ObjectProvider</h3><p>Checks 
for the presence of the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html";>Value</a>
 annotation. If present, then the annotation's value is evaluated (to expand 
any symbol references), and the TypeCoercer service is used to convert the 
resulting String to the injection type (the field or parameter type).</p><h3 
id="InjectioninDetail-SymbolObjectProvider">Symbol 
ObjectProvider</h3><p>Similar to the Value ObjectProvider: the @<a  
class="external-link" href="http://tapestry.apache.org/
 current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html">Symbol</a> 
annotation's value (if present) is looked up using the <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/SymbolSource.html";>SymbolSource</a>
 service,&#160;and converted to the injection type via the TypeCoercer 
service.</p><h3 id="InjectioninDetail-AutobuildObjectProvider">Autobuild 
ObjectProvider</h3><p>Checks to see if the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Autobuild.html";>Autobuild</a>
 annotation is present and, if so, autobuilds the value for the parameter. Of 
course, the object being built will itself be configured via injection.</p><h3 
id="InjectioninDetail-ServiceOverrideObjectProvider">ServiceOverride 
ObjectProvider</h3><p>Checks any contributions to the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/Ser
 viceOverride.html">ServiceOverride</a> service. Contributions map a type to an 
object of that type. Thus, ServiceOverrides will override injections of 
services that are not qualified with a marker annotation.</p><h3 
id="InjectioninDetail-AliasObjectProvider(tapestry-core)">Alias ObjectProvider 
(tapestry-core)</h3><p>Uses the Alias service (<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/Alias.html";>API</a>)
 to look for an object that can be injected.</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>Deprecated in Tapestry 5.2 and 
removed in 5.4.</p></div></div><p>This is commonly used to override a built-in 
service by contributing an object with the exact same interface. This is an 
older and more complex version of the ServiceOverride provider.</p><h
 3 id="InjectioninDetail-AssetObjectProvider(tapestry-core)">Asset 
ObjectProvider (tapestry-core)</h3><p>Checks for the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Path.html";>Path</a>
 annotation.</p><p>If present, the annotation's value has embedded symbols 
expanded, and is converted into an Asset (which must exist).</p><p>The 
TypeCoercer can then convert the Asset to the injection type, for example, as 
Resource.</p><h3 
id="InjectioninDetail-ServiceObjectProvider(tapestry-core)">Service 
ObjectProvider (tapestry-core)</h3><p>Looks for the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Service.html";>Service</a>
 annotation; if present, the annotation's value is the exact service id to 
inject. This is necessary because injections into <em>component</em> fields are 
always triggered by the Inject annotation.</p><div 
class="confluence-information-macro confluence-in
 formation-macro-note"><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This is supported but no longer 
necessary, as the @InjectService annotation is now also supported for component 
fields.</p></div></div><h3 
id="InjectioninDetail-SpringBeanObjectProvider(tapestry-spring)">SpringBean 
ObjectProvider (tapestry-spring)</h3><p>Attempts to resolve a Spring bean 
purely by object type (Spring qualifiers are not supported). If no beans are 
assignable to the type, then processing continues. If exactly one is 
assignable, it is used as the injection value. If more than one bean is 
assignable, it is an error (and a list of matching beans names will be part of 
the thrown exception).</p><h2 id="InjectioninDetail-ServiceLookup">Service 
Lookup</h2><p>If none of the ObjectProviders can identify the value to inject, 
a last step occurs: lookup by service type. If exactly <em>one</em> service 
matches t
 he injection type, then that service is injected.</p><p>Otherwise, the lookup 
fails because either no services match, or more than one matches. An exception 
will be thrown with the details, including a list of matching services (if 
there is more than one match).</p><h1 
id="InjectioninDetail-Post-InjectionMethods">Post-Injection 
Methods</h1><p>Autobuilt objects (services and the like, but <em>not</em> 
components) may have post-injection methods.</p><p>Any public method may have 
the @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/PostInjection.html";>PostInjection</a>
 annotation.</p><p>Such methods are invoked after constructor and/or field 
injection. Only <strong>public methods</strong> will be invoked. Any return 
value is ignored.</p><p>The method often takes no parameters; however if the 
method has parameters, these parameters are new points of 
injection.</p><p>Often this is used to perform additional setup, such as regist
 erring a service as a listener of events produced by another 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;">public class MyServiceImpl implements MyService, 
UpdateListener
 {
   @PostInjection

Modified: websites/production/tapestry/content/integrating-with-jpa.html
==============================================================================
--- websites/production/tapestry/content/integrating-with-jpa.html (original)
+++ websites/production/tapestry/content/integrating-with-jpa.html Sat Feb  3 
17:21:22 2018
@@ -82,11 +82,11 @@
 </div></div>
 <div class="error"><span class="error">Unknown macro: {div}</span> 
 <p>&#160;</p></div><p>Tapestry provides a built-in integration with the Java 
Persistence API (JPA) through the <strong>Tapestry-jpa</strong> module. This 
module supersedes the 3rd-party <a  class="external-link" 
href="http://www.tynamo.org/tapestry-jpa+guide/"; rel="nofollow">Tynamo JPA 
module</a>.</p><p><strong>Contents</strong></p><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1491819660710 {padding: 0px;}
-div.rbtoc1491819660710 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1491819660710 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1517678443991 {padding: 0px;}
+div.rbtoc1517678443991 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1517678443991 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1491819660710">
+/*]]>*/</style></p><div class="toc-macro rbtoc1517678443991">
 <ul class="toc-indentation"><li><a  
href="#IntegratingwithJPA-Downloading">Downloading</a>
 <ul class="toc-indentation"><li><a  
href="#IntegratingwithJPA-SelectingaJPAImplementation">Selecting a JPA 
Implementation</a></li></ul>
 </li><li><a  href="#IntegratingwithJPA-ConfiguringJPA">Configuring JPA</a>
@@ -181,7 +181,7 @@ div.rbtoc1491819660710 li {margin-left:
       configuration.add("com.acme.model");
    }
 }</pre>
-</div></div><p>As you can see, you may add as many packages as you 
wish.</p><h2 id="IntegratingwithJPA-ConfigurationSettings">Configuration 
Settings</h2><p>Several aspects of Tapestry-jpa can be customized in your 
application module (usually AppModule.java), just like other Tapestry <a  
href="configuration.html">configuration symbols</a>.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Symbol</th><th colspan="1" rowspan="1" 
class="confluenceTh">Default</th><th colspan="1" rowspan="1" 
class="confluenceTh">Description</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS</td><td 
colspan="1" rowspan="1" class="confluenceTd">true</td><td colspan="1" 
rowspan="1" class="confluenceTd">Whether entity value encoders will be provided 
automatically. See <a  href="using-select-with-a-list.html">Using Select with a 
List</a>.</td></tr><tr><td colspan="1" rowspan="1" class="conflu
 enceTd">JpaSymbols.EARLY_START_UP</td><td colspan="1" rowspan="1" 
class="confluenceTd">true</td><td colspan="1" rowspan="1" 
class="confluenceTd"><span style="color: rgb(33,33,33);">Whether JPA will be 
started up at application launch, rather than lazily.</span></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED</td><td
 colspan="1" rowspan="1" class="confluenceTd">true</td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Whether the "entity" persistence strategy 
is used to store JPA entities as&#160;<code>Session State 
Objects</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.PERSISTENCE_DESCRIPTOR</td><td colspan="1" 
rowspan="1" class="confluenceTd">/META-INF/persistence.xml</td><td colspan="1" 
rowspan="1" class="confluenceTd"><span style="color: rgb(33,33,33);">The 
location of the persistence configuration file, located on the classpath 
</span></td></tr></tbody></table></di
 v><h1 id="IntegratingwithJPA-InjectingtheEntityManager">Injecting the 
EntityManager</h1><p>The created entity managers can be injected into page, 
component and other services.</p><h2 
id="IntegratingwithJPA-InjectingtheEntityManagerintopageandcomponentclasses">Injecting
 the EntityManager into page and component classes</h2><p>Depending on whether 
more than one persistence unit has been defined, the way to inject <a  
class="external-link" 
href="http://download.oracle.com/javaee/6/api/javax/persistence/EntityManager.html";
 rel="nofollow">EntityManager</a> varies slightly. Let&#8217;s start with a 
simple scenario, where only a single persistence unit is defined. In this case, 
an EntityManager can be injected using the @<a  class="external-link" 
href="http://download.oracle.com/javaee/6/api/javax/persistence/PersistenceContext.html";
 rel="nofollow">PersistenceContext</a> annotation.</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="bor
 der-bottom-width: 1px;"><b>CreateAddress.java</b></div><div class="codeContent 
panelContent pdl">
+</div></div><p>As you can see, you may add as many packages as you 
wish.</p><h2 id="IntegratingwithJPA-ConfigurationSettings">Configuration 
Settings</h2><p>Several aspects of Tapestry-jpa can be customized in your 
application module (usually AppModule.java), just like other Tapestry <a  
href="integrating-with-jpa.html">configuration symbols</a>.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Symbol</th><th colspan="1" rowspan="1" 
class="confluenceTh">Default</th><th colspan="1" rowspan="1" 
class="confluenceTh">Description</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS</td><td 
colspan="1" rowspan="1" class="confluenceTd">true</td><td colspan="1" 
rowspan="1" class="confluenceTd">Whether entity value encoders will be provided 
automatically. See <a  href="integrating-with-jpa.html">Using Select with a 
List</a>.</td></tr><tr><td colspan="1" rowspan="1" class="con
 fluenceTd">JpaSymbols.EARLY_START_UP</td><td colspan="1" rowspan="1" 
class="confluenceTd">true</td><td colspan="1" rowspan="1" 
class="confluenceTd"><span style="color: rgb(33,33,33);">Whether JPA will be 
started up at application launch, rather than lazily.</span></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED</td><td
 colspan="1" rowspan="1" class="confluenceTd">true</td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Whether the "entity" persistence strategy 
is used to store JPA entities as&#160;<code>Session State 
Objects</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JpaSymbols.PERSISTENCE_DESCRIPTOR</td><td colspan="1" 
rowspan="1" class="confluenceTd">/META-INF/persistence.xml</td><td colspan="1" 
rowspan="1" class="confluenceTd"><span style="color: rgb(33,33,33);">The 
location of the persistence configuration file, located on the classpath 
</span></td></tr></tbody></table><
 /div><h1 id="IntegratingwithJPA-InjectingtheEntityManager">Injecting the 
EntityManager</h1><p>The created entity managers can be injected into page, 
component and other services.</p><h2 
id="IntegratingwithJPA-InjectingtheEntityManagerintopageandcomponentclasses">Injecting
 the EntityManager into page and component classes</h2><p>Depending on whether 
more than one persistence unit has been defined, the way to inject <a  
class="external-link" 
href="http://download.oracle.com/javaee/6/api/javax/persistence/EntityManager.html";
 rel="nofollow">EntityManager</a> varies slightly. Let&#8217;s start with a 
simple scenario, where only a single persistence unit is defined. In this case, 
an EntityManager can be injected using the @<a  class="external-link" 
href="http://download.oracle.com/javaee/6/api/javax/persistence/PersistenceContext.html";
 rel="nofollow">PersistenceContext</a> annotation.</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="
 border-bottom-width: 1px;"><b>CreateAddress.java</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class CreateAddress {
 
    @PersistenceContext
@@ -250,7 +250,7 @@ div.rbtoc1491819660710 li {margin-left:
 
    ...
 }</pre>
-</div></div><h1 id="IntegratingwithJPA-ValueEncoders">Value 
Encoders</h1><p>The Tapestry-jpa module automatically provides <em>value 
encoders</em> to make it easy to work with entities (especially lists of 
entities) in your Tapestry pages and components. This is modeled on the similar 
functionality from the Tapestry-hibernate-core module. See the <a  
href="hibernate-user-guide.html">Hibernate User Guide</a> for all the 
details.</p><h1 id="IntegratingwithJPA-TransactionManagement">Transaction 
Management</h1><p>As you may already know from the Hibernate integration 
library, Tapestry automatically manages transactions for you. The JPA 
integration library defines the @CommitAfter annotation, which acts as the 
correspondent annotation from the Hibernate integration library. Let&#8217;s 
explore the <em>UserDao </em>interface to see the annotation in action.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><
 b>UserDao.java</b></div><div class="codeContent panelContent pdl">
+</div></div><h1 id="IntegratingwithJPA-ValueEncoders">Value 
Encoders</h1><p>The Tapestry-jpa module automatically provides <em>value 
encoders</em> to make it easy to work with entities (especially lists of 
entities) in your Tapestry pages and components. This is modeled on the similar 
functionality from the Tapestry-hibernate-core module. See the <a  
href="integrating-with-jpa.html">Integrating with JPA</a> for all the 
details.</p><h1 id="IntegratingwithJPA-TransactionManagement">Transaction 
Management</h1><p>As you may already know from the Hibernate integration 
library, Tapestry automatically manages transactions for you. The JPA 
integration library defines the @CommitAfter annotation, which acts as the 
correspondent annotation from the Hibernate integration library. Let&#8217;s 
explore the <em>UserDao </em>interface to see the annotation in action.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><
 b>UserDao.java</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public interface UserDao {
 
    @CommitAfter

Modified: 
websites/production/tapestry/content/integrating-with-spring-framework.html
==============================================================================
--- websites/production/tapestry/content/integrating-with-spring-framework.html 
(original)
+++ websites/production/tapestry/content/integrating-with-spring-framework.html 
Sat Feb  3 17:21:22 2018
@@ -109,12 +109,12 @@
 </div>
 
 
-<p>For integrating Spring Security into your application, see <a  
href="security.html">Security</a>.</p><p><strong>Contents</strong></p><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1491819649664 {padding: 0px;}
-div.rbtoc1491819649664 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1491819649664 li {margin-left: 0px;padding-left: 0px;}
+<p>For integrating Spring Security into your application, see <a  
href="integrating-with-spring-framework.html">Integrating with Spring 
Framework</a>.</p><p><strong>Contents</strong></p><p><style 
type="text/css">/*<![CDATA[*/
+div.rbtoc1517678441438 {padding: 0px;}
+div.rbtoc1517678441438 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1517678441438 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1491819649664">
+/*]]>*/</style></p><div class="toc-macro rbtoc1517678441438">
 <ul class="toc-indentation"><li>Related Articles</li></ul>
 <ul><li><a  href="#IntegratingwithSpringFramework-SpringVersion">Spring 
Version</a></li><li><a  href="#IntegratingwithSpringFramework-Usage">Usage</a>
 <ul class="toc-indentation"><li><a  
href="#IntegratingwithSpringFramework-Requireddependency">Required 
dependency</a></li><li><a  
href="#IntegratingwithSpringFramework-Updateyourweb.xmlfile">Update your 
web.xml file</a></li><li><a  
href="#IntegratingwithSpringFramework-AccessingtheSpringApplicationContext">Accessing
 the Spring Application Context</a></li><li><a  
href="#IntegratingwithSpringFramework-Injectingbeans">Injecting 
beans</a></li><li><a  
href="#IntegratingwithSpringFramework-InjectingTapestryservicesinSpringbeans">Injecting
 Tapestry services in Spring beans</a></li></ul>
@@ -145,7 +145,7 @@ div.rbtoc1491819649664 li {margin-left:
 </div></div><h3 id="IntegratingwithSpringFramework-Injectingbeans">Injecting 
beans</h3><p>Inside your component classes, you may use the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Inject.html";>Inject</a>
 annotation. Typically, just adding @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Inject.html";>Inject</a>
 to the field type is sufficient to identify the Spring bean to inject:</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;">  @Inject
   private UserDAO userDAO;</pre>
-</div></div><p>Searching for Spring beans is threaded into the <a  
href="injection.html">MasterObjectProvider service</a>. The Spring context 
becomes one more place that Tapestry searches when determining the injection 
for a injected field or method parameter.</p><h3 
id="IntegratingwithSpringFramework-InjectingTapestryservicesinSpringbeans">Injecting
 Tapestry services in Spring beans</h3>
+</div></div><p>Searching for Spring beans is threaded into the <a  
href="integrating-with-spring-framework.html">MasterObjectProvider service</a>. 
The Spring context becomes one more place that Tapestry searches when 
determining the injection for a injected field or method parameter.</p><h3 
id="IntegratingwithSpringFramework-InjectingTapestryservicesinSpringbeans">Injecting
 Tapestry services in Spring beans</h3>
 
 <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>
@@ -175,7 +175,7 @@ This is accomplished by a BeanFactoryPos
   &lt;bean id="myBean" class="org.example.MyBean"&gt;
     &lt;property name="productionMode" value="${tapestry.production-mode}"/&gt;
   &lt;/bean&gt;
-{code}</pre><h2 
id="IntegratingwithSpringFramework-ApplicationContextCustomizer">ApplicationContextCustomizer</h2><p>A
 chain-of-command service, <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/spring/ApplicationContextCustomizer.html";>ApplicationContextCustomizer</a>
 allows the application context, created by Tapestry, to be customized as it is 
created. You may contribute your own ApplicationContextCustomizer instances as 
needed.</p><h2 id="IntegratingwithSpringFramework-5.0CompatibilityMode">5.0 
Compatibility Mode</h2><p>In some circumstances, it is desirable to configure 
the Spring ApplicationContext externally. The context &lt;config-param&gt; 
"tapestry.use-external-spring-context" can be configured to "true". Tapestry 
will then use an existing ApplicationContext, provided by a Spring 
ContextLoaderListener. You will still be able to inject Spring beans into 
Tapestry components and services, and the ApplicationContext service will be
  visible ... but you will not be able to inject Tapestry IoC services into 
Spring beans.</p><p>This option provides compatibility with the tapestry-spring 
5.0, including exposing Spring beans as Tapestry IoC services (something that 
no longer occurs unless compatibility mode is enabled).</p><h2 
id="IntegratingwithSpringFramework-ChangesFrom5.0">Changes From 5.0</h2><p>The 
changes below represent an unfortunate backwards compatibility issue. If 
necessary, you can still use tapestry-spring version 5.0.18 with the rest of 
Tapestry.</p><ul class="alternate"><li>You may now use the @Inject or 
@InjectService annotations inside Spring beans; these will be resolved to 
Tapestry services or other objects available via the MasterObjectProvider. 
Please see the <a  href="injection-in-detail.html">detailed guide to 
Injection</a>.</li><li>The dependency on Spring is no longer scope "provider" 
and has changed to 2.5.6.</li><li>Spring Beans are no longer exposed as 
services, unless 5.0 compatibility
  mode is enabled.</li><li>You no longer create a 
ContextLoaderListener.</li></ul><h2 
id="IntegratingwithSpringFramework-Limitations">Limitations</h2><p>Non-singleton
 beans are not handled properly. Tapestry will request the beans from the 
application context in a manner unsuitable for their life cycle. For the 
moment, you should consider the non-singleton beans to be not injectable. 
Instead, inject the ApplicationContext service and obtain the non-singleton 
beans as needed.</p></div>
+{code}</pre><h2 
id="IntegratingwithSpringFramework-ApplicationContextCustomizer">ApplicationContextCustomizer</h2><p>A
 chain-of-command service, <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/spring/ApplicationContextCustomizer.html";>ApplicationContextCustomizer</a>
 allows the application context, created by Tapestry, to be customized as it is 
created. You may contribute your own ApplicationContextCustomizer instances as 
needed.</p><h2 id="IntegratingwithSpringFramework-5.0CompatibilityMode">5.0 
Compatibility Mode</h2><p>In some circumstances, it is desirable to configure 
the Spring ApplicationContext externally. The context &lt;config-param&gt; 
"tapestry.use-external-spring-context" can be configured to "true". Tapestry 
will then use an existing ApplicationContext, provided by a Spring 
ContextLoaderListener. You will still be able to inject Spring beans into 
Tapestry components and services, and the ApplicationContext service will be
  visible ... but you will not be able to inject Tapestry IoC services into 
Spring beans.</p><p>This option provides compatibility with the tapestry-spring 
5.0, including exposing Spring beans as Tapestry IoC services (something that 
no longer occurs unless compatibility mode is enabled).</p><h2 
id="IntegratingwithSpringFramework-ChangesFrom5.0">Changes From 5.0</h2><p>The 
changes below represent an unfortunate backwards compatibility issue. If 
necessary, you can still use tapestry-spring version 5.0.18 with the rest of 
Tapestry.</p><ul class="alternate"><li>You may now use the @Inject or 
@InjectService annotations inside Spring beans; these will be resolved to 
Tapestry services or other objects available via the MasterObjectProvider. 
Please see the <a  href="integrating-with-spring-framework.html">detailed guide 
to Injection</a>.</li><li>The dependency on Spring is no longer scope 
"provider" and has changed to 2.5.6.</li><li>Spring Beans are no longer exposed 
as services, unless 5.0
  compatibility mode is enabled.</li><li>You no longer create a 
ContextLoaderListener.</li></ul><h2 
id="IntegratingwithSpringFramework-Limitations">Limitations</h2><p>Non-singleton
 beans are not handled properly. Tapestry will request the beans from the 
application context in a manner unsuitable for their life cycle. For the 
moment, you should consider the non-singleton beans to be not injectable. 
Instead, inject the ApplicationContext service and obtain the non-singleton 
beans as needed.</p></div>
       </div>
 
       <div class="clearer"></div>


Reply via email to