You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/12/03 19:15:50 UTC
[12/15] isis-site git commit: ISIS-1243: breaking up the user and ref
guides
http://git-wip-us.apache.org/repos/asf/isis-site/blob/5d1d8c79/content/guides/rgcfg.html
----------------------------------------------------------------------
diff --git a/content/guides/rgcfg.html b/content/guides/rgcfg.html
new file mode 100644
index 0000000..f1e223b
--- /dev/null
+++ b/content/guides/rgcfg.html
@@ -0,0 +1,2394 @@
+<!doctype html>
+<html class="no-js" lang="en">
+<head>
+ <meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+ <title>Configuration Properties</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.
+ -->
+
+ <!-- No caching headers -->
+ <meta http-equiv="cache-control" content="no-cache" />
+ <meta http-equiv="pragma" content="no-cache" />
+ <meta http-equiv="expires" content="-1" />
+
+
+ <!-- TODO: need to (re)instate CDN in the future (not using for now just so can develop off-line -->
+ <link href="../css/foundation/5.5.1/foundation.css" rel="stylesheet" />
+ <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
+ <link href="../css/asciidoctor/colony.css" rel="stylesheet">
+ <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
+
+
+
+
+ <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.css" rel="stylesheet" />
+ <!--[if lt IE 9]>
+ <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.ie.css" rel="stylesheet" />
+ <![endif]-->
+
+
+
+ <style type="text/css">
+ pre code {
+ background-color: inherit;
+ border-style: none;
+ }
+
+ pre code > span:first-child {
+ margin-left: -5px;
+ }
+
+ <style>
+
+ <!--
+ <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}
+
+ pre.CodeRay code {
+ background-color: inherit;
+ border-style: none;
+ }
+
+ pre.CodeRay code > span:first-child {
+ margin-left: -5px;
+ }
+
+ .literalblock pre,
+ .listingblock pre:not(.highlight),
+ .listingblock pre[class="highlight"],
+ .listingblock pre[class^="highlight "],
+ .listingblock pre.CodeRay,
+ .listingblock pre.prettyprint {
+ background: rgb(253, 250, 246);
+ }
+ .sidebarblock .literalblock pre,
+ .sidebarblock .listingblock pre:not(.highlight),
+ .sidebarblock .listingblock pre[class="highlight"],
+ .sidebarblock .listingblock pre[class^="highlight "],
+ .sidebarblock .listingblock pre.CodeRay,
+ .sidebarblock .listingblock pre.prettyprint {
+ background: rgb(253, 250, 246);
+ }
+
+ <style>
+ -->
+
+ <style>
+ .github-fork-ribbon-wrapper.right {
+ position: fixed;
+ }
+ .github-fork-ribbon {
+ background: #090;
+ }
+ .github-fork-ribbon a:hover {
+ background:#0D0;
+ color:#fff;
+ font-size: 1.1em;
+ }
+ </style>
+
+ <style>
+ @media only screen and (min-width: 40.063em) {
+ .top-bar {
+ .contain-to-grid .top-bar {
+ max-width: 80rem;
+ }
+ }
+ }
+ .row {
+ max-width: 80rem;
+ }
+ </style>
+
+ <style>
+ .extended-quote,
+ .extended-quote-first {
+ margin-left: 40px;
+ margin-right: 40px;
+ font-style: italic;
+ }
+ .extended-quote-attribution {
+ text-align: right;
+ margin-right: 100px;
+ color: #10B061;
+ }
+
+ .extended-quote-first:before {
+ content: "\201c";
+ float: left;
+ font-size: 2.75em;
+ font-weight: bold;
+ line-height: 0.6em;
+ margin-left: -0.6em;
+ color: #003b6b;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ }
+
+ </style>
+
+ <style>
+ body {
+ position: relative;
+ }
+
+ *:not(pre) a > code {
+ color: #210DDC;
+ }
+
+ *:not(pre) > code {
+ background-color: inherit;
+ border: none;
+ font-weight: normal;
+ }
+
+ body div#toc li,
+ body div#toc2 li {
+ list-style-type: none;
+ }
+
+ div#doc-content {
+ margin-top: 30px;
+ }
+
+ div#doc-content a.header-link {
+ margin-left: -75px;
+ }
+
+ div#doc-content div.sect1 h2 {
+ margin-left: -60px;
+ }
+
+ div#doc-content div.sect3 h4 {
+ margin-left: -60px;
+ }
+
+ div#doc-content div.sect2 h3 {
+ margin-left: -60px;
+ }
+
+ div.documentation-page table.frame-all {
+ border-left: none;
+ border-right: none;
+ }
+
+ body div#toc li.active-region:before,
+ body div#toc2 li.active-region:before {
+ content: "\00BB \0020";
+ margin-left: -12px;
+ }
+
+ body div#toc li a.active,
+ body div#toc2 li a.active {
+ color: red;
+ }
+
+ body div#toc.toc,
+ body div#toc.toc2 {
+ position: fixed;
+ left: auto;
+ padding-top: 60px;
+ z-index: auto;
+ background-color: white;
+ border-left-color: #eee;
+ border-left-style: solid;
+ border-right: none;
+ min-height: 2000px;
+ }
+
+ </style>
+
+ <style>
+
+ @media only screen and (min-width: 768px) {
+ #toc.toc2 ul ul { margin-left: -10px; }
+ }
+
+
+ body div#toc .tocify-subheader ul {
+ margin-bottom: 0px;
+ }
+
+ body div#toc .tocify-subheader li {
+ font-size: 14px;
+ }
+ .tocify li.tocify-item, .tocify ul.tocify-item {
+ line-height: 24px;
+ }
+
+ body div#toc li.tocify-item.active:before,
+ body div#toc2 li.tocify-item.active:before {
+ content: "\00BB \0020";
+ margin-left: -12px;
+ }
+
+ body div#toc li.tocify-item.active a,
+ body div#toc2 li.tocify-item.active a {
+ color: red;
+ }
+ </style>
+
+ <style>
+ footer {
+ margin-top: 1000px;
+ }
+ </style>
+
+ <style>
+ /* overriding colony.css stylesheet */
+ .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] {
+ /*padding: 1.25em 1.5625em 1.125em 1.5625em;*/
+ padding: 0.3em 0.6em 0.25em 0.6em;
+ }
+ @media only screen and (min-width: 1280px)
+ #toc.toc2 {
+ /*width: 20em;*/
+ width: 25em;
+ }
+
+ #doc-content a {
+ color: #210DDC;
+ }
+
+ .top-bar h1 {
+ border-bottom: inherit;
+ }
+
+ h2 {
+ margin-top: 80px;
+ }
+ h3 {
+ margin-top: 40px;
+ }
+ h4,h5 {
+ margin-top: 30px;
+ }
+
+ .admonitionblock.tip > table td.content {
+ color: #10B061;
+ }
+ .admonitionblock.note > table td.content {
+ color: #B509AB;
+ }
+ .admonitionblock.important > table td.content {
+ color: #D5810A;
+ }
+
+ .admonitionblock .title {
+ font-size: larger;
+ font-style: italic;
+ }
+
+ .imageblock img {
+ margin-bottom: 10px;
+ }
+ </style>
+
+ <style>
+ /* from http://ben.balter.com/2014/03/13/pages-anchor-links/ */
+ .header-link {
+ position: absolute;
+ left: -0.5em;
+ opacity: 0;
+
+ /*
+ -webkit-transition: opacity 0.2s ease-in-out 0.1s;
+ -moz-transition: opacity 0.2s ease-in-out 0.1s;
+ -ms-transition: opacity 0.2s ease-in-out 0.1s;
+ */
+ }
+
+ h2:hover .header-link,
+ h3:hover .header-link,
+ h4:hover .header-link,
+ h5:hover .header-link,
+ h6:hover .header-link {
+ opacity: 1;
+ }
+ </style>
+
+ <style>
+ .top-bar
+ {
+ -webkit-transition-duration: .5s;
+ transition-duration: .5s;
+
+ -webkit-transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+ transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ }
+
+ /*
+ http://osvaldas.info/auto-hide-sticky-header
+ MIT license
+ */
+ .header--hidden
+ {
+ -webkit-transform: translateY( -100% );
+ -ms-transform: translateY( -100% );
+ transform: translateY( -100% );
+
+ transition-duration: .5s;
+ transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ }
+ </style>
+
+ <style>
+ #doc-content a.guide {
+ color: white;
+ }
+ </style>
+
+ <style>
+ .tocify {
+ margin-top: 80px;
+ }
+ </style>
+
+
+</script>
+
+</head>
+<body>
+
+<<div class="github-fork-ribbon-wrapper right" style="position: fixed;">
+ <div class="github-fork-ribbon">
+ <a href="https://github.com/apache/isis/fork">Fork me on GitHub</a>
+ </div>
+</div>
+
+
+<div class="row">
+
+ <div class="fixed contain-to-grid header">
+ <nav class="top-bar" data-topbar role="navigation" style="max-width: 80rem">
+ <ul class="title-area">
+ <li class="name">
+ <h1>
+ <a href="/index.html">Apache Isis™</a>
+ </h1>
+ </li>
+ <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
+ <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
+ </ul>
+
+ <section class="top-bar-section">
+ <ul class="right">
+
+ <li class="has-form">
+ <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+ <div class="row collapse">
+ <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+ <INPUT type="hidden" name="cof" value="FORID:0">
+ <INPUT class="form-control" name="q" type="text" placeholder="Search">
+ </div>
+ </FORM>
+ </li>
+
+ </ul>
+
+ <!-- Left Nav Section -->
+ <ul class="left">
+
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/downloads.html">Downloads</a></li>
+ <li><a href="/help.html">Help</a></li>
+ <li><a href="/asf.html">@ASF</a></li>
+
+ </ul>
+
+ </section>
+ </nav>
+ </div>
+</div>
+
+<div class="row">
+
+ <div id="doc-content-left" class="large-9 medium-9 columns">
+
+
+ <div id="doc-content">
+ <div class="sect1">
+<h2 id="_rgcfg">Configuration Properties</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Apache Isis' own configuration properties are simple key-value pairs, typically held in the <code>WEBINF/isis.properties</code>
+file and other related files. This guide describes how to configure an Apache Isis application.</p>
+</div>
+<div class="sect2">
+<h3 id="_other_guides">Other Guides</h3>
+<div class="paragraph">
+<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+</div>
+<div class="paragraph">
+<p>The user guides available are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="ugfun.html">Fundamentals</a></p>
+</li>
+<li>
+<p><a href="ugvw.html">Wicket viewer</a></p>
+</li>
+<li>
+<p><a href="ugvro.html">Restful Objects viewer</a></p>
+</li>
+<li>
+<p><a href="ugsec.html">Security</a></p>
+</li>
+<li>
+<p><a href="ugtst.html">Testing</a></p>
+</li>
+<li>
+<p><a href="ugbtb.html">Beyond the Basics</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The reference guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="rgant.html">Annotations</a></p>
+</li>
+<li>
+<p><a href="rgsvc.html">Domain Services</a></p>
+</li>
+<li>
+<p><a href="#">Configuration Properties</a></p>
+</li>
+<li>
+<p><a href="rg.html">Classes, Methods and Schema</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Configuration properties for the viewers can be found in the <a href="ugvw.html">Wicket Viewer</a> guide and the <a href="ugvro.html">RestfulObjects viewer</a> guide. Likewise[details of configuring security (Apache Shiro) can be found in the <a href="ugsec.html">Security</a> guide.</p>
+</div>
+<div class="paragraph">
+<p>Also, note that by default the configuration values are part of the built WAR file. Details on how to override these
+configuration properties externally for different environments can be found in the
+<a href="ugbtb.html#_ugbtb_deployment">Beyond the Basics</a> guide, (deployment chapter).</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rgcfg_deployment-types">Deployment Types</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Apache Isis distinguishes between the application being run in development mode vs running in production mode. The framework calls this the "deployment type" (corresponding internally to the <code>DeploymentType</code> class).</p>
+</div>
+<div class="paragraph">
+<p>(For mostly historical reasons) development mode is actually called <code>SERVER_PROTOTYPE</code>, while production mode is called just <code>SERVER</code>. (There is also a deprecated mode called <code>SERVER_EXPLORATION</code>; for all intents and purposes this can considered as an alias of <code>SERVER_PROTOTYPE</code>).</p>
+</div>
+<div class="paragraph">
+<p>When running in development/prototyping mode, certain capabilities are enabled; most notably any actions restricted to prototyping mode (using <a href="rgant.html#_rgant-Action_restrictTo"><code>@Action#restrictTo()</code></a>) will be available.</p>
+</div>
+<div class="sect2">
+<h3 id="_using_the_wicket_viewer">Using the Wicket Viewer</h3>
+<div class="paragraph">
+<p>Most of the you’re likely to run Apache Isis using the <a href="ugvw.html">Wicket viewer</a>. In this case Apache Isis' "deployment type" concept maps to Wicket’s "configuration" concept:</p>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 1. Apache Isis' deployment type corresponds to Apache Wicket’s configuration</caption>
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Apache Isis<br>
+(Deployment Type)</th>
+<th class="tableblock halign-left valign-top">Apache Wicket<br>
+(Configuration)</th>
+<th class="tableblock halign-left valign-top">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SERVER_PROTOTYPE</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>development</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">running in development/prototyping mode</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SERVER</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>deployment</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">running in production mode</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>Wicket’s mechanism for specifying the "configuration" is to use a context parameter in <code>web.xml</code>; Apache Isis automatically infers its own deployment type from this. In other words:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>to specify SERVER (production) mode, use:<br></p>
+<div class="listingblock">
+<div class="title"><code>web.xml</code></div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><context-param></span>
+ <span class="tag"><param-name></span>configuration<span class="tag"></param-name></span>
+ <span class="tag"><param-value></span>deployment<span class="tag"></param-value></span>
+<span class="tag"></context-param></span></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>to specify <code>SERVER_PROTOTYPING</code> (development) mode, use:<br></p>
+<div class="listingblock">
+<div class="title"><code>web.xml</code></div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><context-param></span>
+ <span class="tag"><param-name></span>configuration<span class="tag"></param-name></span>
+ <span class="tag"><param-value></span>deployment<span class="tag"></param-value></span>
+<span class="tag"></context-param></span></code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_restful_objects_viewer_only">Restful Objects viewer only</h3>
+<div class="paragraph">
+<p>Most Apache Isis applications will consist of at least the <a href="ugvw.html">Wicket viewer</a> and optionally the <a href="ugvro.html">RestfulObjects viewer</a>. When both viewers are deployed in the same app, then the bootstrapping is performed by Wicket, and so the deployment type is configured as described in the previous section.</p>
+</div>
+<div class="paragraph">
+<p>In some cases though you may be using Apache Isis to provide a REST API only, that is, you won’t have deployed the Wicket viewer. In these cases your app will be bootstrapped using Apache Isis' <a href="ugbtb.html#_ugbtb_web-xml_servlet-context-listeners"> <code>IsisWebAppBootstrapper</code></a>.</p>
+</div>
+<div class="paragraph">
+<p>In this case the deployment type is specified through an Apache Isis-specific context parameter, called <code>isis.deploymentType</code>:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>to specify <code>SERVER</code> (production) mode, use:<br></p>
+<div class="listingblock">
+<div class="title"><code>web.xml</code></div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><context-param></span>
+ <span class="tag"><param-name></span>isis.deploymentType<span class="tag"></param-name></span>
+ <span class="tag"><param-value></span>server<span class="tag"></param-value></span>
+<span class="tag"></context-param></span></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>to specify <code>SERVER_PROTOTYPE</code> (development) mode, use:<br></p>
+<div class="listingblock">
+<div class="title"><code>web.xml</code></div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><context-param></span>
+ <span class="tag"><param-name></span>isis.deploymentType<span class="tag"></param-name></span>
+ <span class="tag"><param-value></span>server-prototype<span class="tag"></param-value></span>
+<span class="tag"></context-param></span></code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_overriding_the_deployment_type">Overriding the deployment type</h3>
+<div class="paragraph">
+<p>If bootstrapping the application using Apache Isis' <a href="ugbtb.html#_ugbtb_deployment_cmd-line"><code>org.apache.isis.WebServer</code></a> then it is possible to override the deployment type using the <code>-t</code> (or <code>--type</code>) flag.</p>
+</div>
+<div class="paragraph">
+<p>For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">java -jar ... org.apache.isis.WebServer -t SERVER</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where "…​" is the (usually rather long) list of JAR files and class directories that will make up your application.</p>
+</div>
+<div class="paragraph">
+<p>This works for both the <a href="ugvw.html">Wicket viewer</a> and the <a href="ugvro.html">RestfulObjects viewer</a>.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rgcfg_configuration-files">Configuration Files</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>When running an Apache Isis webapp, configuration properties are read from configuration files held in the <code>WEB-INF</code> directory.</p>
+</div>
+<div class="paragraph">
+<p>The <code>WEBINF/isis.properties</code> file is always read and must exist.</p>
+</div>
+<div class="paragraph">
+<p>In addition, the following other properties are searched for and if present also read:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>viewer_wicket.properties</code> - if the <a href="ugvw.html">Wicket viewer</a> is in use</p>
+</li>
+<li>
+<p><code>viewer_restfulobjects.properties</code> - if the <a href="ugvro.html">RestfulObjects viewer</a> is in use</p>
+</li>
+<li>
+<p><code>viewer.properties</code> - for any other viewer configuration (but there are none currently)</p>
+</li>
+<li>
+<p><code>persistor_datanucleus.properties</code> - assuming the JDO/DataNucleus objectstore is in use</p>
+</li>
+<li>
+<p><code>persistor.properties</code> - for any other objectstore configuration. <br></p>
+<div class="paragraph">
+<p>This typically is used to hold <code>JDBC</code> <code>URL</code>s, which is arguably a slight violation of the file (because there’s nothing in Apache Isis to say that persistors have to use <code>JDBC</code>. However, it is generally convenient to put these <code>JDBC</code> settings into a single location. If you want, they could reside inin any of <code>persistor_datanucleus.properties</code>, <code>persistor.properties</code> or (even) <code>isis.properties</code></p>
+</div>
+</li>
+<li>
+<p><code>authentication_shiro.properties</code>, <code>authorization_shiro.properties</code></p>
+<div class="paragraph">
+<p>assuming the Shiro Security is in use (but there are no security-related config properties currently; use shiro.ini for Shiro config)</p>
+</div>
+</li>
+<li>
+<p><code>authentication.properties</code>, <code>authorization.properties</code><br></p>
+<div class="paragraph">
+<p>for any other security-related config properties (but there are none currently).</p>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>You can if you wish simply store all properties in the <code>isis.properties</code> file; but we think that breaking properties out into sections is preferable.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rgcfg_configuring-components">Specifying components</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Bootstrapping an Apache Isis application involves identifying both:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the major components (authentication, persistence mechanisms, viewers) of Apache Isis, and also</p>
+</li>
+<li>
+<p>specifying the domain services and persistent entities that make up the application itself.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>As of 1.9.0 there are two different ways to perform this bootstrapping. The recommended (newer) approach is to use an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a>, specified either programmatically or through the configuration properties. This allows the components, services and entities to be specified from a single class. The alternative (and older, pre 1.9.0) approach is to specify this information individually, through configuration properties.</p>
+</div>
+<div class="paragraph">
+<p>To specify the <code>AppManifest</code> as a configuration property, use:</p>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 2. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 16%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property</th>
+<th class="tableblock halign-left valign-top">Value<br>
+(<em>default value</em>)</th>
+<th class="tableblock halign-left valign-top">Implements</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.appManifest</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.applib.AppManifest</code><br></p>
+</div>
+<div class="paragraph">
+<p>By convention this implementation resides in an <code>myapp-app</code> Maven module (as opposed to <code>myapp-dom</code> or <code>myapp-fixture</code>). See the <a href="ug.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> for details.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>From this the framework can determine the domain services, persistent entities and security (authentication and authorization) mechanisms to use. Other configuration (including fixtures) can also be specified this way.</p>
+</div>
+<div class="paragraph">
+<p>If the <code>AppManifest</code> approach is <em>not</em> being used, then the following configuration properties are used to specify the major components of Apache Isis to use:</p>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 3. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 16%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property</th>
+<th class="tableblock halign-left valign-top">Value<br>
+(<em>default value</em>)</th>
+<th class="tableblock halign-left valign-top">Implements</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.authentication</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>shiro</code>, <code>bypass</code>, <code>FQCN</code><br>
+(<code><em>shiro</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core.runtime.authentication.</code> <code>AuthenticationManagerInstaller</code><br></p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <code>isis.appManifest</code> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.authorization</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>shiro</code>, <code>bypass</code>, <code>FQCN</code><br>
+(<code><em>shiro</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core.runtime.authorization.</code> <code>AuthorizationManagerInstaller</code><br></p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <code>isis.appManifest</code> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>datanucleus</code>
+(<code><em>datanucleus</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core.runtime.installerregistry.installerapi.</code> <code>PersistenceMechanismInstaller</code></p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED completely in 1.9.0+; the <code>datanucleus</code> implementation is always used.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services-installer</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configuration</code>, <code>configuration-and-annotation</code>, <code>FQCN</code><br>
+(<code><em>configuration</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>org.apache.isis.core.runtime.services.</code> <code>ServicesInstaller</code><br></p>
+</div>
+<div class="paragraph">
+<p>The mechanism to discover and load domain services:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>configuration-and-annotation</code> will search for <code>@DomainService</code>-annotated classes and also read from <code>isis.services</code> configuration property</p>
+</li>
+<li>
+<p><code>configuration</code> will only read from the <code>isis.services</code> configuration property.<br></p>
+</li>
+<li>
+<p>Otherwise an alternative implementation of the <code>o.a.i.core.runtime.services.ServicesInstaller</code> internal API can be provided.<br></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <code>isis.appManifest</code> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The values <code>"shiro"</code>, <code>"bypass"</code> etc are actually aliases for concrete implementations listed in Apache Isis' <code>installer-registry.properties</code> file (in <code>isis-core-runtime.jar</code>). It is — at least in theory — possible to specify a fully qualified class name to replace either of the two security components.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>If the <code>AppManifest</code> is <em>not</em> being used then there are number of other configuration properties that also must be specified: <code>isis.services</code>, <code>isis.services.ServicesInstallerFromAnnotation.packagePrefix</code> and <code>isis.persistor.datanucleus.RegisterEntities.packagePrefix</code> and <code>isis.fixtures</code>; these are listed in the sections below.</p>
+</div>
+<div class="sect2">
+<h3 id="_viewer_configuration">Viewer Configuration</h3>
+<div class="paragraph">
+<p>Viewers are specified by way of the filters and servlets in the <a href="ugbtb.html#_ugbtb_web-xml"><code>web.xml</code></a> file; these are not bootstrapped by the framework, rather it is the other way around. However, we can also hint to the framework as to which viewers are in use by way of a context parameter:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><context-param></span>
+ <span class="tag"><param-name></span>isis.viewers<span class="tag"></param-name></span>
+ <span class="tag"><param-value></span>wicket,restfulobjects<span class="tag"></param-value></span>
+<span class="tag"></context-param></span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The net effect of this configuration is simply to ensure that the <code>viewer_wicket.properties</code> and/or the <code>viewer_restfulobjects.properties</code> files are read.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rgcfg_configuring-core">Configuring Core</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This section lists the core/runtime configuration properties recognized by Apache Isis.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Configuration properties for the JDO/DataNucleus objectstore can be found in the <a href="#_rgcfg_configuring-datanucleus">Configuring DataNucleus</a> section later in this chapter, while configuration properties for the viewers can be found in the their respective chapters, <a href="ugvw.html#_ugvw_configuration-properties">here for Wicket viewer</a>, and <a href="ugvro.html#_ugvro_configuration-properties">here for the Restful Objects viewer</a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 4. Core Configuration Properties</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 16%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property</th>
+<th class="tableblock halign-left valign-top">Value<br>
+(default value)</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.object.</code><br>
+<code>editing</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether objects' properties and collections can be edited directly (for objects annotated with <a href="rgant.html#_rgant-DomainObject_editing"><code>@DomainObject#editing()</code></a>); see <a href="#_rgcfg_configuring-core_isis-objects-editing">below</a> for further discussion.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.</code><br>
+<code>disableConcurrencyChecking</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Disables concurrency checking globally. <br></p>
+</div>
+<div class="paragraph">
+<p>Only intended for "emergency use" as a workaround while pending fix/patch to Apache Isis itself. (Note that there is no "datanucleus" in the property).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>actionAnnotation.</code><br>
+<code>domainEvent.postForDefault</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-Action_domainEvent"><code>@Action#domainEvent()</code></a> is not specified (is set to <code>ActionDomainEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>collectionAnnotation.</code><br>
+<code>domainEvent.postForDefault</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-Collection_domainEvent"><code>@Collection#domainEvent()</code></a> is not specified (is set to <code>CollectionDomainEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>cssClass.patterns</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">regex:css1, regex2:css2,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Comma separated list of key:value pairs, where the key is a regex matching action names (eg <code>delete.*</code>) and the value is a <a href="http://getbootstrap.com/css/">Bootstrap</a> CSS button class (eg <code>btn-warning) to be applied (as per `@CssClass()</code>) to all action members matching the regex.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ug.html#_ugfun_how-tos_ui-hints_action-icons-and-css">UI hints</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>cssClassFa.patterns</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">regex:fa-icon,regex2:fa-icon2,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Comma separated list of key:value pairs, where the key is a regex matching action names (eg <code>create.*</code>) and the value is a <a href="http://fortawesome.github.io/Font-Awesome/icons/">font-awesome</a> icon name (eg <code>fa-plus</code>) to be applied (as per <code>@CssClassFa()</code>) to all action members matching the regex.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ug.html#_ugfun_how-tos_ui-hints_action-icons-and-css">UI hints</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>createdLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_createdLifecycleEvent"><code>@DomainObject#createdLifecycleEvent()</code></a> is not specified (is set to <code>ObjectCreatedEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>loadedLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_loadedLifecycleEvent"><code>@DomainObject#loadedLifecycleEvent()</code></a> is not specified (is set to <code>ObjectLoadedEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>persistingLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_persistingLifecycleEvent"><code>@DomainObject#persistingLifecycleEvent()</code></a> is not specified (is set to <code>ObjectPersistingEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>persistedLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_persistedLifecycleEvent"><code>@DomainObject#persistedLifecycleEvent()</code></a> is not specified (is set to <code>ObjectPersistedEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>removingLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_removingLifecycleEvent"><code>@DomainObject#removingLifecycleEvent()</code></a> is not specified (is set to <code>ObjectRemovingEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>updatingLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_updatingLifecycleEvent"><code>@DomainObject#updatingLifecycleEvent()</code></a> is not specified (is set to <code>ObjectUpdatingEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectAnnotation.</code><br>
+<code>updatedLifecycleEvent.</code><br>
+<code>postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObject_updatedLifecycleEvent"><code>@DomainObject#updatedLifecycleEvent()</code></a> is not specified (is set to <code>ObjectUpdatedEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectLayoutAnnotation.</code><br>
+<code>cssClassUiEvent.postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObjectLayout_cssClassUiEvent"><code>@DomainObjectLayout#cssClassUiEvent()</code></a> is not specified (is set to <code>CssClassUiEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectLayoutAnnotation.</code><br>
+<code>iconUiEvent.postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObjectLayout_iconUiEvent"><code>@DomainObjectLayout#iconUiEvent()</code></a> is not specified (is set to <code>IconUiEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>domainObjectLayoutAnnotation.</code><br>
+<code>titleUiEvent.postForDefault</code><br>
+(<code>1.11.0-SNAPSHOT</code>)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-DomainObjectLayout_titleUiEvent"><code>@DomainObjectLayout#titleUiEvent()</code></a> is not specified (is set to <code>TitleUiEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>filterVisibility</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether objects should be filtered for visibility.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="#_rgcfg_configuring-core_filterVisibility">section below</a> for further discussion.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facet.</code><br>
+<code>propertyAnnotation.</code><br>
+<code>domainEvent.postForDefault</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether an event should be posted if <a href="rgant.html#_rgant-Property_domainEvent"><code>@Property#domainEvent()</code></a> is not specified (is set to <code>PropertyDomainEvent.Default</code>).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facets</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Fully qualified class names of a custom implementation of <code>ProgrammingModel</code> interface.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ugbtb.html#_ugbtb_programming-model_finetuning">finetuning the programming model</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facets.</code><br>
+<code>exclude</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code>,<code>FQCN2</code>,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Fully qualified class names of (existing, built-in) facet factory classes to be included to the programming model.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ugbtb.html#_ugbtb_programming-model_finetuning">finetuning the programming model</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.facets.</code><br>
+<code>include</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code>,<code>FQCN2</code>,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Fully qualified class names of (new, custom) facet factory classes to be included to the programming model.<br>
+See <a href="ugbtb.html#_ugbtb_programming-model_finetuning">finetuning the programming model</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.</code><br>
+<code>layoutMetadataReaders</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code>,<code>FQCN2</code>,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Fully qualified class names of classes to be instantiated to read layout metadata, as used in for <a href="ug.html#_ugfun_object-layout_dynamic">dynamic layout</a>s.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ugbtb.html#_ugbtb_programming-model_layout-metadata-reader">Layout Metadata Reader</a> for more information.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.validator</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Custom implementation of <code>MetaModelValidator</code> (in the <code>org.apache.isis.core.metamodel.specloader.validator</code> package)<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ugbtb.html#_ugbtb_programming-model_custom-validator">Custom Validator</a> to learn more.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.reflector.validator.</code><br>
+<code>allowDeprecated</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether deprecated annotations or naming conventions are tolerated or not. If not, then a metamodel validation error will be triggered, meaning the app won’t boot (fail-fast).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code>,<code>FQCN2</code>,…​</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Fully qualified class names of classes to be instantiated as domain services. <br></p>
+</div>
+<div class="paragraph">
+<p>Each entry can be optionally prefixed by "n:" specifying the relative order on the menu (corresponds to <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>).</p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <a href="#_rgcfg_configuring-components"><code>isis.appManifest</code></a> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>audit.objects</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>all</code>, <code>none</code><br>
+(<code>all</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether the changed properties of objects should be automatically audited (for objects annotated with <a href="rgant.html#_rgant-DomainObject_auditing"><code>@DomainObject(auditing=Auditing.AS_CONFIGURED)</code></a>.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>command.actions</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>all</code>, <code>ignoreSafe</code>, <code>none</code> (<code>all</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether actions should be automatically reified into commands (for actions annotated with <a href="rgant.html#_rgant-Action_command"><code>@Action(command=CommandReification.AS_CONFIGURED)</code></a>. <br></p>
+</div>
+<div class="paragraph">
+<p><code>ignoreQueryOnly</code> is an alias for <code>ignoreSafe</code>.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>container.disableAutoFlush</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether the <code>DomainObjectContainer</code> should automatically flush pending changes prior to querying (via <code>allMatches()</code>, <code>firstMatch()</code> and so on).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>container.disableAutoFlush</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether the <code>DomainObjectContainer</code> should automatically flush pending changes prior to querying (via <code>allMatches()</code>, <code>firstMatch()</code> and so on).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>ContentNegotiation-</code><br>
+<code>ServiceXRoDomainType</code><br>
+.prettyPrint</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(depends)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>If a domain object has been mapped to the specified JAXB <code>x-ro-domain-type</code>, then determines whether the result is pretty-printed or not.<br></p>
+</div>
+<div class="paragraph">
+<p>+
+If no configuration property is available, then the defaults is determined by the <a href="#_rgcfg_deployment-types">deployment type</a>: production mode disables pretty printing, while prototype mode enables it.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.service.</code><br>
+<code>email.tls.enabled</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>true</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether to enable TLS for the email SMTP connection (used by <a href="rgsvc.html#_rgsvc-api_EmailService"><code>EmailService</code></a>). <br></p>
+</div>
+<div class="paragraph">
+<p>NB: note that the key is mis-spelt, (<code>isis.service.email</code> rather than <code>isis.services.email</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.service.</code><br>
+<code>email.sender.hostname</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">host (<code><em>smtp.gmail.com</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>The hostname of the external SMTP provider (used by <a href="rgsvc.html#_rgsvc-api_EmailService"><code>EmailService</code></a>). <br></p>
+</div>
+<div class="paragraph">
+<p>NB: note that the key is mis-spelt, (<code>isis.service.email</code> rather than <code>isis.services.email</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.service.</code><br>
+<code>email.port</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">port number (<code><em>587</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>The port number for the SMTP service on the the external SMTP host (used by <a href="rgsvc.html#_rgsvc-api_EmailService"><code>EmailService</code></a>). <br></p>
+</div>
+<div class="paragraph">
+<p>NB: note that the key is mis-spelt, (<code>isis.service.email</code> rather than <code>isis.services.email</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.service.</code><br>
+<code>email.sender.address</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">email address</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>The email address to use for sending out email (used by <a href="rgsvc.html#_rgsvc-api_EmailService"><code>EmailService</code></a>). <strong>Mandatory</strong>. <br></p>
+</div>
+<div class="paragraph">
+<p>NB: note that the key is mis-spelt, (<code>isis.service.email</code> rather than <code>isis.services.email</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.service.</code><br>
+<code>email.sender.password</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">email password</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>The corresponding password for the email address to use for sending out email (used by <a href="rgsvc.html#_rgsvc-api_EmailService"><code>EmailService</code></a>). <strong>Mandatory</strong>. <br></p>
+</div>
+<div class="paragraph">
+<p>NB: note that the key is mis-spelt, (<code>isis.service.email</code> rather than <code>isis.services.email</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>eventbus.implementation</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>guava</code>, <code>axon</code>,<br>
+FQCN (<code><em>guava</em></code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>which implementation to use by the <a href="rgsvc.html#_rgsvc-api_EventBusService"><code>EventBusService</code></a> as the underlying event bus.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>eventbus.allowLateRegistration</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>whether a domain service can register with the <a href="rgsvc.html#_rgsvc-api_EventBusService"><code>EventBusService</code></a> after any events have posted.<br></p>
+</div>
+<div class="paragraph">
+<p>Since this almost certainly constitutes a bug in application code, by default this is disallowed.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>exceprecog.logRecognizedExceptions</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>whether recognized exceptions should also be logged.<br></p>
+</div>
+<div class="paragraph">
+<p>Generally a recognized exception is one that is expected (for example a uniqueness constraint violated in the database) and which does not represent an error condition. This property logs the exception anyway, useful for debugging.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>ExceptionRecognizerComposite-</code><br>
+<code>ForJdoObjectStore.disable</code><br></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code>,<code>false</code><br>
+(<code>false</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>whether to disable the default recognizers registered by <code>ExceptionRecognizerCompositeForJdoObjectStore</code>.<br></p>
+</div>
+<div class="paragraph">
+<p>This implementation provides a default set of recognizers to convert RDBMS constraints into user-friendly messages. In the (probably remote) chance that this functionality isn’t required, they can be disabled through this flag.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>publish.objects</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>all</code>, <code>none</code><br>
+(<code>all</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether changed objects should be automatically published (for objects annotated with <a href="rgant.html#_rgant-DomainObject_publishing"><code>@DomainObject(publishing=Publishing.AS_CONFIGURED)</code></a>.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>publish.actions</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>all</code>, <code>ignoreSafe</code>, <code>none</code> (<code>all</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether actions should be automatically published (for actions annotated with <a href="rgant.html#_rgant-Action_publishing"><code>@Action(publishing=Publishing.AS_CONFIGURED)</code></a>.<br></p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>ServicesInstallerFromAnnotation.</code><br>
+<code>packagePrefix</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fully qualified package names (CSV)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>to search for domain services (including all subpackages).</p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <a href="#_rgcfg_configuring-components"><code>isis.appManifest</code></a> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.services.</code><br>
+<code>translation.po.mode</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>read</code>,<code>write</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Whether to force the <code>TranslationService</code> into either read or write mode.<br></p>
+</div>
+<div class="paragraph">
+<p>See <a href="ugbtb.html#_ugbtb_more-advanced_i18n">i18n support</a> to learn more about the translation service.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.viewers.</code><br>
+<code>paged.parented</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">positive integer (12)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Default page size for parented collections (as owned by an object, eg <code>Customer#getOrders()</code>)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.viewers.</code><br>
+<code>paged.standalone</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">positive integer (25)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Default page size for standalone collections (as returned from an action invocation)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.viewers.</code><br>
+<code>propertyLayout.labelPosition</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TOP</code>, <code>LEFT</code><br>
+(<code>LEFT</code>)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Default for label position for all properties if not explicitly specified using <a href="rgant.html#_rgant-PropertyLayout_labelPosition"><code>@PropertyLayout#labelPosition()</code></a></p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-core_filterVisibility">Filtering visibility</h3>
+<div class="paragraph">
+<p>The framework provides the <code>isis.reflector.facet.filterVisibility</code> configuration property that influences whether a returned object is visible to the end-user:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Action invocations:<br></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If an action returns a collection that includes the object, then the object will be excluded from the list when rendered. If it returns a single object and the user does not have access to that object, then the action will seemingly return <code>null</code></p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Collections:<br></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If a parent object has a collection references another object to which the user does not have access, then (as for actions) the object will not be rendered in the list</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Properties:<br></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If an parent object has a (scalar) reference some other object to which the user does not have access, then the reference will be rendered as empty.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Choices and autoComplete lists:<br></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If an object is returned in a list of choices or within an auto-complete list, and the user does not have access, then it is excluded from the rendered list.</p>
+</div>
+<div class="paragraph">
+<p>The original motivation for this feature was to transparently support such features as multi-tenancy (as per the (non-ASF) <a href="http://github.com/isisaddons/isis-module-security">Isis addons' security</a> module). That is, if an entity is logically "owned" by a user, then the multi-tenancy support can be arranged to prevent some other user from viewing that object.</p>
+</div>
+<div class="paragraph">
+<p>By default this configuration property is enabled. To disable the visibility filtering, set the appropriate configuration property to <code>false</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="ini">isis.reflector.facet.filterVisibility=false</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Filtering is supported by the Wicket viewer, and by the <a href="rgsvc.html#<em>rgsvc-api_WrapperFactory"><code>WrapperFactory</code></a> domain service (provided the wrapper’s execution mode is _not</em> "skip rules"). However the Restful Objects viewer does <em>not</em> currently support filtering.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In order for the framework to perform this filtering of collections, be aware that the framework takes a <em>copy</em> of the original collection, filters on the collection, and returns that filtered collection rather than the original.</p>
+</div>
+<div class="paragraph">
+<p>There are no major side-effects from this algorithm, other than the fact that the referenced objects will (most likely) need to be resolved in order to determine if they are visible. This could conceivably have a performance impact in some cases.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-core_isis-objects-editing"><code>objects.editing</code></h3>
+<div class="paragraph">
+<p>This configuration property in effect allows editing to be disabled globally for an application:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="ini">isis.objects.editing=false</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We recommend enabling this feature; it will help drive out the underlying business operations (processes and procedures) that require objects to change; these can then be captured as business actions.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-core_isis-viewers-propertyLayout-labelPosition"><code>propertyLayout.labelPosition</code></h3>
+<div class="paragraph">
+<p>If you want a consistent look-n-feel throughout the app, eg all property labels to the top, then it’d be rather
+frustrating to have to annotate every property.</p>
+</div>
+<div class="paragraph">
+<p>Instead, a default can be specified in <code>isis.properties</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="ini">isis.viewers.propertyLayout.labelPosition=TOP</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="ini">isis.viewers.propertyLayout.labelPosition=LEFT</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If these are not present then Apache Isis will render according to internal defaults. At the time of writing, this means labels are to the left for all datatypes except multiline strings.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rgcfg_configuring-datanucleus">Configuring DataNucleus</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Apache Isis programmatically configures DataNucleus; any Apache Isis properties with the prefix <code>isis.persistor.datanucleus.impl</code> are passed through directly to the JDO/DataNucleus objectstore (with the prefix stripped off, of course).</p>
+</div>
+<div class="paragraph">
+<p>DataNucleus will for itself also and read the <code>META-INF/persistence.xml</code>; at a minimum this defines the name of the "persistence unit". n theory it could also hold mappings, though in Apache Isis we tend to use annotations instead.</p>
+</div>
+<div class="paragraph">
+<p>Furthermore, DataNucleus will search for various other XML mapping files, eg <code>mappings.jdo</code>. A full list can be found <a href="http://www.datanucleus.org/products/datanucleus/jdo/metadata.html">here</a>. The metadata in these XML can be used to override the annotations of annotated entities; see <a href="ugbtb.html#_ugbtb_more-advanced_overriding-jdo-annotations">Overriding JDO Annotatons</a> for further discussion.</p>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-datanucleus_properties">Configuration Properties</h3>
+<div class="paragraph">
+<p>These configuration properties are typically stored in <code>WEB-INF/persistor_datanucleus.properties</code>. However, you can place all configuration properties into <code>WEB-INF/isis.properties</code> if you wish (the configuration properties from all config files are merged together).</p>
+</div>
+<div class="sect3">
+<h4 id="_configuration_properties_for_apache_isis_itself">Configuration Properties for Apache Isis itself</h4>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 5. JDO/DataNucleus Objectstore Configuration Properties</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 16%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property</th>
+<th class="tableblock halign-left valign-top">Value<br>
+(<em>default value</em>)</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.</code><br>
+<code>datanucleus.</code><br>
+<code>classMetadataLoadedListener</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>FQCN</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>The default (<code>o.a.i.os.jdo.dn.CreateSchemaObjectFromClassMetadata</code>) creates a DB schema object</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.datanucleus.</code><br>
+<code>RegisterEntities.packagePrefix</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fully qualified package names (CSV)</p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>that specifies the entities early rather than allow DataNucleus to find the entities lazily. Further <a href="#_rgcfg_configuring-datanucleus_eagerly-registering-entities">discussion below</a>.</p>
+</div>
+<div class="paragraph">
+<p>This property is IGNORED if the <a href="#_rgcfg_configuring-components"><code>isis.appManifest</code></a> configuration property is specified, or if an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a> is provided programmatically.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.datanucleus.</code><br>
+<code>PublishingService.serializedForm</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zipped</p></td>
+<td class="tableblock halign-left valign-top"><div></div></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_configuration_properties_passed_through_directly_to_datanucleus">Configuration Properties passed through directly to DataNucleus.</h4>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 6. JDO/DataNucleus Objectstore Configuration Properties</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 16%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property</th>
+<th class="tableblock halign-left valign-top">Value<br>
+(<em>default value</em>)</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.datanucleus.impl.*</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Passed through directly to Datanucleus (with <code>isis.persistor.datanucleus.impl</code> prefix stripped)</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>isis.persistor.datanucleus.impl.</code><br>
+<code>datanucleus.persistenceByReachabilityAtCommit</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>We recommend this setting is disabled. <br>
+Further <a href="#_rgcfg_configuring-datanucleus_disabling-persistence-by-reachability">discussion below</a>.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-datanucleus_persistence-xml"><code>persistence.xml</code></h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-datanucleus_eagerly-registering-entities">Eagerly Registering Entities</h3>
+<div class="paragraph">
+<p>Both Apache Isis and DataNucleus have their own metamodels of the domain entities. Apache Isis builds its metamodel by walking the graph of types of the domain services. The JDO/DataNucleus objectstore then takes these types and registers them with DataNucleus.</p>
+</div>
+<div class="paragraph">
+<p>In some cases, though, not every entity type is discoverable from the API of the service actions. This is especially the case if you have lots of subtypes (where the action method specifies only the supertype). In such cases the Isis and JDO metamodels is built lazily, when an instance of that (sub)type is first encountered.</p>
+</div>
+<div class="paragraph">
+<p>Apache Isis is quite happy for the metamodel to be lazily created, and - to be fair - DataNucleus also works well in most cases. In some cases, though, we have found that the JDBC driver (eg HSQLDB) will deadlock if DataNucleus tries to submit some DDL (for a lazily discovered type) intermingled with DML (for updating). In any case, it’s probably not good practice to have DataNucleus work this way.</p>
+</div>
+<div class="paragraph">
+<p>The framework thus provide mechanisms to search for all <code>@PersistenceCapable</code> entities under specified package(s), and registers them all eagerly. In fact there are two:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>as of 1.9.0 the recommended (and simpler) approach is to specify an <a href="rgcms.html#_rgcms_classes_super_AppManifest"><code>AppManifest</code></a>, either as a <a href="#_rgcfg_configuring-components"><code>isis.appManifest</code></a> configuration property or programmatically.</p>
+</li>
+<li>
+<p>for earlier versions the <code>isis.persistor.datanucleus.RegisterEntities.packagePrefix</code> configuration property can be specified. To bootstrap as a webapp this is usually specified in <code>persistor_datanucleus.properties</code>. (This is also supported in 1.9.0 if no <code>AppManifest</code> is specified. For integration testing this can be specified programatically.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Further discussion on specifying the package(s) in integration testing (for either approach) can be found in the <a href="ugtst.html#_ugtst_integ-test-support_bootstrapping">user guide</a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rgcfg_configuring-datanucleus_disabling-persistence-by-reachability">Persistence by Reachability</h3>
+<div class="paragraph">
+<p>By default, JDO/DataNucleus supports the concept of <a href="http://www.datanucleus.org/products/datanucleus/jdo/orm/cascading.html">persistence-by-reachability</a>. That is, if
+a non-persistent entity is associated with an already-persistent entity, then DataNucleus will detect this and will automatically persist the associated object. Put another way: there is no need to call Apache Isis' <code>DomainObjectContainer#persist(.)</code> or <code>DomainObjectContainer#persistIfNotAlready(.)</code> methods.</p>
+</div>
+<div class="paragraph">
+<p>However, convenient though this feature is, you may find that it causes performance issues.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>DataNucleus' persistence-by-reachability may cause performance issues. We strongly recommend that you disable it.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>One scenario in particular where this performance issues can arise is if your entities implement the <code>java.lang.Comparable</code> interface, and you have used Apache Isis' <a href="rgcms.html#_rgcms_classes_utility_ObjectContracts"><code>ObjectContracts</code></a> utility class. The issue here is that <code>ObjectContracts</code> implementation can cause DataNucleus to recursively rehydrate a larger number of associated entities. (More detail below).</p>
+</div>
+<div class="paragraph">
+<p>We therefore recommend that you disable persistence-by-reachability by adding the following to <code>persistor_datanucleus.properties</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="ini">isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit=false</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This change has been made to the <a href="ug.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a></p>
+</div>
+<div class="paragraph">
+<p>If you do disable this feature, then you will (of course) need to ensure that you explicitly persist all entities using the <code>DomainObjectContainer#persist(.)</code> or <code>DomainObjectContainer#persistIfNotAlready(.)</code> methods.</p>
+</div>
+<div class="sect3">
+<h4 id="_the_issue_in_more_detail">The issue in more detail</h4>
+<div class="paragraph">
+<p>Consider these entities (<a href="http://yuml.me/edit/b8681268">yuml.me/b8681268</a>):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/runtime/configuring-datanucleus/disabling-persistence-by-reachability/party-agreementrole-agreement.png" alt="party agreementrole agreement" width="750px">
+</div>
+</div>
+<div class="paragraph">
+<p>In the course of a transaction, the <code>Agreement</code> entity is loaded into memory (not necessarily modified), and then new <code>AgreementRole</code>s are associated to it.</p>
+</div>
+<div class="paragraph">
+<p>All these entities implement <code>Comparable</code> using <code>ObjectContracts</code>, and the implementation of <code>AgreementRole</code>'s (simplified) is:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">AgreementRole</span> {
+ ...
+ public <span class="type">int</span> compareTo(AgreementRole other) {
+ <span class="keyword">return</span> ObjectContracts.compareTo(<span class="local-variable">this</span>, other, <span class="string"><span class="delimiter">"</span><span class="content">agreement</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">startDate</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">party</span><span class="delimiter">"</span></span>);
+ }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>while <code>Agreemen
<TRUNCATED>