Modified: deltaspike/site/trunk/content/documentation/index.html
URL: 
http://svn.apache.org/viewvc/deltaspike/site/trunk/content/documentation/index.html?rev=1755397&r1=1755396&r2=1755397&view=diff
==============================================================================
--- deltaspike/site/trunk/content/documentation/index.html (original)
+++ deltaspike/site/trunk/content/documentation/index.html Sat Aug  6 13:46:15 
2016
@@ -1,327 +1,327 @@
-<!DOCTYPE html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="deltaspike-generate-pages">
-    <meta name="author" content="chm">
-    <!-- No caching headers -->
-    <meta http-equiv="cache-control" content="no-cache"/>
-    <meta http-equiv="pragma" content="no-cache"/>
-    <meta http-equiv="expires" content="-1"/>
-
-    <title>Documentation</title>
-
-    <!--
-        Licensed to the Apache Software Foundation (ASF) under one
-        or more contributor license agreements.  See the NOTICE file
-        distributed with this work for additional information
-        regarding copyright ownership.  The ASF licenses this file
-        to you under the Apache License, Version 2.0 (the
-        "License"); you may not use this file except in compliance
-        with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing,
-        software distributed under the License is distributed on an
-        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-        KIND, either express or implied.  See the License for the
-        specific language governing permissions and limitations
-        under the License.
-    -->
-
-    <!-- Styles -->
-    <link href="https://deltaspike.apache.org/resources/css/bootstrap.css"; 
rel="stylesheet">
-    <link 
href="https://deltaspike.apache.org/resources/css/bootstrap-responsive.css"; 
rel="stylesheet">
-    <link 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.0/css/font-awesome.min.css";
 rel="stylesheet">
-
-    
-
-    
-
-    <style type="text/css">
-        /* Stylesheet for CodeRay to match GitHub theme | MIT License | 
http://foundation.zurb.com */
-/*pre.CodeRay {background-color:#f7f7f8;}*/
-.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
-.CodeRay 
span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
-.CodeRay .line-numbers strong{font-weight: normal}
-table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
-table.CodeRay td{vertical-align: top}
-table.CodeRay td.line-numbers{text-align:right}
-table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
-table.CodeRay td.code{padding:0 0 0 .5em}
-table.CodeRay td.code>pre{padding:0}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
-.CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
-.CodeRay .attribute-value{color:#700}
-.CodeRay .binary{color:#509}
-.CodeRay .comment{color:#998;font-style:italic}
-.CodeRay .char{color:#04d}
-.CodeRay .char .content{color:#04d}
-.CodeRay .char .delimiter{color:#039}
-.CodeRay .class{color:#458;font-weight:bold}
-.CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
-.CodeRay .color{color:#099}
-.CodeRay .class-variable{color:#369}
-.CodeRay .decorator{color:#b0b}
-.CodeRay .definition{color:#099}
-.CodeRay .delimiter{color:#000}
-.CodeRay .doc{color:#970}
-.CodeRay .doctype{color:#34b}
-.CodeRay .doc-string{color:#d42}
-.CodeRay .escape{color:#666}
-.CodeRay .entity{color:#800}
-.CodeRay .error{color:#808}
-.CodeRay .exception{color:inherit}
-.CodeRay .filename{color:#099}
-.CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
-.CodeRay .hex{color:#058}
-.CodeRay .integer,.CodeRay .float{color:#099}
-.CodeRay .include{color:#555}
-.CodeRay .inline{color:#00}
-.CodeRay .inline .inline{background:#ccc}
-.CodeRay .inline .inline .inline{background:#bbb}
-.CodeRay .inline .inline-delimiter{color:#d14}
-.CodeRay .inline-delimiter{color:#d14}
-.CodeRay .important{color:#555;font-weight:bold}
-.CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
-.CodeRay .label{color:#970}
-.CodeRay .local-variable{color:#963}
-.CodeRay .octal{color:#40e}
-.CodeRay .predefined{color:#369}
-.CodeRay .preprocessor{color:#579}
-.CodeRay .pseudo-class{color:#555}
-.CodeRay .directive{font-weight:bold}
-.CodeRay .type{font-weight:bold}
-.CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
-.CodeRay .key{color:#808}
-.CodeRay .key .delimiter{color:#606}
-.CodeRay .key .char{color:#80f}
-.CodeRay .value{color:#088}
-.CodeRay .regexp .delimiter{color:#808}
-.CodeRay .regexp .content{color:#808}
-.CodeRay .regexp .modifier{color:#808}
-.CodeRay .regexp .char{color:#d14}
-.CodeRay .regexp .function{color:#404;font-weight:bold}
-.CodeRay .string{color:#d20}
-.CodeRay .string .string .string{background:#ffd0d0}
-.CodeRay .string .content{color:#d14}
-.CodeRay .string .char{color:#d14}
-.CodeRay .string .delimiter{color:#d14}
-.CodeRay .shell{color:#d14}
-.CodeRay .shell .delimiter{color:#d14}
-.CodeRay .symbol{color:#990073}
-.CodeRay .symbol .content{color:#a60}
-.CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
-.CodeRay .tag-special{color:#d70}
-.CodeRay .variable{color:#036}
-.CodeRay .insert{background:#afa}
-.CodeRay .delete{background:#faa}
-.CodeRay .change{color:#aaf;background:#007}
-.CodeRay .head{color:#f8f;background:#505}
-.CodeRay .insert .insert{color:#080}
-.CodeRay .delete .delete{color:#800}
-.CodeRay .change .change{color:#66f}
-.CodeRay .head .head{color:#f4f}
-
-        body {
-            padding-top: 60px;
-            padding-bottom: 40px;
-        }
-
-        .toc-like {
-            border-radius: 6px;
-            border: 1px solid #ccc;
-        }
-
-        .toc-like li {
-            line-height: 30px;
-            text-indent: 10px;
-        }
-
-        .toc-like li.custom-toc-header {
-            font-weight: bold;
-            background: #666;
-            color: white;
-            cursor: initial !important;
-            padding: 5px;
-        }
-
-        .toc-like li.custom-toc-header a {
-            color: white;
-            font-style: normal;
-            text-shadow: none;
-            padding: 0;
-        }
-
-        .toc-like li.custom-toc-header:hover a {
-            background: #666;
-        }
-
-        .page-title {
-            text-align: left;
-        }
-
-        #doc-content h2,
-        #doc-content h3,
-        #doc-content h4,
-        #doc-content h5,
-        #doc-content h6 {
-            padding-top: 0;
-            margin-top: 25px;
-            margin-bottom: 10px;
-            line-height: 1.4em;
-        }
-
-        #doc-content h2 {
-            border-bottom: 1px solid lightgrey;
-        }
-
-
-    </style>
-
-    <script type="text/javascript">
-
-        var _gaq = _gaq || [];
-        _gaq.push(['_setAccount', 'UA-36103647-1']);
-        _gaq.push(['_trackPageview']);
-
-        (function () {
-            var ga = document.createElement('script');
-            ga.type = 'text/javascript';
-            ga.async = true;
-            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
-            var s = document.getElementsByTagName('script')[0];
-            s.parentNode.insertBefore(ga, s);
-        })();
-
-    </script>
-</head>
-
-<body>
-
-<div class="navbar navbar-fixed-top">
-    <div class="navbar-inner">
-        <div class="container">
-            <a class="btn btn-navbar" data-toggle="collapse"
-               data-target=".nav-collapse"> <span class="icon-bar"></span> 
<span
-            class="icon-bar"></span> <span class="icon-bar"></span>
-            </a>
-            <a class="brand logocolor" href="../index.html">Apache 
DeltaSpike</a>
-
-            <div class="nav-collapse">
-
-                
-                <ul class="nav">
-                    <li><a href="../index.html">Home</a></li>
-                    <li class="active"><a 
href="../documentation">Documentation</a></li>
-                    <li  ><a href="../javadoc.html">Javadoc</a></li>
-                    <li ><a href="../source.html">Source</a></li>
-                    <li ><a href="../download.html">Download</a></li>
-                    <li ><a href="../community.html">Community</a></li>
-                    <!-- <li><a href="./support.html">Support</a></li>  -->
-                    <li ><a href="../news.html">News</a></li>
-                </ul>
-            </div>
-            <!--/.nav-collapse -->
-            <form id="search-form" action="https://www.google.com/search";
-                  method="get" class="navbar-search pull-right">
-                <input value="deltaspike.apache.org" name="sitesearch"
-                       type="hidden"> <input class="search-query" name="q"
-                                             id="query" type="text">
-            </form>
-        </div>
-    </div>
-</div>
-
-<div class="container">
-    <div class="row-fluid">
-
-        
-
-        <div class="span12">
-            <div class="page-title">
-                <h1>Documentation</h1>
-            </div>
-
-            <div id="doc-content">
-                <style>
-#doc-content h2 {
-    border-bottom: none;
-}
-</style>
-<div class="row-fluid">
-    <div class="span4">
-        <h2>Get Started</h2>
-        <ul class="nav nav-list toc-like">
-            <li><a href="overview.html">Overview of DeltaSpike</a></li>
-            <li><a href="configure.html">Configure DeltaSpike in Your 
Projects</a></li>
-            <li><a href="cdiimp.html">Enable CDI For Your Java 
Environment</a></li>
-            <li><a href="../examples.html">See DeltaSpike in Action</a></li>
-        </ul>
-
-        <h2>More resources</h2>
-        <ul class="nav nav-list toc-like">
-            <li><a href="../articles.html">Articles and Blogs</a></li>
-            <li><a href="../addons.html">Add-ons</a></li>
-            <li><a href="../external.html">External Examples</a></li>
-        </ul>
-    </div>
-
-    <div class="span4">
-        <h2>Modules</h2>
-        <ul class="nav nav-list toc-like">
-            <li><a href="modules.html">Overview of DeltaSpike Modules</a></li>
-            <li><a href="core.html">Core</a></li>
-            <li><a href="bean-validation.html">Bean Validation</a></li>
-            <li><a href="container-control.html">Container Control</a></li>
-            <li><a href="data.html">Data</a></li>
-            <li><a href="jpa.html">JPA</a></li>
-            <li><a href="jsf.html">JSF</a></li>
-            <li><a href="partial-bean.html">Partial-Bean</a></li>
-            <li><a href="proxy.html">Proxy</a></li>
-            <li><a href="scheduler.html">Scheduler</a></li>
-            <li><a href="security.html">Security</a></li>
-            <li><a href="servlet.html">Servlet</a></li>
-            <li><a href="test-control.html">Test-Control</a></li>
-        </ul>
-    </div>
-
-    <div class="span4">
-        <h2>Advanced information</h2>
-        <ul class="nav nav-list toc-like">
-            <li><a href="build.html">Build and Test DeltaSpike from 
Source</a></li>
-            <li><a href="snapshots.html">Use DeltaSpike Snapshots</a></li>
-            <li><a href="../migration-guide.html">Migrate to 
DeltaSpike</a></li>
-            <li><a href="../source.html">Contribute to the DeltaSpike 
Source</a></li>
-            <li><a href="spi.html">DeltaSpike Service Provider Interface 
(SPI)</a></li>
-        </ul>
-    </div>
-
-</div>
-            </div>
-        </div>
-
-        
-
-    </div>
-    <div class="row">
-        <hr>
-        <footer>
-            <p>Copyright &copy; 2011-2016 The Apache Software Foundation,
-                Licensed under the Apache License, Version 2.0.</p>
-
-            <p>Apache and the Apache feather logo are trademarks of The Apache 
Software Foundation.</p>
-        </footer>
-    </div>
-</div>
-
-</body>
+<!DOCTYPE html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="deltaspike-generate-pages">
+    <meta name="author" content="chm">
+    <!-- No caching headers -->
+    <meta http-equiv="cache-control" content="no-cache"/>
+    <meta http-equiv="pragma" content="no-cache"/>
+    <meta http-equiv="expires" content="-1"/>
+
+    <title>Documentation</title>
+
+    <!--
+        Licensed to the Apache Software Foundation (ASF) under one
+        or more contributor license agreements.  See the NOTICE file
+        distributed with this work for additional information
+        regarding copyright ownership.  The ASF licenses this file
+        to you under the Apache License, Version 2.0 (the
+        "License"); you may not use this file except in compliance
+        with the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing,
+        software distributed under the License is distributed on an
+        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+        KIND, either express or implied.  See the License for the
+        specific language governing permissions and limitations
+        under the License.
+    -->
+
+    <!-- Styles -->
+    <link href="https://deltaspike.apache.org/resources/css/bootstrap.css"; 
rel="stylesheet">
+    <link 
href="https://deltaspike.apache.org/resources/css/bootstrap-responsive.css"; 
rel="stylesheet">
+    <link 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.0/css/font-awesome.min.css";
 rel="stylesheet">
+
+    
+
+    
+
+    <style type="text/css">
+        /* Stylesheet for CodeRay to match GitHub theme | MIT License | 
http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay 
span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{font-weight: normal}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#00}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+
+        body {
+            padding-top: 60px;
+            padding-bottom: 40px;
+        }
+
+        .toc-like {
+            border-radius: 6px;
+            border: 1px solid #ccc;
+        }
+
+        .toc-like li {
+            line-height: 30px;
+            text-indent: 10px;
+        }
+
+        .toc-like li.custom-toc-header {
+            font-weight: bold;
+            background: #666;
+            color: white;
+            cursor: initial !important;
+            padding: 5px;
+        }
+
+        .toc-like li.custom-toc-header a {
+            color: white;
+            font-style: normal;
+            text-shadow: none;
+            padding: 0;
+        }
+
+        .toc-like li.custom-toc-header:hover a {
+            background: #666;
+        }
+
+        .page-title {
+            text-align: left;
+        }
+
+        #doc-content h2,
+        #doc-content h3,
+        #doc-content h4,
+        #doc-content h5,
+        #doc-content h6 {
+            padding-top: 0;
+            margin-top: 25px;
+            margin-bottom: 10px;
+            line-height: 1.4em;
+        }
+
+        #doc-content h2 {
+            border-bottom: 1px solid lightgrey;
+        }
+
+
+    </style>
+
+    <script type="text/javascript">
+
+        var _gaq = _gaq || [];
+        _gaq.push(['_setAccount', 'UA-36103647-1']);
+        _gaq.push(['_trackPageview']);
+
+        (function () {
+            var ga = document.createElement('script');
+            ga.type = 'text/javascript';
+            ga.async = true;
+            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+            var s = document.getElementsByTagName('script')[0];
+            s.parentNode.insertBefore(ga, s);
+        })();
+
+    </script>
+</head>
+
+<body>
+
+<div class="navbar navbar-fixed-top">
+    <div class="navbar-inner">
+        <div class="container">
+            <a class="btn btn-navbar" data-toggle="collapse"
+               data-target=".nav-collapse"> <span class="icon-bar"></span> 
<span
+            class="icon-bar"></span> <span class="icon-bar"></span>
+            </a>
+            <a class="brand logocolor" href="../index.html">Apache 
DeltaSpike</a>
+
+            <div class="nav-collapse">
+
+                
+                <ul class="nav">
+                    <li><a href="../index.html">Home</a></li>
+                    <li class="active"><a 
href="../documentation">Documentation</a></li>
+                    <li  ><a href="../javadoc.html">Javadoc</a></li>
+                    <li ><a href="../source.html">Source</a></li>
+                    <li ><a href="../download.html">Download</a></li>
+                    <li ><a href="../community.html">Community</a></li>
+                    <!-- <li><a href="./support.html">Support</a></li>  -->
+                    <li ><a href="../news.html">News</a></li>
+                </ul>
+            </div>
+            <!--/.nav-collapse -->
+            <form id="search-form" action="https://www.google.com/search";
+                  method="get" class="navbar-search pull-right">
+                <input value="deltaspike.apache.org" name="sitesearch"
+                       type="hidden"> <input class="search-query" name="q"
+                                             id="query" type="text">
+            </form>
+        </div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="row-fluid">
+
+        
+
+        <div class="span12">
+            <div class="page-title">
+                <h1>Documentation</h1>
+            </div>
+
+            <div id="doc-content">
+                <style>
+#doc-content h2 {
+    border-bottom: none;
+}
+</style>
+<div class="row-fluid">
+    <div class="span4">
+        <h2>Get Started</h2>
+        <ul class="nav nav-list toc-like">
+            <li><a href="overview.html">Overview of DeltaSpike</a></li>
+            <li><a href="configure.html">Configure DeltaSpike in Your 
Projects</a></li>
+            <li><a href="cdiimp.html">Enable CDI For Your Java 
Environment</a></li>
+            <li><a href="../examples.html">See DeltaSpike in Action</a></li>
+        </ul>
+
+        <h2>More resources</h2>
+        <ul class="nav nav-list toc-like">
+            <li><a href="../articles.html">Articles and Blogs</a></li>
+            <li><a href="../addons.html">Add-ons</a></li>
+            <li><a href="../external.html">External Examples</a></li>
+        </ul>
+    </div>
+
+    <div class="span4">
+        <h2>Modules</h2>
+        <ul class="nav nav-list toc-like">
+            <li><a href="modules.html">Overview of DeltaSpike Modules</a></li>
+            <li><a href="core.html">Core</a></li>
+            <li><a href="bean-validation.html">Bean Validation</a></li>
+            <li><a href="container-control.html">Container Control</a></li>
+            <li><a href="data.html">Data</a></li>
+            <li><a href="jpa.html">JPA</a></li>
+            <li><a href="jsf.html">JSF</a></li>
+            <li><a href="partial-bean.html">Partial-Bean</a></li>
+            <li><a href="proxy.html">Proxy</a></li>
+            <li><a href="scheduler.html">Scheduler</a></li>
+            <li><a href="security.html">Security</a></li>
+            <li><a href="servlet.html">Servlet</a></li>
+            <li><a href="test-control.html">Test-Control</a></li>
+        </ul>
+    </div>
+
+    <div class="span4">
+        <h2>Advanced information</h2>
+        <ul class="nav nav-list toc-like">
+            <li><a href="build.html">Build and Test DeltaSpike from 
Source</a></li>
+            <li><a href="snapshots.html">Use DeltaSpike Snapshots</a></li>
+            <li><a href="../migration-guide.html">Migrate to 
DeltaSpike</a></li>
+            <li><a href="../source.html">Contribute to the DeltaSpike 
Source</a></li>
+            <li><a href="spi.html">DeltaSpike Service Provider Interface 
(SPI)</a></li>
+        </ul>
+    </div>
+
+</div>
+            </div>
+        </div>
+
+        
+
+    </div>
+    <div class="row">
+        <hr>
+        <footer>
+            <p>Copyright &copy; 2011-2016 The Apache Software Foundation,
+                Licensed under the Apache License, Version 2.0.</p>
+
+            <p>Apache and the Apache feather logo are trademarks of The Apache 
Software Foundation.</p>
+        </footer>
+    </div>
+</div>
+
+</body>
 </html>
\ No newline at end of file

Added: deltaspike/site/trunk/content/documentation/jpa.adoc~
URL: 
http://svn.apache.org/viewvc/deltaspike/site/trunk/content/documentation/jpa.adoc%7E?rev=1755397&view=auto
==============================================================================
--- deltaspike/site/trunk/content/documentation/jpa.adoc~ (added)
+++ deltaspike/site/trunk/content/documentation/jpa.adoc~ Sat Aug  6 13:46:15 
2016
@@ -0,0 +1,572 @@
+:moduledeps: core
+:moduleconf: api:org.apache.deltaspike.jpa.api.transaction.TransactionConfig
+
+= JPA Module
+
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or agreed to in writing, software distributed under the License 
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY 
KIND, either express or implied. See the License for the specific language 
governing permissions and limitations under the License.
+
+== Overview
+The JPA module provides a transactional context and scope, enabling execution 
of methods within transactions.
+
+== Project Setup
+The configuration information provided here is for Maven-based projects and it 
assumes that you have already declared the DeltaSpike version and DeltaSpike 
Core module for your projects, as detailed in <<configure#, Configure 
DeltaSpike in Your Projects>>. For Maven-independent projects, see 
<<configure#config-maven-indep,Configure DeltaSpike in Maven-independent 
Projects>>.
+
+=== 1. Declare JPA Module Dependencies
+Add the JPA module to the list of dependencies in the project `pom.xml` file 
using this code snippet:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.deltaspike.modules</groupId>
+    <artifactId>deltaspike-jpa-module-api</artifactId>
+    <version>${deltaspike.version}</version>
+    <scope>compile</scope>
+</dependency>
+
+<dependency>
+    <groupId>org.apache.deltaspike.modules</groupId>
+    <artifactId>deltaspike-jpa-module-impl</artifactId>
+    <version>${deltaspike.version}</version>
+    <scope>runtime</scope>
+</dependency>
+----
+
+Or if you're using Gradle, add these dependencies to your `build.gradle`:
+
+[source]
+----
+     runtime 'org.apache.deltaspike.modules:deltaspike-jpa-module-impl'
+     compile 'org.apache.deltaspike.modules:deltaspike-jpa-module-api'
+----
+
+=== 2. (Optional) Enable the Transaction Interceptor
+NOTE: If you are using CDI 1.0 or CDI 1.1+ with DeltaSpike v1.1.0 and earlier, 
you must enable the transaction interceptor in the project `beans.xml` file:
+
+[source,xml]
+----
+<beans>
+    <!-- Not needed with CDI 1.1+ and DeltaSpike v1.1.1+ -->
+    <interceptors>
+        
<class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class>
+    </interceptors>
+</beans>
+----
+
+== @Transactional
+
+This annotation is an alternative to transactional EJBs and enables the 
execution
+of a method within a transaction. Before it is possible to start
+using the annotation, it is required to implement a CDI producer for an
+`EntityManager` and it is needed to inject the `EntityManager` in the
+bean which uses `@Transactional`. As shown later on, it is also possible
+to use multiple qualifiers for using different EntityManagers.
+
+=== Basic usage
+
+The following example shows a simple producer for an `EntityManager` and
+the corresponding disposer method. Producing it as request scoped bean
+means that the disposer method will be called on finishing the request.
+Alternatively it is possible to use a special scope called
+<<__transactionscoped, `@TransactionScoped`>>.
+
+.Producer for the Default EntityManager (non-EE server)
+[source,java]
+----------------------------------------------------------------------------
+//...
+public class EntityManagerProducer
+{
+    //or manual bootstrapping
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Produces
+    @RequestScoped
+    protected EntityManager createEntityManager()
+    {
+        return this.entityManager;
+    }
+
+    protected void closeEntityManager(@Disposes EntityManager entityManager)
+    {
+        if (entityManager.isOpen())
+        {
+            entityManager.close();
+        }
+    }
+}
+----------------------------------------------------------------------------
+
+.Producer for the Default EntityManager (EE server)
+[source,java]
+-----------------------------------------------------------------------
+@ApplicationScoped
+public class EntityManagerProducer
+{
+    @PersistenceUnit
+    private EntityManagerFactory entityManagerFactory;
+
+    @Produces
+    @Default
+    @RequestScoped
+    public EntityManager create()
+    {
+        return this.entityManagerFactory.createEntityManager();
+    }
+
+    public void dispose(@Disposes @Default EntityManager entityManager)
+    {
+        if (entityManager.isOpen())
+        {
+            entityManager.close();
+        }
+    }
+}
+-----------------------------------------------------------------------
+
+The following examples show how to use the `EntityManager` produced by
+the example above.
+
+.Bean with a Transactional Method
+[source,java]
+----------------------------------------
+//...
+public class TransactionalBean
+{
+    @Inject
+    private EntityManager entityManager;
+
+    @Transactional
+    public void executeInTransaction()
+    {
+        //...
+    }
+}
+----------------------------------------
+
+.Simple Transactional Bean (All Methods are Transactional)
+[source,java]
+----------------------------------------
+//...
+@Transactional
+public class TransactionalBean
+{
+    @Inject
+    private EntityManager entityManager;
+
+    //...
+}
+----------------------------------------
+
+As illustrated in the following example it is also possible to use
+`@Transactional` for stereotypes.
+
+.Stereotype for Transactional Beans (+ Usage)
+[source,java]
+----------------------------------------
+@Stereotype
+@Transactional
+@ApplicationScoped
+public @interface Repository
+{
+}
+
+//...
+@Repository
+public class TransactionalBean
+{
+    @Inject
+    private EntityManager entityManager;
+
+    //...
+}
+----------------------------------------
+
+=== Multiple EntityManagers
+
+The default qualifier for `@Transactional` is `@Any` whereby a transaction 
gets started for every injected entity manager. Besides such simple usages, it 
is also possible to access multiple persistence units in parallel using 
qualifiers. 
+
+First, the EntityManagers or EntityManagerFactories must be obtained from the 
JPA subsystem, then EntityManagers must be made available as CDI beans and 
finally injected into `@Transactional` beans for usage.
+
+==== Obtaining EntityManagers from JPA
+
+In EE managed environments the EntityManager can be obtained directly or 
through an EntityManagerFactory using standard JPA annotations 
`@PersistenceContext` for an EntityManager or `@PersistenceUnit` for an 
EntityManagerFactory.
+
+.JPA Managed EntityManager
+[source,java]
+----
+public class EntityManagerProducer {
+
+    @PersistenceContext(unitName = "firstDB")
+    private EntityManager firstEntityManager;
+
+    @PersistenceContext(unitName = "secondDB")
+    private EntityManager secondEntityManager;
+    
+    // ...
+}
+----
+
+An alternative for non-EE environments is available through DeltaSpike's 
`@PersistenceUnitName` qualifier allowing to inject EntityManagerFactories.
+
+.Unmanaged EntityManagerFactory
+[source,java]
+----
+public class EntityManagerProducer {
+
+    @Inject
+    @PersistenceUnitName("puA")
+    private EntityManagerFactory emfA;
+
+    @Inject
+    @PersistenceUnitName("puB")
+    private EntityManagerFactory emfB;
+    
+    // ...
+}
+----
+
+Obtaining an EntityManager from an EntityManagerFactory is just a matter of 
calling `emfA.createEntityManager()`.
+DeltaSpike provides a built-in producer for `@PersistenceUnitName` qualified 
EntityManagerFactories.
+This producer also looks up  a property files with the name 
`persistence-{persistenceunit name}.properties` via the DeltaSpike 
`PropertyLoader`.
+For the example above this would be `persistence-puA.properties`.
+The properties in this file will be passed 1:1 to 
`Persistence#createEntityManagerFactory(properties)` by the built-in producer 
method.
+
+==== Producing Multiple EntityManagers
+There are several ways to make multiple entity managers available for use in 
`@Transactional` methods, each suitable for a different situation.
+
+The simplest method employs a producer and a disposer for each EntityManager.
+
+.Deciding using qualifiers
+[source,java]
+----
+public class EntityManagerProducer {
+    
+    // ...entity managers or factories injected here
+    
+    @Produces
+    @RequestScoped // or other
+    @DbA //custom qualifier annotation
+    public EntityManager createEntityManagerA()
+    {
+        return emfA.createEntityManager();
+    }
+
+    public void closeEmA(@Disposes @DbA EntityManager em)
+    {
+        em.close();
+    }
+
+    @Produces
+    @RequestScoped
+    @DbB //custom qualifier annotation
+    public EntityManager createEntityManagerB()
+    {
+        return emfB.createEntityManager();
+    }
+
+    public void closeEmB(@Disposes @DbB EntityManager em)
+    {
+        em.close();
+    }
+    
+}
+----
+
+If there's the need to decide dynamically on which EntityManager should be 
used when it's possible to use the standard CDI facility of `InjectionPoint` to 
get information about the injection points and produce different EntityManagers 
with just one producer method.
+
+.Deciding using InjectionPoint
+[source,java]
+----
+public class EntityManagerProducer {
+
+    // ...entity managers or factories injected here
+
+    @Produces
+    protected EntityManager createEntityManager(InjectionPoint injectionPoint)
+    {
+        CustomQualifier customQualifier = 
injectionPoint.getAnnotated().getAnnotation(CustomQualifier.class);
+        return selectEntityManager(customQualifier); //selects 
firstEntityManager or secondEntityManager based on the details provided by 
CustomQualifier
+    }
+}
+----
+
+The information necessary to make the decision about the EntityManager 
appropriate for the current situation and injection point may be available 
elsewhere, for example in a custom context.
+
+.Deciding using anything else
+[source,java]
+----
+public class EntityManagerProducer {
+
+    // ...entity managers or factories injected here
+    
+    @Inject
+    private CustomDatabaseContext customDatabaseContext;
+
+    @Produces
+    protected EntityManager createEntityManager()
+    {
+        if (customDatabaseContext.usePrimaryDb()) {
+            return firstEntityManager;
+        }
+        return secondEntityManager;
+    }
+}
+----
+
+==== Using transactions with multiple EntityManagers
+
+One use case for multiple EntityManagers is their usage in nested 
transactions. When a transactional method is called from within a transactional 
method, it joins the existing transaction.
+
+.Nested transactions with multiple EntityManagers
+[source,java]
+----
+public class FirstLevelTransactionBean
+{
+    @Inject
+    private @First EntityManager firstEntityManager;
+
+    @Inject
+    private NestedTransactionBean nestedTransactionBean;
+
+    @Transactional
+    public void executeInTransaction()
+    {
+        //...
+        this.nestedTransactionBean.executeInTransaction();
+    }
+}
+
+public class NestedTransactionBean
+{
+    @Inject
+    private @Second EntityManager secondEntityManager;
+
+    @Transactional
+    public void executeInTransaction()
+    {
+        //...
+    }
+}
+----
+
+It's also easy to use multiple EntityManagers in the same bean in different 
transactional methods. By default, a `@Transactional` method would enroll all 
of the EntityManagers in the transaction. By using 
`@Transactional(qualifier=...)` it's easy to choose individual EntityManagers 
for each transactional method.
+
+.Selecting individual EntityManagers for a transactional method
+[source,java]
+-----------------------------------------------------------
+public class MultiTransactionBean
+{
+    @Inject
+    private EntityManager defaultEntityManager;
+
+    @Inject
+    private @First EntityManager firstEntityManager;
+
+    @Inject
+    private @Second EntityManager secondEntityManager;
+
+    @Transactional(qualifier = Default.class)
+    public void executeInDefaultTransaction() {...}
+
+    @Transactional(qualifier = First.class)
+    public void executeInFirstTransaction() {...}
+
+    @Transactional(qualifier = {First.class, Second.class})
+    public void executeInFirstAndSecondTransaction() {...}
+}
+-----------------------------------------------------------
+
+The final transaction handling for all `EntityManager` s is also done
+after the outermost transactional method if `NestedTransactionBean` uses
+a different `EntityManager`. So it is possible to catch an exception in
+`FirstLevelTransactionBean`, for example, to try an optional path instead of an
+immediate rollback.
+
+== @TransactionScoped
+
+`@Transactional` also starts a context which is available as long as the
+transaction started by `@Transactional`. Besides other beans you can use
+this scope for the `EntityManager` itself. That means the
+`EntityManager` will be closed after leaving the method annotated with
+`@Transactional`. 
+
+.Using a transaction-scoped EntityManager
+[source,java]
+----------------------------------------------------------------------------
+public class EntityManagerProducer
+{
+    //or manual bootstrapping
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Produces
+    @TransactionScoped
+    protected EntityManager createEntityManager()
+    {
+        return this.entityManager;
+    }
+
+    protected void closeEntityManager(@Disposes EntityManager entityManager)
+    {
+        if (entityManager.isOpen())
+        {
+            entityManager.close();
+        }
+    }
+}
+----------------------------------------------------------------------------
+
+== Extended Persistence Contexts
+
+Frameworks like MyFaces Orchestra provide a feature which allows keeping
+an `EntityManager` across multiple requests. That means it is not
+required to call `EntityManager#merge` to add detached entities to the
+context. However, several application architectures do not allow such an
+approach (due to different reasons like scalability). In theory that
+sounds nice and it works pretty well for small to medium sized projects
+especially if an application does not rely on session replication in clusters.
+That also means that such an approach restricts your target environment
+from the very beginning. One of the base problems is that an
+`EntityManager` is not serializable. Beans which are scoped in a
+normal-scoped CDI context have to be serializable. So by default it
+is not allowed by CDI to provide a producer-method which exposes, for example, 
a
+conversation scoped `EntityManager` as it is. We *do not* recommend this 
approach and therefore it is not available out-of-the-box.
+However, if you really need this approach to avoid calling `#merge` for
+your detached entities, it is pretty simple to add this functionality.
+
+.Usage of a Simple extended EntityManager
+[source,java]
+------------------------------------
+@Inject
+private EntityManager entityManager;
+------------------------------------
+
+As you see the usage is the same. You *do not* have to use
+`ExtendedEntityManager` at the injection point. It is just needed in the
+producer-method:
+
+.Producer for an extended EntityManager (non-EE server)
+[source,java]
+------------------------------------------------------------------------------------
+//...
+public class ExtendedEntityManagerProducer
+{
+    //or manual bootstrapping
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Produces
+    @RequestScoped
+    protected ExtendedEntityManager createEntityManager()
+    {
+        return new ExtendedEntityManager(this.entityManager);
+    }
+
+    protected void closeEntityManager(@Disposes ExtendedEntityManager 
entityManager)
+    {
+        if (entityManager.isOpen())
+        {
+            entityManager.close();
+        }
+    }
+}
+------------------------------------------------------------------------------------
+
+.Producer for an extended EntityManager (EE server)
+[source,java]
+------------------------------------------------------------------------------------------
+@ApplicationScoped
+public class ExtendedEntityManagerProducer
+{
+    @PersistenceUnit
+    private EntityManagerFactory entityManagerFactory;
+
+    @Produces
+    @Default
+    @RequestScoped
+    public ExtendedEntityManager create()
+    {
+        return new 
ExtendedEntityManager(this.entityManagerFactory.createEntityManager());
+    }
+
+    public void dispose(@Disposes @Default ExtendedEntityManager entityManager)
+    {
+        if (entityManager.isOpen())
+        {
+            entityManager.close();
+        }
+    }
+}
+------------------------------------------------------------------------------------------
+
+.Implementation of a simple extended EntityManager
+[source,java]
+-------------------------------------------------------------------------
+@Typed()
+public class ExtendedEntityManager implements EntityManager, Serializable
+{
+    private static final long serialVersionUID = 3770954229283539616L;
+
+    private transient EntityManager wrapped;
+
+    protected ExtendedEntityManager()
+    {
+    }
+
+    public ExtendedEntityManager(EntityManager wrapped)
+    {
+        this.wrapped = wrapped;
+    }
+
+    /*
+     * generated
+     */
+    //delegate all calls to this.wrapped - most IDEs allow to generate it
+}
+-------------------------------------------------------------------------
+
+This approach just works if it *does not come to serialization* of this
+wrapper, for example in case of session-replication. If those beans get
+serialized, you have to overcome this restriction by storing the
+persistence-unit-name and recreate the `EntityManager` via
+`Persistence.createEntityManagerFactory(this.persistenceUnitName).createEntityManager();`
+and sync it with the database before closing it on serialization.
+Furthermore, you have to intercept some methods of the `EntityManager`
+to merge detached entities automatically if those entities get
+serialized as well. However, as mentioned before *we do not recommend*
+such an approach.
+
+== JTA Support
+
+By default the transaction-type used by `@Transactional` is
+`RESOURCE_LOCAL`. If you configure `transaction-type="JTA"` in the
+persistence.xml file, you have to enable an alternative `TransactionStrategy`
+in the beans.xml which is called
+`org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy`.
+
+[source,xml]
+----------------------------------------------------------------------------------------------------
+<beans>
+    <alternatives>
+        
<class>org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy</class>
+    </alternatives>
+</beans>
+----------------------------------------------------------------------------------------------------
+
+Alternatively, you may expect that your transactions are started at a higher 
level, e.g. you're exposing a REST API
+and the endpoints themselves are either `@Transactional` or Stateless session 
beans, either with container managed
+Transactions, you would use 
`org.apache.deltaspike.jpa.impl.transaction.ContainerManagedTransactionStrategy`.
  This
+is the strategy to use if you are leveraging `@PersistenceContext` to inject 
your `EntityManager`.
+
+If you have multiple persistence units and you have to use both
+transaction types or the settings for development have to be different
+than the production settings, you can use
+`org.apache.deltaspike.jpa.impl.transaction.EnvironmentAwareTransactionStrategy`
+instead.
+
+NOTE: In case of some versions of Weld (or OpenWebBeans in BDA mode), you have
+to configure it as a <<spi.adoc#GlobalAlternative,global alternative>> instead 
of an `alternative` in
+`beans.xml`. That means you have to add, for example,
+`globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy
 
+=org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy`
+to `/META-INF/apache-deltaspike.properties`.



Reply via email to