deltaspike-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rmannibu...@apache.org
Subject svn commit: r1755397 [8/18] - /deltaspike/site/trunk/content/documentation/
Date Sat, 06 Aug 2016 13:46:16 GMT
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`.




Mime
View raw message