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 2018/09/18 07:31:13 UTC
[41/51] [partial] isis-site git commit: ISIS-1899: republishes 1.16.2
docs
http://git-wip-us.apache.org/repos/asf/isis-site/blob/dd05aaf7/content/guides/rgant/rgant.html
----------------------------------------------------------------------
diff --git a/content/guides/rgant/rgant.html b/content/guides/rgant/rgant.html
index 2526129..42be192 100644
--- a/content/guides/rgant/rgant.html
+++ b/content/guides/rgant/rgant.html
@@ -221,16 +221,17 @@ table.CodeRay td.code>pre{padding:0}
<li role="separator" class="divider"></li>
<li class="dropdown-header">Other Resources</li>
<li><a href="https://issues.apache.org/jira/browse/ISIS">ASF JIRA</a></li>
- <li><a href="http://stackoverflow.com/questions/tagged/isis">Stack Overflow</a></li>
+ <li><a href="https://stackoverflow.com/questions/tagged/isis">Stack Overflow</a></li>
<li><a href="../../help.html">Wiki, Fisheye etc.</a></li>
</ul> </li>
<li class="dropdown hidden-sm hidden-md"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">@ASF<span class="caret"></span></a>
<ul class="dropdown-menu">
- <li><a href="http://www.apache.org/">Apache Homepage</a></li>
- <li><a href="http://www.apache.org/licenses/">Licenses</a></li>
- <li><a href="http://www.apache.org/security/">Security</a></li>
- <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
- <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+ <li><a href="https://www.apache.org/">Apache Homepage</a></li>
+ <li><a href="https://www.apache.org/events/current-event">Events</a></li>
+ <li><a href="https://www.apache.org/licenses/">Licenses</a></li>
+ <li><a href="https://www.apache.org/security/">Security</a></li>
+ <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
<li role="separator" class="divider"></li>
<li><a href="https://whimsy.apache.org/board/minutes/Isis.html">PMC board minutes</a></li>
</ul> </li>
@@ -339,7 +340,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
<div class="ulist">
<ul>
- <li> <p>if a collection should be rendered "open" rather than collapsed, it can be annotated using <code>@CollectionLayout(render=RenderType.EAGERLY)</code></p> </li>
+ <li> <p>if a collection should be rendered "open" rather than collapsed, it can be annotated using <code>@CollectionLayout(defaultView="table")</code></p> </li>
<li> <p>if an action has a tooltip, it can be annotated using <code>@ActionLayout(describedAs=…)</code></p> </li>
<li> <p>if a domain object is bookmarkable, it can be annotated using <code>@DomainObjectLayout(bookmarking=BookmarkPolicy.AS_ROOT</code>).</p> </li>
</ul>
@@ -762,14 +763,14 @@ table.CodeRay td.code>pre{padding:0}
<p>Used to build Apache Isis' own internal identifier for objects.<br></p>
</div>
<div class="paragraph">
- <p>If the <code>schema()</code> attribute is specified (and if <a href="../rgant/rgant.html#<em>rgant-Discriminator"><code>@Discriminator</code></a> _hasn’t been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for <a href="../ugvro/ugvro.html">RestfulObjects viewer</a> and elsewhere.</p>
+ <p>If the <code>schema()</code> attribute is specified (and if <a href="../rgant/rgant.html#\_rgant-Discriminator"><code>@Discriminator</code></a> <em>hasn’t</em> been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for <a href="../ugvro/ugvro.html">RestfulObjects viewer</a> and elsewhere.</p>
</div>
</div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Domain / persistence</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Class</p></td>
</tr>
<tr>
- <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgant/rgant.html#_rgant-PrimaryKey"><code>@javax.jdo.annotations.</code><br> <code>PrimaryKey</code></a></p></td>
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgant/rgant.html#\_rgant-PrimaryKey"><code>@javax.jdo.annotations.</code><br> <code>PrimaryKey</code></a></p></td>
<td class="tableblock halign-left valign-top">
<div>
<div class="paragraph">
@@ -5600,7 +5601,7 @@ WrapperFactory wrapperFactory;</code></pre>
<li> <p>whether the domain object has been configured as immutable through the <a href="../rgant/rgant.html#_rgant-DomainObject_editing"><code>@DomainObject#editing()</code></a> attribute</p> </li>
<li> <p>else (that is, if the domain object’s editability is specified as being <code>AS_CONFIGURED</code>), then the value of the <a href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> <code>isis.objects.editing</code>. If set to <code>false</code>, then the object’s collections (and properties) are <strong>not</strong> editable</p> </li>
<li> <p>else, then the value of the <code>@Collection(editing=…)</code> attribute itself.</p> </li>
- <li> <p>else, the result of invoking any supporting <a href="../rgcms/rgcms.html#_rgcms_methods_prefixes_disable"><code>disable…()</code></a> supporting methods</p> </li>
+ <li> <p>else, the result of invoking any supporting <a href="../rgcms/rgcms.html#\_rgcms_methods_prefixes_disable"><code>disable…()</code></a> supporting methods</p> </li>
</ul>
</div>
<div class="paragraph">
@@ -5818,7 +5819,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">void</span> Customer {
- <span class="annotation">@TypeOf</span>(Order.class)
+ <span class="annotation">@Collection</span>(typeOf=Order.class)
<span class="directive">public</span> <span class="predefined-type">SortedSet</span> getOutstandingOrders() { ... }
...
}</code></pre>
@@ -6646,7 +6647,17 @@ WrapperFactory wrapperFactory;</code></pre>
<p>This section identifies which attributes of <code>@Column</code> are recognized and used by Apache Isis.</p>
</div>
<div class="sect2">
- <h3 id="_nullability">7.1. Nullability</h3>
+ <h3 id="_rgant-Column_allowsNull">7.1. Nullability</h3>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_allowsNull.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_allowsNull.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_allowsNull.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_allowsNull.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_allowsNull.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
<div class="paragraph">
<p>The <code>allowsNull()</code> attribute is used to specify if a property is mandatory or is optional.</p>
</div>
@@ -6672,7 +6683,17 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
</div>
<div class="sect2">
- <h3 id="_length_for_code_string_code_s">7.2. Length for <code>String</code>s</h3>
+ <h3 id="_rgant-Column_length">7.2. Length for <code>String</code>s</h3>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
<div class="paragraph">
<p>The <code>length()</code> attribute is used to specify the length of <code>java.lang.String</code> property types as they map to <code>varchar(n)</code> columns.</p>
</div>
@@ -6698,7 +6719,17 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
</div>
<div class="sect2">
- <h3 id="_length_scale_for_code_bigdecimal_code_s">7.3. Length/scale for <code>BigDecimal</code>s</h3>
+ <h3 id="_rgant-Column_length-scale">7.3. Length/scale for <code>BigDecimal</code>s</h3>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length-scale.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length-scale.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length-scale.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length-scale.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_length-scale.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
<div class="paragraph">
<p>The <code>length()</code> and <code>scale()</code> attributes are used to infer the precision/scale of <code>java.math.BigDecimal</code> property types as they map to <code>decimal(n,p)</code> columns.</p>
</div>
@@ -6714,19 +6745,39 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
</div>
<div class="paragraph">
- <p>For <code>BigDecimal</code>s it is also possible to specify the <a href="../rgant/rgant.html#<em>rgant-Digits"><code>@Digits</code></a> annotation, whose form is <code>@Digits(integer, fraction)</code>. There is a subtle difference here: while <code>@Column#scale()</code> corresponds to <code>@Digits#fraction()</code>, the value of <code>@Column#length()</code> (ie the precision) is actually the _sum of the <code>@Digits’ `integer()</code> and <code>fraction()</code> parts.</p>
+ <p>For <code>BigDecimal</code>s it is also possible to specify the <a href="../rgant/rgant.html#\_rgant-Digits"><code>@Digits</code></a> annotation, whose form is <code>@Digits(integer, fraction)</code>. There is a subtle difference here: while <code>@Column#scale()</code> corresponds to <code>@Digits#fraction()</code>, the value of <code>@Column#length()</code> (ie the precision) is actually the <em>sum</em> of the <code>@Digits’ `integer()</code> and <code>fraction()</code> parts.</p>
</div>
<div class="paragraph">
<p>If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.</p>
</div>
</div>
<div class="sect2">
- <h3 id="_hints_and_tips">7.4. Hints and Tips</h3>
+ <h3 id="_rgant-Column_hints-and-tips">7.4. Hints and Tips</h3>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
<div class="paragraph">
<p>This seems to be a good place to describe some additional common mappings that use <code>@Column</code>. Unlike the sections above, the attributes specified in these hints and tips aren’t actually part of Apache Isis metamodel.</p>
</div>
<div class="sect3">
- <h4 id="_mapping_foreign_keys">7.4.1. Mapping foreign keys</h4>
+ <h4 id="_rgant-Column_hints-and-tips_mapping-foreign-keys">7.4.1. Mapping foreign keys</h4>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-foreign-keys.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-foreign-keys.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-foreign-keys.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-foreign-keys.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-foreign-keys.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
<div class="paragraph">
<p>The <code>name()</code> attribute can be used to override the name of the column. References to other objects are generally mapped as foreign key columns. If there are multiple references to a given type, then you will want to override the name that JDO/DataNucleus would otherwise default.</p>
</div>
@@ -6747,18 +6798,27 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
</div>
</div>
- </div>
- <div class="sect2">
- <h3 id="_mapping_code_blob_code_s_and_code_clob_code_s">7.5. Mapping <code>Blob</code>s and <code>Clob</code>s</h3>
- <div class="paragraph">
- <p>Isis provides custom value types for <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Blob"><code>Blob</code></a>s and <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Clob"><code>Clob</code></a>s. These value types have multiple internal fields, meaning that they corresponding to multiple columns in the database. Mapping this correctly requires using <code>@Column</code> within JDO’s <code>@Persistent</code> annotation.</p>
- </div>
- <div class="paragraph">
- <p>For example, here’s how to map a <code>Blob</code> (taken from (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a>):</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">Blob</span> attachment;
+ <div class="sect3">
+ <h4 id="_rgant-Column_hints-and-tips_mapping-blobs-and-clobs">7.4.2. Mapping <code>Blob</code>s and <code>Clob</code>s</h4>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-blobs-and-clobs.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-blobs-and-clobs.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-blobs-and-clobs.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-blobs-and-clobs.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column_hints-and-tips_mapping-blobs-and-clobs.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
+ <div class="paragraph">
+ <p>Isis provides custom value types for <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Blob"><code>Blob</code></a>s and <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Clob"><code>Clob</code></a>s. These value types have multiple internal fields, meaning that they corresponding to multiple columns in the database. Mapping this correctly requires using <code>@Column</code> within JDO’s <code>@Persistent</code> annotation.</p>
+ </div>
+ <div class="paragraph">
+ <p>For example, here’s how to map a <code>Blob</code> (taken from (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a>):</p>
+ </div>
+ <div class="listingblock">
+ <div class="content">
+ <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">Blob</span> attachment;
<span class="annotation">@javax</span>.jdo.annotations.Persistent(defaultFetchGroup=<span class="string"><span class="delimiter">"</span><span class="content">false</span><span class="delimiter">"</span></span>, columns = {
<span class="annotation">@javax</span>.jdo.annotations.Column(name = <span class="string"><span class="delimiter">"</span><span class="content">attachment_name</span><span class="delimiter">"</span></span>),
<span class="annotation">@javax</span>.jdo.annotations.Column(name = <span class="string"><span class="delimiter">"</span><span class="content">attachment_mimetype</span><span class="delimiter">"</span></span>),
@@ -6770,14 +6830,14 @@ WrapperFactory wrapperFactory;</code></pre>
)
<span class="directive">public</span> <span class="predefined-type">Blob</span> getAttachment() { ... }
<span class="directive">public</span> <span class="type">void</span> setAttachment(<span class="predefined-type">Blob</span> attachment) { ... }</code></pre>
+ </div>
</div>
- </div>
- <div class="paragraph">
- <p>And here’s how to map a <code>Clob</code> (also taken from the todoapp):</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">Clob</span> doc;
+ <div class="paragraph">
+ <p>And here’s how to map a <code>Clob</code> (also taken from the todoapp):</p>
+ </div>
+ <div class="listingblock">
+ <div class="content">
+ <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">Clob</span> doc;
<span class="annotation">@javax</span>.jdo.annotations.Persistent(defaultFetchGroup=<span class="string"><span class="delimiter">"</span><span class="content">false</span><span class="delimiter">"</span></span>, columns = {
<span class="annotation">@javax</span>.jdo.annotations.Column(name = <span class="string"><span class="delimiter">"</span><span class="content">doc_name</span><span class="delimiter">"</span></span>),
<span class="annotation">@javax</span>.jdo.annotations.Column(name = <span class="string"><span class="delimiter">"</span><span class="content">doc_mimetype</span><span class="delimiter">"</span></span>),
@@ -6788,6 +6848,7 @@ WrapperFactory wrapperFactory;</code></pre>
)
<span class="directive">public</span> <span class="predefined-type">Clob</span> getDoc() { ... }
<span class="directive">public</span> <span class="type">void</span> setDoc(<span class="directive">final</span> <span class="predefined-type">Clob</span> doc) { ... }</code></pre>
+ </div>
</div>
</div>
</div>
@@ -7207,7 +7268,7 @@ WrapperFactory wrapperFactory;</code></pre>
</ul>
</div>
<div class="paragraph">
- <p>The <code>auditing()</code> attribute indicates that if the object is modified, then each of its changed properties should be submitted to the <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_AuditingService"><code>AuditingService</code></a> (if one has been configured), or to any</p>
+ <p>The <code>auditing()</code> attribute indicates that if the object is modified, then each of its changed properties should be submitted to the <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_AuditingService"><code>AuditingService</code></a> (if one has been configured).</p>
</div>
<div class="paragraph">
<p>The default value for the attribute is <code>AS_CONFIGURED</code>, meaning that the <a href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> <code>isis.services.audit.objects</code> is used to determine the whether the action is audited:</p>
@@ -7348,7 +7409,7 @@ WrapperFactory wrapperFactory;</code></pre>
<span class="directive">public</span> <span class="type">class</span> <span class="class">Customers</span> {
<span class="annotation">@Action</span>(semantics=SemanticsOf.SAFE)
<span class="directive">public</span> <span class="predefined-type">List</span><Customer> findByName(
- <span class="annotation">@Parameter</span>(minLength=<span class="integer">3</span>) <i class="conum" data-value="1"></i><b>(1)</b>
+ <span class="annotation">@MinLength</span>(<span class="integer">3</span>) <i class="conum" data-value="1"></i><b>(1)</b>
<span class="annotation">@ParameterLayout</span>(named=<span class="string"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>)
<span class="predefined-type">String</span> name);
...
@@ -7374,7 +7435,7 @@ WrapperFactory wrapperFactory;</code></pre>
<span class="directive">public</span> <span class="type">class</span> <span class="class">Customers</span> {
<span class="annotation">@Programmatic</span>
<span class="directive">public</span> <span class="predefined-type">List</span><Customer> findByName(
- <span class="annotation">@Parameter</span>(minLength=<span class="integer">3</span>)
+ <span class="annotation">@MinLength</span>(<span class="integer">3</span>)
<span class="predefined-type">String</span> name);
...
}</code></pre>
@@ -7464,11 +7525,24 @@ WrapperFactory wrapperFactory;</code></pre>
</ul>
</div>
<div class="paragraph">
- <p>Whenever a domain object is instantiated or otherwise becomes known to the framework, a "created" lifecycle event is fired. This is typically when the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer_object-creation-api"><code>newTransientInstance()</code></a> is called; it will also happen if the object is simply instantiated with <code>new(…)</code>, and then the container’s <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer_services-api"><code>injectServicesInto(…)</code></a> method is called.</p>
+ <p>Whenever a domain object is instantiated or otherwise becomes known to the framework, a "created" lifecycle event is fired. This is typically when the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_FactoryService"><code>FactoryService</code></a>'s <code>instantiate()</code> method is called.</p>
</div>
<div class="paragraph">
<p>Subscribers subscribe through the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> and can use the event to obtain a reference to the object just created. The subscriber could then, for example, update the object, eg looking up state from some external datastore.</p>
</div>
+ <div class="admonitionblock tip">
+ <table>
+ <tbody>
+ <tr>
+ <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
+ <td class="content">
+ <div class="paragraph">
+ <p>It’s possible to instantiate objects without firing this lifecycle; just instantiate using its regular constructor, and then use the <code>ServiceRegistry</code>'s <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_ServiceRegistry"><code>injectServicesInto(…)</code></a> to manually inject any required domain services.</p>
+ </div> </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
<div class="paragraph">
<p>By default the event raised is <code>ObjectCreatedEvent.Default</code>. For example:</p>
</div>
@@ -7504,7 +7578,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_3">10.4.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -7513,7 +7587,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectCreatedEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -7527,26 +7602,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectCreatedEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_3">10.4.2. Default, Doop and Noop events</h4>
@@ -7705,7 +7768,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_4">10.6.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below support both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -7714,7 +7777,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectLoadedEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -7728,26 +7792,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectLoadedEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_4">10.6.2. Default, Doop and Noop events</h4>
@@ -7985,7 +8037,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_5">10.9.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -7994,7 +8046,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectPersistedEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -8008,26 +8061,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectPersistedEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_5">10.9.2. Default, Doop and Noop events</h4>
@@ -8111,7 +8152,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_6">10.10.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -8134,26 +8175,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectPersistingEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_6">10.10.2. Default, Doop and Noop events</h4>
@@ -8226,9 +8255,9 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
<div class="olist arabic">
<ol class="arabic">
- <li> <p><a href="../rgant/rgant.html#_rgant-Discriminator"><code>@Discriminator</code></a></p> </li>
+ <li> <p><a href="../rgant/rgant.html#_rgant_Discriminator"><code>@Discriminator</code></a></p> </li>
<li> <p><code>@DomainObject#objectType</code>, or <a href="../rgant/rgant.html#_rgant_aaa_deprecated"><code>@ObjectType</code></a> (deprecated)</p> </li>
- <li> <p><a href="../rgant/rgant.html#_rgant-PersistenceCapable"><code>@PersistenceCapable</code></a>, if at least the <code>schema</code> attribute is defined. <br></p>
+ <li> <p><a href="../rgant/rgant.html#_rgant_PersistenceCapable"><code>@PersistenceCapable</code></a>, if at least the <code>schema</code> attribute is defined.</p>
<div class="paragraph">
<p>If both <code>schema</code> and <code>table</code> are defined, then the value is “schema.table�?. If only <code>schema</code> is defined, then the value is “schema.className�?.</p>
</div> </li>
@@ -8417,7 +8446,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_7">10.13.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -8426,7 +8455,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectRemovingEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -8440,26 +8470,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectRemovingEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_7">10.13.2. Default, Doop and Noop events</h4>
@@ -8543,7 +8561,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_8">10.14.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -8552,7 +8570,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectUpdatingEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -8566,26 +8585,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectUpdatingEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_8">10.14.2. Default, Doop and Noop events</h4>
@@ -8669,7 +8676,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_9">10.15.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -8678,7 +8685,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ObjectUpdatedEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItem) { ... }
}
@@ -8692,26 +8700,14 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItem.ObjectUpdatedEvent ev) {
...
}
}</code></pre>
</div>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_9">10.15.2. Default, Doop and Noop events</h4>
@@ -9184,7 +9180,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_10">11.4.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -9193,7 +9189,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(CssClassUiEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItemDto) { ... }
}
@@ -9207,7 +9204,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItemDto.CssClassUiEvent ev) {
...
}
@@ -9217,19 +9215,6 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="paragraph">
<p>The subscriber should then use <code>CssClassUiEvent#setCssClass(…)</code> to actually specify the CSS class to be used.</p>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_10">11.4.2. Default, Doop and Noop events</h4>
@@ -9273,7 +9258,7 @@ WrapperFactory wrapperFactory;</code></pre>
</div>
<div class="listingblock">
<div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DescribedAs</span>(<span class="string"><span class="delimiter">"</span><span class="content">A customer who may have originally become known to us via </span><span class="delimiter">"</span></span> +
+ <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainObjectLayout</span>(describedAs=<span class="string"><span class="delimiter">"</span><span class="content">A customer who may have originally become known to us via </span><span class="delimiter">"</span></span> +
<span class="string"><span class="delimiter">"</span><span class="content">the marketing system or who may have contacted us directly.</span><span class="delimiter">"</span></span>)
<span class="directive">public</span> <span class="type">class</span> <span class="class">ProspectiveSale</span> {
...
@@ -9347,7 +9332,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_11">11.6.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -9356,7 +9341,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(IconUiEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItemDto) { ... }
}
@@ -9370,7 +9356,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItemDto.IconUiEvent ev) {
...
}
@@ -9380,19 +9367,6 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="paragraph">
<p>The subscriber should then use <code>IconUiEvent#setIconName(…)</code> to actually specify the icon name to be used.</p>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_11">11.6.2. Default, Doop and Noop events</h4>
@@ -9619,7 +9593,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_subscribers_12">11.10.1. Subscribers</h4>
<div class="paragraph">
- <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p>
+ <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below are compatible with both.</p>
</div>
<div class="paragraph">
<p>Subscribers can be either coarse-grained (if they subscribe to the top-level event type):</p>
@@ -9628,7 +9602,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(TitleUiEvent ev) {
<span class="keyword">if</span>(ev.getSource() <span class="keyword">instanceof</span> ToDoItemDto) { ... }
}
@@ -9642,7 +9617,8 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature=NatureOfService.DOMAIN)
<span class="directive">public</span> <span class="type">class</span> <span class="class">SomeSubscriber</span> <span class="directive">extends</span> AbstractSubscriber {
- <span class="annotation">@com</span>.google.common.eventbus.Subscribe
+ <span class="annotation">@org</span>.axonframework.eventhandling.annotation.EventHandler <span class="comment">// if using axon</span>
+ <span class="annotation">@com</span>.google.common.eventbus.Subscribe <span class="comment">// if using guava</span>
<span class="directive">public</span> <span class="type">void</span> on(ToDoItemDto.TitleUiEvent ev) {
...
}
@@ -9652,19 +9628,6 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="paragraph">
<p>The subscriber should then use either <code>TitleUiEvent#setTranslatableTitle(…)</code> or <code>TitleUiEvent#setTitle(…)</code> to actually specify the title to be used.</p>
</div>
- <div class="admonitionblock tip">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>If the AxonFramework is being used, replace <code>@com.google.common.eventbus.Subscribe</code> with <code>@org.axonframework.eventhandling.annotation.EventHandler</code>.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
</div>
<div class="sect3">
<h4 id="_default_doop_and_noop_events_12">11.10.2. Default, Doop and Noop events</h4>
@@ -10449,10 +10412,10 @@ WrapperFactory wrapperFactory;</code></pre>
)
<span class="annotation">@HomePage</span>
<span class="directive">public</span> ToDoAppDashboard lookup() {
- <span class="keyword">return</span> container.injectServicesInto(<span class="keyword">new</span> ToDoAppDashboard());
+ <span class="keyword">return</span> serviceRegistry.injectServicesInto(<span class="keyword">new</span> ToDoAppDashboard());
}
<span class="annotation">@Inject</span>
- <span class="directive">private</span> DomainObjectContainer container;
+ <span class="predefined-type">ServiceRegistry</span> serviceRegistry;
}</code></pre>
</div>
</div>
@@ -10517,7 +10480,7 @@ WrapperFactory wrapperFactory;</code></pre>
</table>
</div>
<div class="paragraph">
- <p>Isis supports several syntaxes for injecting domain services. The simplest uses the <code>@javax.inject.Inject</code> annotation on the field, as defined in <a href="https://jcp.org/en/jsr/detail?id=330">JSR-330</a>.</p>
+ <p>Apache Isis supports several syntaxes for injecting domain services. The simplest uses the <code>@javax.inject.Inject</code> annotation on the field, as defined in <a href="https://jcp.org/en/jsr/detail?id=330">JSR-330</a>.</p>
</div>
<div class="paragraph">
<p>For example:</p>
@@ -10550,7 +10513,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect2">
<h3 id="_alternative_syntaxes">16.1. Alternative syntaxes</h3>
<div class="paragraph">
- <p>Isis also supports setter-based injection:</p>
+ <p>Apache Isis also supports setter-based injection:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -10636,55 +10599,35 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect2">
<h3 id="_manually_injecting_services">16.3. Manually injecting services</h3>
<div class="paragraph">
- <p>Isis performs dependency injection when domain entities are recreated. It will also perform dependency injection if an object is created through the <code>DomainObjectContainer</code>.</p>
+ <p>Apache Isis performs dependency injection when domain entities are recreated. It will also perform dependency injection if an object is created through the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_FactoryService"><code>FactoryService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_RepositoryService"><code>RepositoryService</code></a>.</p>
</div>
<div class="paragraph">
<p>For example, to create a new (transient) domain object, the idiom is:</p>
</div>
<div class="listingblock">
<div class="content">
- <pre class="CodeRay highlight"><code data-lang="java">Customer cust = container.newTransientInstance(Customer.class); <i class="conum" data-value="1"></i><b>(1)</b>
+ <pre class="CodeRay highlight"><code data-lang="java">Customer cust = repositoryService.instantiate(Customer.class); <i class="conum" data-value="1"></i><b>(1)</b>
<span class="comment">// initialize state of "cust"</span>
-container.persist(cust);</code></pre>
+repositoryService.persist(cust);</code></pre>
</div>
</div>
- <div class="colist arabic">
- <table>
- <tbody>
- <tr>
- <td><i class="conum" data-value="1"></i><b>1</b></td>
- <td>where <code>container</code> is an instance of <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer</code></a>.</td>
- </tr>
- </tbody>
- </table>
- </div>
<div class="paragraph">
- <p>View models are created similarly:</p>
+ <p>View models are created identically:</p>
</div>
<div class="listingblock">
<div class="content">
- <pre class="CodeRay highlight"><code data-lang="java">ToDoAppDashboard dashboard = container.newViewModelInstance(ToDoAppDashboard.class);</code></pre>
+ <pre class="CodeRay highlight"><code data-lang="java">ToDoAppDashboard dashboard = repositoryService.instantiate(ToDoAppDashboard.class);</code></pre>
</div>
</div>
<div class="paragraph">
- <p>If you prefer, though, you can simply instantiate domain objects using "new" and then inject domain services manually:</p>
+ <p>If you prefer, though, you can simply instantiate domain objects using "new" and then inject domain services manually using <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_ServiceRegistry"><code>ServiceRegistry</code></a>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java">Customer cust = <span class="keyword">new</span> Customer();
-container.injectServicesInto(cust);
-<span class="comment">// initialize state of "cust"</span>
-container.persist(cust);</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>or if you prefer:</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java">Customer cust = container.injectServicesInto(<span class="keyword">new</span> Customer());
+serviceRegistry.injectServicesInto(cust);
<span class="comment">// initialize state of "cust"</span>
-container.persist(cust);</code></pre>
+repositoryService.persist(cust);</code></pre>
</div>
</div>
<div class="admonitionblock note">
@@ -10694,10 +10637,10 @@ container.persist(cust);</code></pre>
<td class="icon"> <i class="fa icon-note" title="Note"></i> </td>
<td class="content">
<div class="paragraph">
- <p>There is one subtle difference between using <code>DomainObjectContainer#newTransientInstance(…)</code> and <code>DomainObjectContainer#injectServicesInto(…)</code>, in that with the former Apache Isis will automatically initialize all fields to their default values.</p>
+ <p>Note that using either <code>FactoryService#instantiate(…)</code> or <code>RepositoryService#instantiate(…)</code> will also automatically initialize all fields to their default values, and will also fire a "created" lifecycle event.</p>
</div>
<div class="paragraph">
- <p>This isn’t a particular useful feature (and indeed can sometimes be rather confusing) so you may well wish to standardize on using <code>injectServicesInto(…)</code> throughout.</p>
+ <p>Neither of these are particularly useful (and indeed can sometimes be rather confusing) so you may well wish to standardize on using <code>injectServicesInto(…)</code> throughout.</p>
</div> </td>
</tr>
</tbody>
@@ -10911,7 +10854,44 @@ container.persist(cust);</code></pre>
</div>
</div>
<div class="sect1">
- <h2 id="_rgant-Nullable">20. <code>@Nullable</code> (<code>javax</code>)</h2>
+ <h2 id="_rgant-NotPersistent">20. <code>@NotPersistent</code> (<code>javax.jdo</code>)</h2>
+ <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+ <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
+ <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
+ <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
+ <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
+ <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
+ </ul>
+ </div>
+ <div class="sectionbody">
+ <div class="paragraph">
+ <p>The <code>@javax.jdo.annotation.NotPersistent</code> annotation is used by JDO/DataNucleus to indicate that a property should not be persisted to the database.</p>
+ </div>
+ <div class="paragraph">
+ <p>Apache Isis also uses this annotation, though (currently) only in the very minimal way to suppress checking of inconsistent metadata between JDO and Isis annotations (eg <code>@Column#allowsNull()</code> vs <code>@Property#optionality()</code>, or <code>@Column#length()</code> and <code>@Property#maxLength()</code>).</p>
+ </div>
+ <div class="admonitionblock note">
+ <table>
+ <tbody>
+ <tr>
+ <td class="icon"> <i class="fa icon-note" title="Note"></i> </td>
+ <td class="content">
+ <div class="paragraph">
+ <p>Isis parses the <code>@NotPersistent</code> annotation from the Java source code; it does not query the JDO metamodel. This means that it the <code>@NotPersistent</code> annotation must be used rather than the equivalent <code><field></code> <a href="http://www.datanucleus.org/products/accessplatform_4_0/jdo/fields_properties.html">XML metadata</a>.</p>
+ </div>
+ <div class="paragraph">
+ <p>Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Isis (currently) only inspects the getter method. Therefore ensure that the annotation is placed there.</p>
+ </div> </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ <div class="sect1">
+ <h2 id="_rgant-Nullable">21. <code>@Nullable</code> (<code>javax</code>)</h2>
<div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
<button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Nullable.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -10973,43 +10953,6 @@ container.persist(cust);</code></pre>
</div>
</div>
<div class="sect1">
- <h2 id="_rgant-NotPersistent">21. <code>@NotPersistent</code> (<code>javax.jdo</code>)</h2>
- <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
- <button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
- <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
- <ul class="dropdown-menu">
- <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i> Edit</a></li>
- <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i> History</a></li>
- <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i> Raw</a></li>
- <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-NotPersistent.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i> Blame</a></li>
- </ul>
- </div>
- <div class="sectionbody">
- <div class="paragraph">
- <p>The <code>@javax.jdo.annotation.NotPersistent</code> annotation is used by JDO/DataNucleus to indicate that a property should not be persisted to the database.</p>
- </div>
- <div class="paragraph">
- <p>Apache Isis also uses this annotation, though (currently) only in the very minimal way to suppress checking of inconsistent metadata between JDO and Isis annotations (eg <code>@Column#allowsNull()</code> vs <code>@Property#optionality()</code>, or <code>@Column#length()</code> and <code>@Property#maxLength()</code>).</p>
- </div>
- <div class="admonitionblock note">
- <table>
- <tbody>
- <tr>
- <td class="icon"> <i class="fa icon-note" title="Note"></i> </td>
- <td class="content">
- <div class="paragraph">
- <p>Isis parses the <code>@NotPersistent</code> annotation from the Java source code; it does not query the JDO metamodel. This means that it the <code>@NotPersistent</code> annotation must be used rather than the equivalent <code><field></code> <a href="http://www.datanucleus.org/products/accessplatform_4_0/jdo/fields_properties.html">XML metadata</a>.</p>
- </div>
- <div class="paragraph">
- <p>Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Isis (currently) only inspects the getter method. Therefore ensure that the annotation is placed there.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- <div class="sect1">
<h2 id="_rgant-MinLength">22. <code>@MinLength</code></h2>
<div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
<button type="button" class="btn btn-xs btn-default" onclick="window.location.href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-MinLength.adoc""><i class="fa fa-pencil-square-o"></i> Edit</button>
@@ -11031,8 +10974,7 @@ container.persist(cust);</code></pre>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> ToDoItem add(
- <span class="annotation">@TypicalLength</span>(<span class="integer">20</span>)
- <span class="directive">final</span> ToDoItem toDoItem) {
+ <span class="directive">final</span> ToDoItem toDoItem) {
getDependencies().add(toDoItem);
<span class="keyword">return</span> <span class="local-variable">this</span>;
}
@@ -11046,9 +10988,6 @@ container.persist(cust);</code></pre>
}</code></pre>
</div>
</div>
- <div class="paragraph">
- <p>The `@Parameter(minLength=…)`e can also be used (even though strictly speaking the search argument is not a parameter of the action).</p>
- </div>
</div>
</div>
<div class="sect1">
@@ -11730,10 +11669,10 @@ container.persist(cust);</code></pre>
<p>The <code>describedAs()</code> attribute is used to provide a short description of the action parameter to the user. In the <a href="../ugvw/ugvw.html">Wicket viewer</a> it is displayed as a 'tool tip'. The <code>describedAs()</code> attribute can also be specified for <a href="../rgant/rgant.html#_rgant-CollectionLayout_describedAs">collections</a>, <a href="../rgant/rgant.html#_rgant-PropertyLayout_describedAs">properties</a>, <a href="../rgant/rgant.html#_rgant-ActionLayout_describedAs">actions</a>, <a href="../rgant/rgant.html#_rgant-DomainObjectLayout_describedAs">domain objects</a> and <a href="../rgant/rgant.html#_rgant-ViewModelLayout_describedAs">view models</a>.</p>
</div>
<div class="paragraph">
- <p>Descriptions may be provided for objects, members (properties, collections and actions), and for individual parameters within an action method. <code>@DescribedAs<
<TRUNCATED>