http://git-wip-us.apache.org/repos/asf/isis-site/blob/274edd1d/content/versions/SNAPSHOT/guides/rgant/rgant.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgant/rgant.html
b/content/versions/SNAPSHOT/guides/rgant/rgant.html
index 7894892..a14aa88 100644
--- a/content/versions/SNAPSHOT/guides/rgant/rgant.html
+++ b/content/versions/SNAPSHOT/guides/rgant/rgant.html
@@ -6441,11 +6441,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 <code>ServiceRegistry</code>'s <a
href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_ServiceRegistry"><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>
@@ -6481,7 +6494,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>
@@ -6490,7 +6503,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) { ... }
}
@@ -6504,26 +6518,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>
@@ -8139,7 +8141,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>
@@ -8148,7 +8150,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) { ... }
}
@@ -8162,7 +8165,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) {
...
}
@@ -8172,19 +8176,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>
@@ -8204,7 +8195,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_raising_events_programmatically_3">11.4.3. Raising events
programmatically</h4>
<div class="paragraph">
- <p>Normally events are only raised for interactions through the UI.
However, events can be raised programmatically either by calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
API directly, or as a result of calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s
<code>cssClassOf(â¦â)</code> method.</p>
+ <p>Normally events are only raised for interactions through the UI.
However, events can be raised programmatically either by calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
API directly.</p>
</div>
</div>
</div>
@@ -8302,7 +8293,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>
@@ -8311,7 +8302,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) { ... }
}
@@ -8325,7 +8317,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) {
...
}
@@ -8335,19 +8328,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>
@@ -8367,7 +8347,7 @@ WrapperFactory wrapperFactory;</code></pre>
<div class="sect3">
<h4 id="_raising_events_programmatically_4">11.6.3. Raising events
programmatically</h4>
<div class="paragraph">
- <p>Normally events are only raised for interactions through the UI.
However, events can be raised programmatically either by calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
API directly, or as a result of calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s
<code>iconNameOf(â¦â)</code> method.</p>
+ <p>Normally events are only raised for interactions through the UI.
However, events can be raised programmatically either by calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
API directly, or as a result of calling the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_TitleService"><code>TitleService</code></a>'s
<code>iconNameOf(â¦â)</code> method.</p>
</div>
</div>
</div>
@@ -9404,10 +9384,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>
@@ -9472,7 +9452,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>
@@ -9505,7 +9485,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">
@@ -9591,55 +9571,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);
+serviceRegistry.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());
-<span class="comment">// initialize state of "cust"</span>
-container.persist(cust);</code></pre>
+repositoryService.persist(cust);</code></pre>
</div>
</div>
<div class="admonitionblock note">
@@ -9649,10 +9609,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>
@@ -11202,41 +11162,7 @@ container.persist(cust);</code></pre>
</div>
</div>
<div class="paragraph">
- <p>Isis uses argument to pass in the configuration properties read
from all <a href="../rgcfg/rgcfg.html#_rgcfg_configuration-files">configuration
files</a>:</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>Alternatively, you could inject <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer</code></a>
into the service and read configuration properties using
<code>DomainObjectContainer#getProperty(â¦â)</code> and related methods.
Note that when using this latter API only those configuration properties
prefixes <code>application.</code> key are provided.</p>
- </div> </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="paragraph">
- <p>A common use case is for domain services that interact with the <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>.
For example:</p>
- </div>
- <div class="listingblock">
- <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">MySubscribingService</span> {
- <span class="annotation">@PostConstruct</span>
- <span class="directive">public</span> <span class="type">void</span>
postConstruct() {
- eventBusService.register(<span class="local-variable">this</span>);
- }
- <span class="annotation">@PreDestroy</span>
- <span class="directive">public</span> <span class="type">void</span>
preDestroy() {
- eventBusService.unregister(<span class="local-variable">this</span>);
- }
- ...
- <span class="annotation">@javax</span>.inject.Inject
- EventBusService eventBusService;
-}</code></pre>
- </div>
+ <p>Apache Isis uses argument to pass in the configuration properties
read from all <a
href="../rgcfg/rgcfg.html#_rgcfg_configuration-files">configuration
files</a>:</p>
</div>
<div class="admonitionblock tip">
<table>
@@ -11245,14 +11171,14 @@ container.persist(cust);</code></pre>
<td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td>
<td class="content">
<div class="paragraph">
- <p>In this particular use case, it is generally simpler to just
subclass from <a
href="../rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber"><code>AbstractSubscriber</code></a>.</p>
+ <p>Alternatively, you could inject <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_ConfigurationService"><code>ConfigurationService</code></a>
into the service and read configuration properties using
<code>ConfigurationService#getProperty(â¦â)</code> and related methods.
However, be aware when using this latter API that only those configuration
properties keys with an <code>application.</code> prefix are provided.</p>
</div> </td>
</tr>
</tbody>
</table>
</div>
<div class="paragraph">
- <p>Other use cases include obtaining connections to external
datasources, eg subscribing to an ActiveMQ router, say, or
initializing/cleaning up a background scheduler such as Quartz.</p>
+ <p>Use cases include obtaining connections to external datasources,
eg subscribing to an ActiveMQ router, say, or initializing/cleaning up a
background scheduler such as Quartz.</p>
</div>
<div class="paragraph">
<p>See also <a
href="../rgant/rgant.html#_rgant-PreDestroy"><code>@PreDestroy</code></a></p>
@@ -11360,7 +11286,7 @@ container.persist(cust);</code></pre>
<p>The <code>@javax.jdo.annotation.PrimaryKey</code> annotation is
used by JDO/DataNucleus to indicate that a property is used as the primary key
for an entity with application-managed identity.</p>
</div>
<div class="paragraph">
- <p>Apache Isis also uses this annotation in a very minimal way: to
ensure that the frameworkâs own logic to initialize newly instantiated
objects (eg using <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer"><code>DomainObjectContainer#newTransientInstance(â¦â)</code></a>
does not touch the primary key, and also to ensure that the primary key
property is always disabled (read-only).</p>
+ <p>Apache Isis also uses this annotation in a very minimal way: to
ensure that the frameworkâs own logic to initialize newly instantiated
objects (eg using <a
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_FactoryService"><code>FactoryService#instantiate(â¦â)</code></a>
does not touch the primary key, and also to ensure that the primary key
property is always disabled (read-only).</p>
</div>
<div class="admonitionblock note">
<table>