http://git-wip-us.apache.org/repos/asf/isis-site/blob/2f475bbf/content/versions/2.0.0-M1/elasticlunr/index.json
----------------------------------------------------------------------
diff --git a/content/versions/2.0.0-M1/elasticlunr/index.json 
b/content/versions/2.0.0-M1/elasticlunr/index.json
new file mode 100644
index 0000000..5cde563
--- /dev/null
+++ b/content/versions/2.0.0-M1/elasticlunr/index.json
@@ -0,0 +1 @@
+{"version":"0.9.5","fields":["title","body","description","url"],"ref":"id","documentStore":{"docs":{"372886":{"title":"Rows,
 full-width cols, and 
tabs","url":"guides/ugvw/ugvw.html#_rows_full_width_cols_and_tabs","body":"Rows,
 full-width cols, and tabs  The example layout consists of three rows: a row 
for the object/icon, a row containing a properties, and a row containing 
collections. In all three cases the row contains a single column spanning the 
full width of the page. For the property and collection rows, the column 
contains a tab group.  This corresponds to the following XML:  You will notice 
that one of the columns has an unreferencedActions attribute, while one of the 
tabGroups has a similar unreferencedCollections attribute. This topic is 
discussed in more detail below. ","description":" The example layout consists 
of three rows: a row for the object/icon, a row containing a properties, and a 
row containing collections. In all three cases the row contains a single column 
s
 panning the full width of the page. For the property and collection rows, the 
column contains a","id":372886},"2646929":{"title":"Apache Isis vs 
…​","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_apache-isis-vs","body":"Apache
 Isis vs …​  Many other frameworks promise rapid application development 
and provide automatically generated user interfaces, so how do they compare to 
Apache Isis? ","description":" Many other frameworks promise rapid application 
development and provide automatically generated user interfaces, so how do they 
compare to Apache Isis? 
","id":2646929},"3836440":{"title":"Running","url":"guides/dg/dg.html#__dg_ide_intellij_running","body":"Running
  Let’s see how to run both the app and the tests. ","description":" Let’s 
see how to run both the app and the tests. 
","id":3836440},"11600575":{"title":"Using 
Contributions","url":"pages/tg/tg.html#_using_contributions","body":"Using 
Contributions ","description":"","id":11600575},"12196042":{"title":"Te
 rtiary Menu","url":"guides/ugvw/ugvw.html#_tertiary_menu","body":"Tertiary 
Menu  Domain services' actions can be associated with the tertiary menu using 
the same @DomainServiceLayout annotation, but be aware that the 
@DomainServiceLayout#name() attribute will be ignored (there is only one 
effective menu).  For example, the updateEpochDate(…​) and 
listAllSettings(…​) actions come from the following service:  Because the 
number of items on the tertiary menu is expected to be small and most will 
pertain to the current user, the viewer does not place dividers between actions 
from different services on the tertiary menu. ","description":" Domain 
services' actions can be associated with the tertiary menu using the same 
@DomainServiceLayout annotation, but be aware that the 
@DomainServiceLayout#name() attribute will be ignored (there is only one 
effective menu). ","id":12196042},"12649581":{"title":"Mark the version as 
released","url":"guides/cgcom/cgcom.html#_mark_the_version_as_r
 eleased","body":"Mark the version as released  In JIRA, go to the 
administration section for the Apache Isis project and update the version as 
being released.  In the Kanban view this will have the effect of marking all 
tickets as released (clearing the \"done\" column). ","description":" In JIRA, 
go to the administration section for the Apache Isis project and update the 
version as being released. 
","id":12649581},"13573617":{"title":"hide…​()","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide","body":"hide…​()
  The hide…​() supporting method is called for properties, collections and 
actions. It allows the property/collection to be completely hidden from view.  
It’s comparatively rare for properties or collections to be imperatively 
hidden from view, but actions are sometimes hidden or shown visible (as opposed 
to being just disabled, ie greyed out).  The signature of the supporting method 
is simply:  Returning true will hide the property, collection or acti
 on, returning false leaves it visible.  For example, to hide an action:  Or, 
to hide a property: ","description":" The hide…​() supporting method is 
called for properties, collections and actions. It allows the 
property/collection to be completely hidden from view. 
","id":13573617},"14290952":{"title":"Vetoing 
Visibility","url":"guides/htg.html#_ugbtb_hints-and-tips_vetoing-visibility","body":"Vetoing
 Visibility  eg if included an addon such as auditing or security.  solution is 
to write a domain event subscriber that vetoes the visibility  All the addons 
actions inherit from common base classes so this can be as broad-brush or 
fine-grained as required ","description":" eg if included an addon such as 
auditing or security. ","id":14290952},"14971197":{"title":"Suppressing 
'remember 
me'","url":"guides/ugvw/ugvw.html#_ugvw_configuration-properties_suppressing-remember-me","body":"Suppressing
 'remember me'  The 'remember me' checkbox on the login page can be suppressed, 
if required
 , by setting a configuration flag. ","description":" The 'remember me' 
checkbox on the login page can be suppressed, if required, by setting a 
configuration flag. 
","id":14971197},"16629694":{"title":"allowLateRegistration","url":"migration-notes/migration-notes.html#__code_allowlateregistration_code","body":"allowLateRegistration
  One possible issue is that (as per ISIS-830) the EventBusService is now 
initialized as one of the first domain services; this is to ensure that any 
object lifecycle events caused by domain services initializing themselves can 
be posted on the event bus for subscribers. The typical case for such lifecycle 
events to occur is from domain services that seed reference data; one such 
example can be found in the (non-ASF) Incode Platform's security module.  In 
previous releases, the ordering of initialization for the EventBusService was 
undefined (but would typically be towards the \"end\" of the list of services. 
What this meant in practice is that it generally
  didn’t matter whether (domain service) subscribers were initialized before 
or after seed services.  Now, though, because the EventBusService is 
initialized early on, it proactively checks that all subscribers have been 
registered before any event posts occur (so that no events get missed). If any 
subscriber attempts to register after at least one event has been posted, then 
the service will fail fast and the framework will not start. The error looks 
something like:  To ensure that subscriber domain services are initialized 
before \"seed\" domain services, the @DomainServiceLayout#menuOrder() attribute 
can be used. Normally this attribute is just used to order UI-visible services 
on the menu bars, but it also is used internally to sequence the internal list 
of services being initialized.  Alternatively, you can disable this checking 
within the EventBusService using:  If you do that, be aware that not all 
subscribers may not receive some events generated by other domain services.  
 For more details, see the EventBusService man page. ","description":" One 
possible issue is that (as per ISIS-830) the EventBusService is now initialized 
as one of the first domain services; this is to ensure that any object 
lifecycle events caused by domain services initializing themselves can be 
posted on the event bus for subscribers. The typical case for 
such","id":16629694},"17000573":{"title":"ObjectCreatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectCreatedEvent","body":"ObjectCreatedEvent
  Subclass of AbstractLifecycleEvent, broadcast when an object is first 
instantiated using the DomainObjectContainer's #newTransientInstance(…​) 
method.  ObjectCreatedEvent.Default is the concrete implementation that is 
used. ","description":" Subclass of AbstractLifecycleEvent, broadcast when an 
object is first instantiated using the DomainObjectContainer's 
#newTransientInstance(…​) method. ","id":17000573},"17618894":{"title":"New 
Feature","url":"releas
 e-notes/release-notes.html#_new_feature_20","body":"New Feature 
","description":"","id":17618894},"18445041":{"title":"Verifying 
Releases","url":"downloads.html#_verifying_releases","body":"Verifying Releases 
","description":"","id":18445041},"19254915":{"title":"API & 
Implementation","url":"guides/rgsvc/rgsvc.html#_api_implementation_7","body":"API
 & Implementation  The CommandContext request-scoped service defines the 
following very simple API:  This class (o.a.i.applib.services.CommandContext) 
is also the default implementation.  Under normal circumstances there 
shouldn’t be any need to replace this implementation with another. But if you 
do need to for some reason, then subclass and use 
@DomainServiceLayout#menuOrder() (as explained in the introduction to this 
guide).  The Command type referenced above is in fact an interface, defined as: 
","description":" The CommandContext request-scoped service defines the 
following very simple API: ","id":19254915},"21190750":{"title":"Run
  the archetype","url":"pages/tg/tg.html#_run_the_archetype","body":"Run the 
archetype ","description":"","id":21190750},"21212015":{"title":"Key 
features","url":"pages/powered-by/powered-by.html#_key_features","body":"Key 
features ","description":"","id":21212015},"21857601":{"title":"Other 
Guides","url":"guides/cgcom/cgcom.html#_other_guides","body":"Other Guides  
Apache Isis documentation is broken out into a number of user, reference and 
\"supporting procedures\" guides.  The user guides available are:  The 
reference guides are:  The remaining guides are:  This guide provides guidance 
for Apache Isis' own committers. ","description":" Apache Isis documentation is 
broken out into a number of user, reference and \"supporting procedures\" 
guides. 
","id":21857601},"22342496":{"title":"Deploy","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_deploy","body":"Deploy
  Previously the release procedures used mvn release:prepare and mvn 
release:perform. These are howe
 ver not compatible with ${revision} that we now use for CI/CD.  We therefore 
just use mvn deploy directly, activating the (inherited) apache-release profile 
that, amongst other things, brings in the gpg plugin for code signing.  To 
build and deploy and tag, we use:  using your own GPG passphrase, of course. 
","description":" Previously the release procedures used mvn release:prepare 
and mvn release:perform. These are however not compatible with ${revision} that 
we now use for CI/CD. 
","id":22342496},"23125949":{"title":"Editing","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_editing","body":"Editing
 
","description":"","id":23125949},"23524101":{"title":"Collections","url":"guides/ugvw/ugvw.html#_collections","body":"Collections
  In the final row the collections are placed in tabs, simply one collection 
per tab. This corresponds to the following XML:  As with properties, actions 
can be associated with collections; this indicates that they should be rendered 
in the collecti
 on’s header. ","description":" In the final row the collections are placed 
in tabs, simply one collection per tab. This corresponds to the following XML: 
","id":23524101},"26509816":{"title":"Commit 
changes","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_commit-changes","body":"Commit
 changes  Commit any changes from the preceding steps: ","description":" Commit 
any changes from the preceding steps: 
","id":26509816},"27806498":{"title":"renderedAsDayBefore()","url":"guides/rgant/rgant.html#_rgant-ParameterLayout_renderedAsDayBefore","body":"renderedAsDayBefore()
  The renderedAsDayBefore() attribute applies only to date parameters whereby 
the date will be rendered as the day before the value actually held in the 
domain object. It is ignored for parameters of other types. This attribute is 
also supported for properties.  This behaviour might at first glance appear 
odd, but the rationale is to support the use case of a sequence of instances 
that represent adj
 acent intervals of time. In such cases there would typically be startDate and 
endDate properties, eg for all of Q2. Storing this as a half-closed interval 
— eg [1-Apr-2015, 1-July-2015) — can substantially simplify internal 
algorithms; the endDate of one interval will correspond to the startDate of the 
next.  However, from an end-user perspective the requirement may be to render 
the interval as a fully closed interval; eg the end date should be shown as 
30-Jun-2015.  This attribute therefore bridges the gap; it presents the 
information in a way that makes sense to an end-user, but also stores the 
domain object in a way that is easy work with internally.  For example: 
","description":" The renderedAsDayBefore() attribute applies only to date 
parameters whereby the date will be rendered as the day before the value 
actually held in the domain object. It is ignored for parameters of other 
types. This attribute is also supported for properties. 
","id":27806498},"31312523":{"title":"D
 eclarative 
style","url":"guides/htg.html#_declarative_style_3","body":"Declarative style  
To render an object with a particular CSS, use @DomainObjectLayout#cssClass().  
When the domain object is rendered on its own page, this CSS class will appear 
on a top-level <div>. Or, when the domain object is rendered as a row in a 
collection, then the CSS class will appear in a <div> wrapped by the <tr> of 
the row.  One possible use case would be to render the most important object 
types with a subtle background colour: Customers shown in light green, or 
Orders shown in a light pink, for example. ","description":" To render an 
object with a particular CSS, use @DomainObjectLayout#cssClass(). 
","id":31312523},"31857620":{"title":"Interacting with the 
services","url":"guides/rgsvc/rgsvc.html#_interacting_with_the_services","body":"Interacting
 with the services  Typically domain objects will have little need to interact 
with the CommandContext and Command directly; what is more useful is that t
 hese are persisted in support of the various use cases identified above.  One 
case however where a domain object might want to obtain the Command is to 
determine whether it has been invoked in the foreground, or in the background. 
It can do this using the getExecutedIn() method:  Although not often needed, 
this then allows the domain object to access the Command object through the 
CommandContext service. To expand th above example:  If run in the background, 
it might then notify the user (eg by email) if all work is done.  This leads us 
onto a related point, distinguishing the current effective user vs the 
originating \"real\" user. When running in the foreground, the current user can 
be obtained from the UserService, using:  If running in the background, 
however, then the current user will be the credentials of the background 
process, for example as run by a Quartz scheduler job.  The domain object can 
still obtain the original (\"effective\") user that caused the job to be created
 , using: ","description":" Typically domain objects will have little need to 
interact with the CommandContext and Command directly; what is more useful is 
that these are persisted in support of the various use cases identified above. 
","id":31857620},"31966407":{"title":"Icons","url":"guides/htg.html#_icons","body":"Icons
  Action icons can be specified in several ways.  One option is to use the 
@ActionLayout#cssClassFa(). For example:  Alternatively, you can specify these 
hints dynamically in the Xxx.layout.xml for the entity:  Rather than annotating 
every action with @ActionLayout#cssClassFa() and @ActionLayout#cssClass() you 
can instead specify the UI hint globally using regular expressions. Not only 
does this save a lot of boilerplate/editing, it helps ensure consistency across 
all actions.  To declare fa classes globally, use the configuration property 
isis.reflector.facet.cssClassFa.patterns (a comma separated list of key:value 
pairs).  For example:  Here:  For example, \"fa-pl
 us\" is applied to all action members called \"newXxx\" ","description":" 
Action icons can be specified in several ways. 
","id":31966407},"36571775":{"title":"runtime-legacy","url":"migration-notes/migration-notes.html#_runtime_legacy","body":"runtime-legacy
 
","description":"","id":36571775},"36734123":{"title":"Bug","url":"release-notes/release-notes.html#_bug_8","body":"Bug
 ","description":"","id":36734123},"39248326":{"title":"Runtime vs Noop 
implementation","url":"guides/rgfis/rgfis.html#_runtime_vs_noop_implementation","body":"Runtime
 vs Noop implementation  The framework provides two implementations:  The 
…​Default implementation takes priority over the …​Noop implementation. 
","description":" The framework provides two implementations: 
","id":39248326},"39290887":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_22","body":"Implementation
  The core framework provides a default implementation of this service 
(o.a.i.core.metamodel.services.contain
 er.DomainObjectContainerDefault). ","description":" The core framework 
provides a default implementation of this service 
(o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). 
","id":39290887},"42240053":{"title":"Screenshots","url":"guides/ugvw/ugvw.html#_screenshots_9","body":"Screenshots
  With 'password reset' not suppressed (the default):  and with the link 
suppressed: ","description":" With 'password reset' not suppressed (the 
default): ","id":42240053},"44483327":{"title":"New 
Feature","url":"release-notes/release-notes.html#_new_feature_17","body":"New 
Feature 
","description":"","id":44483327},"45128293":{"title":"getConfigurationProperties()","url":"guides/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_api_getConfigurationProperties","body":"getConfigurationProperties()
  This method allow arbitrary other configuration properties to be overridden. 
One common use case is in conjunction with the getFixtures() method, discussed 
above: ","description"
 :" This method allow arbitrary other configuration properties to be 
overridden. One common use case is in conjunction with the getFixtures() 
method, discussed above: ","id":45128293},"45847666":{"title":"Recreate the 
archetype","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype","body":"Recreate
 the archetype  Make sure you are in the correct directory and environment 
variables are correct.  To recreate the helloworld archetype:  Then, run the 
script (which also builds the archetype once generated) and then switch to the 
archetype’s directory:  The script automatically commits its changes. If you 
wish use git log and git diff (or a tool such as SourceTree) to review changes 
made. ","description":" Make sure you are in the correct directory and 
environment variables are correct. 
","id":45847666},"57327287":{"title":"cssClassFa()","url":"guides/rgant/rgant.html#_rgant-ViewModelLayout_cssClassFa","body":"cssClassFa()
  The 
 cssClassFa() attribute is used to specify the name of a Font Awesome icon 
name, to be rendered as the domain object’s icon.  These attribute can also 
be applied to domain objects to specify the object’s icon, and to actions to 
specify an icon for the action’s representation as a button or menu item.  If 
necessary the icon specified can be overridden by a particular object instance 
using the iconName() method.  For example:  There can be multiple \"fa-\" 
classes, eg to mirror or rotate the icon. There is no need to include the 
mandatory fa \"marker\" CSS class; it will be automatically added to the list. 
The fa- prefix can also be omitted from the class names; it will be prepended 
to each if required.  The related cssClassFaPosition() attribute is currently 
unused for domain objects; the icon is always rendered to the left. 
","description":" The cssClassFa() attribute is used to specify the name of a 
Font Awesome icon name, to be rendered as the domain object’s icon. ","id":5
 7327287},"62314289":{"title":"Menu Bars 
Layout","url":"guides/ugvw/ugvw.html#_ugvw_menubars-layout","body":"Menu Bars 
Layout ","description":"","id":62314289},"64932464":{"title":"Other 
Guides","url":"guides/ugtst/ugtst.html#_other_guides","body":"Other Guides  
Apache Isis documentation is broken out into a number of user, reference and 
\"supporting procedures\" guides.  The user guides available are:  The 
reference guides are:  The remaining guides are: ","description":" Apache Isis 
documentation is broken out into a number of user, reference and \"supporting 
procedures\" guides. 
","id":64932464},"66604001":{"title":"@Programmatic","url":"guides/rgant/rgant.html#_rgant-Programmatic","body":"@Programmatic
 ","description":"","id":66604001},"68441589":{"title":"License 
headers","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_license-headers","body":"License
 headers  The Apache Release Audit Tool RAT (from the Apache Creadur project) 
checks for missing license h
 eader files. The parent pom.xml of each releasable module specifies the RAT 
Maven plugin, with a number of custom exclusions.  To run the RAT tool, use:  
where rat.numUnapprovedLicenses property is set to a high figure, temporarily 
overriding the default value of 0. This will allow the command to run over all 
submodules, rather than failing after the first one. The command writes out a 
target\\rat.txt for each submodule. missing license notes are indicated using 
the key !???. The for command collates all the errors.  Investigate and fix any 
reported violations, typically by either:  To add missing headers, use the 
groovy script addmissinglicenses.groovy (in the scripts directory) to 
automatically insert missing headers for certain file types. The actual files 
checked are those with extensions specified in the line def fileEndings = 
[\".java\", \".htm\"]:  (If the -x is omitted then the script is run in \"dry 
run\" mode). Once you’ve fixed all issues, confirm once more that apache-
 rat-plugin no longer reports any license violations, this time leaving the 
rat.numUnapprovedLicenses property to its default, 0: ","description":" The 
Apache Release Audit Tool RAT (from the Apache Creadur project) checks for 
missing license header files. The parent pom.xml of each releasable module 
specifies the RAT Maven plugin, with a number of custom exclusions. 
","id":68441589},"73703450":{"title":"New 
Feature","url":"release-notes/release-notes.html#_new_feature_29","body":"New 
Feature ","description":"","id":73703450},"74705826":{"title":"How to implement 
a 
spellchecker?","url":"guides/htg.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How
 to implement a spellchecker?  From this thread on the Apache Isis users 
mailing list:  One way to implement is to use the event bus:  if if the change 
is made through an edit, you can use @Property#domainEvent().  You’ll need 
some way to know which fields should be spell checked. Two ways spring to mind: 
 And you’ll
  (obviously) also need some sort of spell checker implementation to call. 
","description":" From this thread on the Apache Isis users mailing list: 
","id":74705826},"75054401":{"title":"Supporting Method 
Prefixes","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes","body":"Supporting
 Method Prefixes  Supporting methods are those that are associated with 
properties, collections and actions, providing additional imperative business 
rule checking and behaviour to be performed when the user interacts with those 
object members.  This association is performed by name matching. Thus, a 
property called \"firstName\", derived from a method getFirstName() may have 
supporting methods hideFirstName(), disableFirstName() and validateFirstName(). 
Supporting methods are, therefore, each characterized by their own particular 
prefix.  The table below lists the method prefixes that are recognized as part 
of Apache Isis' default programming model. ","description":" Supporting methods 
are those tha
 t are associated with properties, collections and actions, providing 
additional imperative business rule checking and behaviour to be performed when 
the user interacts with those object members. 
","id":75054401},"77231561":{"title":"Interaction 
Execution","url":"guides/rgcms/rgcms.html#_rgcms_schema-ixn","body":"Interaction
 Execution  The interaction (\"ixn\") schema defines the serialized form of an 
action invocation or a property edit. In fact, it actually defines a call-graph 
of such executions for those cases where the WrapperFactory is used to execute 
sub-actions/property edits.  Each execution identifies the target object, the 
member to invoke, and the arguments. It also captures metrics about the 
execution, and the result of the execution (eg return value of an action 
invocation). ","description":" The interaction (\"ixn\") schema defines the 
serialized form of an action invocation or a property edit. In fact, it 
actually defines a call-graph of such executions for those case
 s where the WrapperFactory is used to execute sub-actions/property edits. 
","id":77231561},"78112488":{"title":"Screencast","url":"guides/ugvw/ugvw.html#_screencast","body":"Screencast
  This screencast describes the feature. ","description":" This screencast 
describes the feature. ","id":78112488},"78624086":{"title":"Other 
Guides","url":"guides/ugsec/ugsec.html#_other_guides","body":"Other Guides  
Apache Isis documentation is broken out into a number of user, reference and 
\"supporting procedures\" guides.  The user guides available are:  The 
reference guides are:  The remaining guides are: ","description":" Apache Isis 
documentation is broken out into a number of user, reference and \"supporting 
procedures\" guides. 
","id":78624086},"80534397":{"title":"ContentMappingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService","body":"ContentMappingService
  The ContentMappingService supports the (default implementation of the) 
ContentNegotiationServ
 ice enabling the RestfulObjects viewer to represent domain objects in some 
other format as specified by the HTTP Accept header.  See 
ContentNegotiationService for further discussion. ","description":" The 
ContentMappingService supports the (default implementation of the) 
ContentNegotiationService enabling the RestfulObjects viewer to represent 
domain objects in some other format as specified by the HTTP Accept header. 
","id":80534397},"83803344":{"title":"MessageService","url":"guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService","body":"MessageService
  The MessageService allows domain objects to raise information, warning or 
error messages. These messages can either be simple strings, or can be 
translated. ","description":" The MessageService allows domain objects to raise 
information, warning or error messages. These messages can either be simple 
strings, or can be translated. 
","id":83803344},"83933647":{"title":"Persistence 
Concerns","url":"guides/ugbtb/ugbtb.htm
 l#_persistence_concerns","body":"Persistence Concerns 
","description":"","id":83933647},"85931482":{"title":"Task","url":"release-notes/release-notes.html#_task_24","body":"Task
 
","description":"","id":85931482},"87271564":{"title":"2004:","url":"pages/articles-and-presentations/articles-and-presentations.html#_2004","body":"2004:
 ","description":"","id":87271564},"90561824":{"title":"Wicket 
Viewer","url":"release-notes/release-notes.html#_wicket_viewer_8","body":"Wicket
 Viewer ","description":"","id":90561824},"90935214":{"title":"Wicket 
Viewer","url":"release-notes/release-notes.html#_wicket_viewer_10","body":"Wicket
 Viewer ","description":"","id":90935214},"91902412":{"title":"The issue in 
more 
detail","url":"guides/ugodn/ugodn.html#_the_issue_in_more_detail","body":"The 
issue in more detail  Consider these entities (yuml.me/b8681268):  In the 
course of a transaction, the Agreement entity is loaded into memory (not 
necessarily modified), and then new AgreementRoles are associated
  to it.  All these entities implement Comparable using ObjectContracts, and 
the implementation of AgreementRole's (simplified) is:  while Agreement's is 
implemented as:  and Party's is similarly implemented as:  DataNucleus’s 
persistence-by-reachability algorithm adds the AgreementRole instances into a 
SortedSet, which causes AgreementRole#compareTo() to fire:  In other words, in 
figuring out whether AgreementRole requires the persistence-by-reachability 
algorithm to run, it causes the adjacent associated entity Party to also be 
retrieved. ","description":" Consider these entities (yuml.me/b8681268): 
","id":91902412},"92467660":{"title":"API and 
Usage","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage","body":"API
 and Usage  There are two main parts to using fixture scripts: the 
FixtureScripts domain service class, and the FixtureScript view model class:  
Let’s look at FixtureScripts domain service in more detail first. 
","description":" There are two main part
 s to using fixture scripts: the FixtureScripts domain service class, and the 
FixtureScript view model class: ","id":92467660},"96583162":{"title":"Configure 
toolchains 
plugin","url":"guides/cgcom/cgcom.html#_configure_toolchains_plugin","body":"Configure
 toolchains plugin  Apache Isis releases are built using Java 7, enforced using 
the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains 
plugin is configured, as described in the contributors' guide. 
","description":" Apache Isis releases are built using Java 7, enforced using 
the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains 
plugin is configured, as described in the contributors' guide. 
","id":96583162},"99090360":{"title":"Running the 
App","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_simpleapp-archetype_running-the-app","body":"Running
 the App  The simpleapp archetype generates a single WAR file, configured to 
run both the Wicket viewer and the Restful Objects viewer. T
 he archetype also configures the DataNucleus/JDO Objectstore to use an 
in-memory HSQLDB connection.  Once you’ve built the app, you can run the WAR 
in a variety of ways. ","description":" The simpleapp archetype generates a 
single WAR file, configured to run both the Wicket viewer and the Restful 
Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore 
to use an in-memory HSQLDB connection. 
","id":99090360},"100682258":{"title":"Update 
dependencies","url":"guides/cgcom/cgcom.html#_update_dependencies","body":"Update
 dependencies  With the release complete, now is a good time to bump versions 
of dependencies (so that there is a full release cycle to identify any possible 
issues).  You will probably want to create a new JIRA ticket for these updates 
(or if minor then use the \"catch-all\" JIRA ticket raised earlier for the next 
release). ","description":" With the release complete, now is a good time to 
bump versions of dependencies (so that there is a full rele
 ase cycle to identify any possible issues). 
","id":100682258},"102347041":{"title":"Bug","url":"release-notes/release-notes.html#_bug_10","body":"Bug
 ","description":"","id":102347041},"104167755":{"title":"How to implement a 
spellchecker?","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How
 to implement a spellchecker?  From this thread on the Apache Isis users 
mailing list:  One way to implement is to use the event bus:  if if the change 
is made through an edit, you can use @Property#domainEvent().  You’ll need 
some way to know which fields should be spell checked. Two ways spring to mind: 
 And you’ll (obviously) also need some sort of spell checker implementation 
to call. ","description":" From this thread on the Apache Isis users mailing 
list: 
","id":104167755},"105480253":{"title":"Visitor","url":"guides/ugbtb/ugbtb.html#__code_visitor_code","body":"Visitor
  More often than not, you’ll want to visit every element in the metamo
 del, and so for this you can instead subclass from 
MetaModelValidatorVisiting.Visitor:  You can then create your custom validator 
by subclassing MetaModelValidatorComposite and adding the visiting validator:  
If you have more than one rule then each can live in its own visitor. 
","description":" More often than not, you’ll want to visit every element in 
the metamodel, and so for this you can instead subclass from 
MetaModelValidatorVisiting.Visitor: 
","id":105480253},"106558909":{"title":"contributedAs()","url":"guides/rgant/rgant.html#_rgant-ActionLayout_contributedAs","body":"contributedAs()
  For a domain service action that can be contributed, the contributedAs() 
attribute determines how it is contributed: as an action or as an association 
(ie a property or collection).  The distinction between property or collection 
is automatic: if the action returns a java.util.Collection (or subtype) then 
the action is contributed as a collection; otherwise it is contributed as a 
property.  
 For a domain service action to be contributed, the domain services must have a 
nature nature of either VIEW or VIEW_CONTRIBUTIONS_ONLY, and the action must 
have safe action semantics, and takes a single argument, namely the contributee 
domain object.  For example:  It’s also possible to use the attribute to 
suppress the action completely:  In such cases, though, it would probably make 
more sense to annotate the action as either hidden or indeed @Programmatic. 
","description":" For a domain service action that can be contributed, the 
contributedAs() attribute determines how it is contributed: as an action or as 
an association (ie a property or collection). 
","id":106558909},"106606865":{"title":"Using the Wicket 
Viewer","url":"guides/rgcfg/rgcfg.html#_using_the_wicket_viewer","body":"Using 
the Wicket Viewer  Most of the you’re likely to run Apache Isis using the 
Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to 
Wicket’s \"configuration\" concept:  Wic
 ket’s mechanism for specifying the \"configuration\" is to use a context 
parameter in web.xml; Apache Isis automatically infers its own deployment type 
from this. In other words: ","description":" Most of the you’re likely to run 
Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment 
type\" concept maps to Wicket’s \"configuration\" concept: 
","id":106606865},"108815435":{"title":"unchanging()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_unchanging","body":"unchanging()
  The unchanging() attribute is used to indicate that the value held by the 
property never changes over time, even when other properties of the object do 
change.  Setting this attribute to true is used as a hint to the viewer to not 
redraw the property after an AJAX update of some other property/ies of the 
object have changed. This is primarily for performance, eg can improve the user 
experience when rendering PDFs/blobs.  Note that for this to work, the viewer 
will also ensure that
  none of the property’s parent component (such as a tab group panel) are 
re-rendered.  For example: ","description":" The unchanging() attribute is used 
to indicate that the value held by the property never changes over time, even 
when other properties of the object do change. 
","id":108815435},"109833874":{"title":"Persistable","url":"guides/rgcms/rgcms.html#_rgcms_classes_mixins_Persistable","body":"Persistable
  All domain entities automatically implement the DataNucleus Persistable role 
interface as a result of the enhancer process (the fully qualified class name 
is org.datanucleus.enhancement.Persistable). So as a developer you do not need 
to write any code to obtain the mixins that contribute to this interface.  
These mixin properties/actions are all associated with the \"Metadata\" 
fieldset. A number of other mixins also contribute properties or actions to the 
\"Metadata\" fieldset. ","description":" All domain entities automatically 
implement the DataNucleus Persistable rol
 e interface as a result of the enhancer process (the fully qualified class 
name is org.datanucleus.enhancement.Persistable). So as a developer you do not 
need to write any code to obtain the mixins that contribute to this interface. 
","id":109833874},"112375674":{"title":"Auditing","url":"migration-notes/migration-notes.html#_auditing","body":"Auditing
  The AuditingService SPI service has been deprecated, instead replaced by the 
AuditerService.  There can be more than one implementation of this new SPI, and 
a framework-provided implementation (AuditerServiceLogging) will log to a file. 
The (non-ASF) Incode Platform's audit module also implements the new SPI. 
","description":" The AuditingService SPI service has been deprecated, instead 
replaced by the AuditerService. 
","id":112375674},"113098816":{"title":"DataNucleus Object 
Store","url":"guides/htg.html#_datanucleus_object_store","body":"DataNucleus 
Object Store ","description":"","id":113098816},"115229271":{"title":"Domain 
Entiti
 
es","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-entities","body":"Domain
 Entities  Entities are persistent domain objects, with their persistence 
handled by JDO/DataNucleus. As such, they are mapped to a persistent object 
store, typically an RDBMS, with DataNucleus taking care of both lazy loading 
and also the persisting of modified (\"dirty\") objects.  Domain entities are 
generally decorated with both DataNucleus and Apache Isis annotations. Let’s 
look at some of the most commonly-used annotations.  To start with, entities 
are flagged as being \"persistence capable\", indicating how JDO/DataNucleus 
should manage their identity:  All domain entities will have some sort of 
mandatory key properties. The example below is a very simple case, where the 
entity is identified by a name property:  It’s also common for domain 
entities to have queries annotated on them. These are used by repository domain 
services to query for instances of the entity:  DataNucleus provi
 des several APIs for defining queries, including entirely programmatic and 
type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.  The 
corresponding repository method for the above query is: ","description":" 
Entities are persistent domain objects, with their persistence handled by 
JDO/DataNucleus. As such, they are mapped to a persistent object store, 
typically an RDBMS, with DataNucleus taking care of both lazy loading and also 
the persisting of modified (\"dirty\") objects. 
","id":115229271},"121574190":{"title":"Related 
Services","url":"guides/rgsvc/rgsvc.html#_related_services_18","body":"Related 
Services  The ActionInteractionContext service allows bulk actions to 
co-ordinate with each other.  The QueryResultsCache is useful for caching the 
results of expensive method calls. ","description":" The 
ActionInteractionContext service allows bulk actions to co-ordinate with each 
other. ","id":121574190},"121879267":{"title":"Wicket 
Viewer","url":"release-notes/releas
 e-notes.html#_wicket_viewer_2","body":"Wicket Viewer 
","description":"","id":121879267},"122762699":{"title":"Contributee","url":"guides/rgcms/rgcms.html#_rgcms_classes_contributee","body":"Contributee
  The interfaces listed in this chapter act as contributees; they allow domain 
services to contribute actions/properties/collections to any domain objects 
that implement these interfaces. ","description":" The interfaces listed in 
this chapter act as contributees; they allow domain services to contribute 
actions/properties/collections to any domain objects that implement these 
interfaces. 
","id":122762699},"125299345":{"title":"Example","url":"guides/rgant/rgant.html#_example_2","body":"Example
  This example is taken from the (non-ASF) Isis addons' todoapp: 
","description":" This example is taken from the (non-ASF) Isis addons' 
todoapp: ","id":125299345},"125961908":{"title":"Do 
it!","url":"pages/tg/tg.html#_do_it","body":"Do it! 
","description":"","id":125961908},"134804772":{"title":
 "How to handle void/null 
results","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-handle-void-and-null-results","body":"How
 to handle void/null results  From this thread on the Apache Isis users mailing 
list:  One way to implement this idea is to provide a custom implementation of 
the RoutingService SPI domain service. The default implementation will either 
return the current object (if not null), else the home page (as defined by 
@HomePage) if one exists.  The following custom implementation refines this to 
use the breadcrumbs (available in the Wicket viewer) to return the first 
non-deleted domain object found in the list of breadcrumbs:  Note that the 
above implementation uses Java 8, so if you are using Java 7 then you’ll need 
to backport accordingly. ","description":" From this thread on the Apache Isis 
users mailing list: 
","id":134804772},"144529895":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_44","body":"Improvement
 ","description
 
":"","id":144529895},"153666205":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_17","body":"Implementation
  The core framework provides a default implementation of this service 
(o.a.i.core.metamodel.services.title.TitleServiceDefault). ","description":" 
The core framework provides a default implementation of this service 
(o.a.i.core.metamodel.services.title.TitleServiceDefault). 
","id":153666205},"155655500":{"title":"@PrimaryKey 
(javax.jdo)","url":"guides/rgant/rgant.html#_rgant-PrimaryKey","body":"@PrimaryKey
 (javax.jdo) 
","description":"","id":155655500},"158069558":{"title":"Usability: 
Defaults","url":"pages/tg/tg.html#_usability_defaults","body":"Usability: 
Defaults 
","description":"","id":158069558},"158897592":{"title":"Refactoring","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_refactoring","body":"Refactoring
  Loads of good stuff on the Refactor menu; most used are:  If you can’t 
remember all those shortcuts, just use ctrl-shift-alt-T 
 (might want to rebind that to something else!) and get a context-sensitive 
list of refactorings available for the currently selected object 
","description":" Loads of good stuff on the Refactor menu; most used are: 
","id":158897592},"159072030":{"title":"(non-ASF) Incode 
Platform","url":"migration-notes/migration-notes.html#_migration-notes_1.14.0-to-1.15.0_incode-platform","body":"(non-ASF)
 Incode Platform  The various (non-ASF) Isis Addons and Incode Catalog have 
also been combined into a single \"Incode Platform\".  While each module can 
still be consumed individually, the new platform versions consistently (a 
change in any one module will result in a re-release of all). This should make 
these modules easier to consume, and easier to maintain/develop.  All the 
modules remain open source, still licensed under the ASF v2.0 license.  As of 
this release, none of the groupIds or artifactIds have changed. They will be 
rationalized/made consistent in a future release; most probably to c
 oincide with v2.0.0 of the framework. ","description":" The various (non-ASF) 
Isis Addons and Incode Catalog have also been combined into a single \"Incode 
Platform\". ","id":159072030},"160872749":{"title":"Related 
Services","url":"guides/rgfis/rgfis.html#_related_services","body":"Related 
Services  The default implementation of ContentNegotiationService delegates to 
ContentMappingService (if present) to convert domain entities into a stable 
form (eg DTO).  The ContentNegotiationService is itself called by the (default 
implementation of) RepresentationService. ","description":" The default 
implementation of ContentNegotiationService delegates to ContentMappingService 
(if present) to convert domain entities into a stable form (eg DTO). 
","id":160872749},"163456888":{"title":"Dependency 
upgrade","url":"release-notes/release-notes.html#_dependency_upgrade_9","body":"Dependency
 upgrade 
","description":"","id":163456888},"163915714":{"title":"web.xml","url":"migration-notes/migration-no
 tes.html#_web_xml","body":"web.xml  In the web.xml, the \"isis.viewers\" 
context-param is now ignored. Instead the viewer_wicket.properties and 
viewer_restfulobjects.properties will both be loaded if present (but neither 
need be present). ","description":" In the web.xml, the \"isis.viewers\" 
context-param is now ignored. Instead the viewer_wicket.properties and 
viewer_restfulobjects.properties will both be loaded if present (but neither 
need be present). 
","id":163915714},"165602306":{"title":"GridLoaderService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService","body":"GridLoaderService
  The GridLoaderService provides the ability to load the XML layout (grid) for 
a domain class. ","description":" The GridLoaderService provides the ability to 
load the XML layout (grid) for a domain class. 
","id":165602306},"165750333":{"title":"loaded()","url":"guides/rgcms/rgcms.html#_rgcms_methods_lifecycle_loaded","body":"loaded()
  The loaded() lifecycle callback met
 hod is called when a (persistent) object has just been loaded from the object 
store. ","description":" The loaded() lifecycle callback method is called when 
a (persistent) object has just been loaded from the object store. 
","id":165750333},"166045728":{"title":"Sanity 
Check","url":"guides/cgcom/cgcom.html#_sanity_check_2","body":"Sanity Check  
Ensure that the framework builds ok using the same command that your CI server 
is set up to execute (see section above). ","description":" Ensure that the 
framework builds ok using the same command that your CI server is set up to 
execute (see section above). ","id":166045728},"166899251":{"title":"Installing 
and Setting 
up","url":"guides/dg/dg.html#__dg_ide_intellij_installing","body":"Installing 
and Setting up  This section covers installation and setup. These 
notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but 
are believed to be compatible with more recent versions/other editions of the 
IDE. ","description":" This 
 section covers installation and setup. These notes/screenshots were prepared 
using IntelliJ Community Edition 14.1.x, but are believed to be compatible with 
more recent versions/other editions of the IDE. 
","id":166899251},"167039338":{"title":"Task","url":"release-notes/release-notes.html#_task_14","body":"Task
 
","description":"","id":167039338},"169081251":{"title":"Interaction","url":"guides/rgsvc/rgsvc.html#__code_interaction_code","body":"Interaction
  The public API of the Interaction class consists of:  This class is concrete 
(is also the implementation). ","description":" The public API of the 
Interaction class consists of: ","id":169081251},"174738887":{"title":"Related 
functionality","url":"guides/ugvw/ugvw.html#_related_functionality_2","body":"Related
 functionality  The Recent Pages also lists recently visited pages, selected 
from a drop-down. ","description":" The Recent Pages also lists recently 
visited pages, selected from a drop-down. ","id":174738887},"175028546":{"t
 
itle":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_5","body":"Implementation
  The framework provides a default implementation of this service, namely 
GridServiceDefault. ","description":" The framework provides a default 
implementation of this service, namely GridServiceDefault. 
","id":175028546},"175197970":{"title":"Performance 
tuning","url":"pages/tg/tg.html#_performance_tuning","body":"Performance tuning 
","description":"","id":175197970},"175636232":{"title":"RepositoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService","body":"RepositoryService
  The RepositoryService collects together methods for creating, persisting and 
searching for entities from the underlying persistence store. It acts as an 
abstraction over the JDO/DataNucleus objectstore.  You can use it during 
prototyping to write naive queries (find all rows, then filter using the Guava 
Predicate API, or you can use it to call JDO named queries using JDOQL.  As an 
 alternative, you could also use JDO typesafe queries through the 
IsisJdoSupport service. ","description":" The RepositoryService collects 
together methods for creating, persisting and searching for entities from the 
underlying persistence store. It acts as an abstraction over the 
JDO/DataNucleus objectstore. ","id":175636232},"176767338":{"title":"Command 
and 
Events","url":"guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events","body":"Command
 and Events  A good number of the domain services manage the execution of 
action invocations/property edits, along with the state of domain objects that 
are modified as a result of these. These services capture information which can 
then be used for various purposes, most notably for auditing or for publishing 
events, or for deferring execution such that the execution be performed in the 
background at some later date.  The diagram below shows how these services fit 
together. The outline boxes are services while the coloured boxes represent 
 data structures - defined in the applib and therefore accessible to domain 
applications - which hold various information about the executions.  To 
explain:  Implementations of CommandService can use the Command#getMemento() 
method to obtain a XML equivalent of that Command, reified using the cmd.xsd 
schema. This can be converted back into a CommandDto using the CommandDtoUtils 
utility class (part of the applib).  Similarly, implementations of 
PublisherService can use the InteractionDtoUtils utility class to obtain a 
InteractionDto representing the interaction, either just for a single execution 
or for the entire call-graph. This can be converted into XML in a similar 
fashion.  Likewise, the PublishedObjects class passed to the PublisherService 
at the end of the interaction provides the PublishedObjects#getDto() method 
which returns a ChangesDto instance. This can be converted into XML using the 
ChangesDtoUtils utility class.  One final point: multiple PublisherService 
implementation
 s are supported because different implementations may have different 
responsibilities. For example, the (non-ASF) Incode Platform's publishmq module 
is responsible for publishing messages onto an ActiveMQ event bus, for 
inter-system communication. However, the SPI can also be used for profiling; 
each execution within the call-graph contains metrics of the number of objects 
loaded or modified as a result of that execution, and thus could be used for 
application profiling. The framework provides a default PublisherServiceLogging 
implementation that logs this using SLF4J. ","description":" A good number of 
the domain services manage the execution of action invocations/property edits, 
along with the state of domain objects that are modified as a result of these. 
These services capture information which can then be used for various purposes, 
most notably for auditing or for publishing 
events","id":176767338},"178125062":{"title":"domainEvent()","url":"guides/rgant/rgant.html#_rgant-Actio
 n_domainEvent","body":"domainEvent()  Whenever a domain object (or list of 
domain objects) is to be rendered, the framework fires off multiple domain 
events for every property, collection and action of the domain object. In the 
cases of the domain object’s actions, the events that are fired are:  
Subscribers subscribe through the EventBusService using either Guava or Axon 
Framework annotations and can influence each of these phases.  By default the 
event raised is ActionDomainEvent.Default. For example:  The domainEvent() 
attribute allows a custom subclass to be emitted allowing more precise 
subscriptions (to those subclasses) to be defined instead. This attribute is 
also supported for collections and properties.  For example:  The benefit is 
that subscribers can be more targeted as to the events that they subscribe to. 
","description":" Whenever a domain object (or list of domain objects) is to be 
rendered, the framework fires off multiple domain events for every property, 
collec
 tion and action of the domain object. In the cases of the domain object’s 
actions, the events that are fired are: 
","id":178125062},"180783343":{"title":"TranslatableException","url":"guides/ugbtb/ugbtb.html#__code_translatableexception_code","body":"TranslatableException
  Another mechanism by which messages can be rendered to the user are as the 
result of exception messages thrown and recognized by an ExceptionRecognizer.  
In this case, if the exception implements TranslatableException, then the 
message will automatically be translated before being rendered. The 
TranslatableException itself takes the form: ","description":" Another 
mechanism by which messages can be rendered to the user are as the result of 
exception messages thrown and recognized by an ExceptionRecognizer. 
","id":180783343},"183226640":{"title":"updatedLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatedLifecycleEvent","body":"updatedLifecycleEvent()
  Whenever a (persistent) domain object
  has been modified and has been updated in the database, an \"updated\" 
lifecycle event is fired.  Subscribers subscribe through the EventBusService 
and can use the event to obtain a reference to the domain object.  By default 
the event raised is ObjectUpdatedEvent.Default. For example:  The purpose of 
the updatedLifecycleEvent() attribute is to allows a custom subclass to be 
emitted instead. A similar attribute is available for other lifecycle events.  
For example:  The benefit is that subscribers can be more targeted as to the 
events that they subscribe to. ","description":" Whenever a (persistent) domain 
object has been modified and has been updated in the database, an \"updated\" 
lifecycle event is fired. 
","id":183226640},"188123644":{"title":"2013","url":"pages/articles-and-presentations/articles-and-presentations.html#_2013","body":"2013
 
","description":"","id":188123644},"189180810":{"title":"HoldsUpdatedAt","url":"guides/rgcms/rgcms.html#_rgcms_classes_roles_HoldsUpdatedAt"
 ,"body":"HoldsUpdatedAt  The HoldsUpdatedAt role interface allows the 
(framework-provided) TimestampService to update each object with the current 
timestamp whenever it is modified in a transaction.  The interface is defined 
as:  The current time is obtained from the ClockService.  Entities that 
implement this interface often also implement HoldsUpdatedBy role interface; as 
a convenience the Timestampable interface combines the two roles. 
","description":" The HoldsUpdatedAt role interface allows the 
(framework-provided) TimestampService to update each object with the current 
timestamp whenever it is modified in a transaction. 
","id":189180810},"191180113":{"title":"persistence.xml","url":"guides/ugodn/ugodn.html#_ugodn_configuring_persistence-xml","body":"persistence.xml
  DataNucleus will for itself also and read the META-INF/persistence.xml. In 
theory it can hold mappings and even connection strings. However, with Apache 
Isis we tend to use annotations instead and externalize conn
 ection strings. so its definition is extremely simply, specifying just the 
name of the \"persistence unit\".  Here’s the one provided by the SimpleApp 
archetype:  Normally all one needs to do is to change the persistence-unit 
name.  See DataNucleus' documentation on persistence.xml to learn more. 
","description":" DataNucleus will for itself also and read the 
META-INF/persistence.xml. In theory it can hold mappings and even connection 
strings. However, with Apache Isis we tend to use annotations instead and 
externalize connection strings. so its definition is extremely simply, 
specifying just the name of the \"persistence 
unit","id":191180113},"193219460":{"title":"API","url":"guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService_api","body":"API
  The API defined by the service is: ","description":" The API defined by the 
service is: 
","id":193219460},"193237835":{"title":"Core","url":"release-notes/release-notes.html#_core_8","body":"Core
 ","description":"","id":193237835}
 
,"194608562":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_19","body":"SPI 
 It is also possible to define use some other underlying event bus 
implementation, by implementing the EventBusImplementation SPI:  As is probably 
obvious, the EventBusService just delegates down to these method calls when its 
own similarly named methods are called.  If you do provide your own 
implementation of this SPI, be aware that your subscribers will need to use 
whatever convention is required (eg different annotations) such that the events 
are correctly routed through to your subscribers.  If you have written your own 
implementation of the EventBusServiceImplementation SPI, then specify instead 
its fully-qualified class name: ","description":" It is also possible to define 
use some other underlying event bus implementation, by implementing the 
EventBusImplementation SPI: ","id":194608562},"195374240":{"title":"Update the 
LDAP committee (if a PMC member)","url":"guides/cgcom/cgcom.html#_update_the_
 ldap_committee_if_a_pmc_member","body":"Update the LDAP committee (if a PMC 
member)  (Assuming that the new committer is a PMC member), also add them as to 
the PMC committee. This takes two steps:  The new committer does not officially 
become a member of the PMC until the ASF records have been updated. 
","description":" (Assuming that the new committer is a PMC member), also add 
them as to the PMC committee. This takes two steps: 
","id":195374240},"195848147":{"title":"ICLA, obtain new 
account","url":"guides/cgcom/cgcom.html#_icla_obtain_new_account","body":"ICLA, 
obtain new account  If required (that is, if the committer is not already a 
committer for a different ASF project), then ask them to complete an ICLA. As a 
result of this, they should also get an @apache.org user name.  More info can 
be found in the ASF new committers guide. ","description":" If required (that 
is, if the committer is not already a committer for a different ASF project), 
then ask them to complete an ICLA. A
 s a result of this, they should also get an @apache.org user name. 
","id":195848147},"196560907":{"title":"XJC 
profile","url":"guides/rgmvn/rgmvn.html#__rgmvn_xsd_xsd-submodule_xjc-profile","body":"XJC
 profile  The xjc profile reads the XSD generated by the xsd goal, and from it 
generates Java DTOs. Note that this isn’t round-tripping: the original view 
model is only for use within the Isis app, whereas the DTO generated from the 
XSDs is for use in a standalone context, eg in a Java subscriber on an event 
bus.  The xjc profile is defined as:  The referenced catalog.xml file instructs 
the xjc plugin how to resolve referenced schema locations. Only a reference for 
the Apache Isis common schema is likely to be needed: ","description":" The xjc 
profile reads the XSD generated by the xsd goal, and from it generates Java 
DTOs. Note that this isn’t round-tripping: the original view model is only 
for use within the Isis app, whereas the DTO generated from the XSDs is for use 
in a standa
 lone context","id":196560907},"198329644":{"title":"Strings 
(Length)","url":"guides/ugfun/ugfun.html#__ugfun_programming-model_properties_datatypes_strings","body":"Strings
 (Length)  By default JDO/DataNucleus will map string properties to a 
VARCHAR(255). To limit the length, use the @Column(length=…​) annotation.  
For example:  This is a good example of a case where Apache Isis infers domain 
semantics from the JDO annotation. ","description":" By default JDO/DataNucleus 
will map string properties to a VARCHAR(255). To limit the length, use the 
@Column(length=…​) annotation. 
","id":198329644},"198382465":{"title":"Actions","url":"pages/tg/tg.html#_actions","body":"Actions
 
","description":"","id":198382465},"201216196":{"title":"GitLab","url":"guides/ugfun/ugfun.html#_gitlab","body":"GitLab
  Create a git repository \"myapp\" in GitLab.  Using Settings > CI/CD, specify 
the following Secret Variables:  Finally, push a copy of the generated 
application to this repository using t
 he instructions provided by GitLab.  This will kick off a pipeline that will 
build the image and push to DockerHub.  The tag name is based on a combination 
of the date, the branch and the git shaId. ","description":" Create a git 
repository \"myapp\" in GitLab. ","id":201216196},"203208629":{"title":"New 
Feature","url":"release-notes/release-notes.html#_new_feature_18","body":"New 
Feature 
","description":"","id":203208629},"203740710":{"title":"RoutingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService","body":"RoutingService
  The RoutingService provides the ability to return (and therefore render) an 
alternative object from an action invocation.  There are two primary use cases: 
 Currently the routing service is used only by the Wicket viewer; it is ignored 
by the Restful Objects viewer. ","description":" The RoutingService provides 
the ability to return (and therefore render) an alternative object from an 
action invocation. ","id":203740710},"20445
 2611":{"title":"Related 
services","url":"guides/rgsvc/rgsvc.html#_related_services_15","body":"Related 
services  The ConfigurationServiceMenu exposes the allConfigurationProperties 
action in the user interface. ","description":" The ConfigurationServiceMenu 
exposes the allConfigurationProperties action in the user interface. 
","id":204452611},"207811701":{"title":"API","url":"guides/rgsvc/rgsvc.html#_api_2","body":"API
  The API of TitleService is: ","description":" The API of TitleService is: 
","id":207811701},"209853740":{"title":"To 
run","url":"guides/rgmvn/rgmvn.html#_to_run","body":"To run  The plugin is 
activated by default, so is run simply using:  This will run any tests, and 
then also - because the plugin is activated by the isis-validate property and 
bound to the test phase, will run the plugin’s validate goal.  If for any 
reason you want to disable the validation, use: ","description":" The plugin is 
activated by default, so is run simply using: ","id":209853740},"213642
 269":{"title":"Moving 
on","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_helloworld-archetype_moving-on","body":"Moving
 on  When you are ready to start working on your own app, we don’t recommend 
building on top of the helloworld app.  Instead, we suggest that you start with 
the simpleapp archetype instead. Although a little more complex, it provides 
more structure and tests, all of which will help you as your application grows. 
","description":" When you are ready to start working on your own app, we 
don’t recommend building on top of the helloworld app. 
","id":213642269},"216231183":{"title":"Raising a pull 
request","url":"guides/dg/dg.html#_raising_a_pull_request","body":"Raising a 
pull request  If you have your own fork, you can now simply push the changes 
you’ve made locally to your fork:  This will create a corresponding branch in 
the remote github repo. If you use gitk --all, you’ll also see a 
remotes/origin/ISIS-123-blobs branch.  Then, use github to raise a 
 pull request. Pull requests sent to the Apache GitHub repositories will 
forward a pull request e-mail to the dev mailing list. You’ll probably want 
to sign up to the dev mailing list first before issuing your first pull request 
(though that isn’t mandatory).  The process to raise the pull request, 
broadly speaking: ","description":" If you have your own fork, you can now 
simply push the changes you’ve made locally to your fork: 
","id":216231183},"220685197":{"title":"AbstractSubscriber","url":"guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber","body":"AbstractSubscriber
  This is a convenience superclass for creating subscriber domain services on 
the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to 
automatically register/unregister itself with the EventBusService.  It’s 
important that subscribers register before any domain services that might emit 
events on the EventBusService. For example, the (non-ASF) Incode Platform 
security module provid
 es a domain service that automatically seeds certain domain entities; these 
will generate lifecycle events and so any subscribers must be registered before 
such seed services. The easiest way to do this is to use the 
@DomainServiceLayout#menuOrder() attribute.  As a convenience, the 
AbstractSubscriber specifies this attribute. ","description":" This is a 
convenience superclass for creating subscriber domain services on the 
EventBusService. It uses @PostConstruct and @PreDestroy callbacks to 
automatically register/unregister itself with the EventBusService. 
","id":220685197},"222371586":{"title":"Nullability","url":"guides/rgant/rgant.html#_rgant-Column_allowsNull","body":"Nullability
  The allowsNull() attribute is used to specify if a property is mandatory or 
is optional.  For example:  Isis also provides @Property#optionality() 
attribute. 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.  You should also be aware that in the lack of either 
the @Column#allowsNull() or the @Property#optionality() attributes, that the 
JDO and Apache Isis defaults differ. Apache Isis rule is straight-forward: 
properties are assumed to be required. JDO on the other hand specifies that 
only primitive types are mandatory; everything else is assumed to be optional. 
Therefore a lack of either annotation can also trigger the fail-fast validation 
check.  In the vast majority of cases you should be fine just to add the 
@Column#allowsNull() attribute to the getter. But see the documentation for 
@Property#optionality() attribute for discussion on one or two minor edge 
cases. ","description":" The allowsNull() attribute is used to specify if a 
property is mandatory or is optional. 
","id":222371586},"224301547":{"title":"IsisWebAppBootstrapper","url":"guides/ugbtb/ugbtb.html#__code_isiswebappbootstrapper_code","body":"IsisWebAppBootstrapper
  The IsisWebAppBootstrapper servlet
  context listener bootstraps the shared (global) metadata for the Apache Isis 
framework. This listener is not required (indeed must not be configured) if the 
Wicket viewer is in use.  Its definition is:  Its context parameters are: 
","description":" The IsisWebAppBootstrapper servlet context listener 
bootstraps the shared (global) metadata for the Apache Isis framework. This 
listener is not required (indeed must not be configured) if the Wicket viewer 
is in use. 
","id":224301547},"227377078":{"title":"Initialization","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-services_initialization","body":"Initialization
  Services can optionally declare lifecycle callbacks to initialize them (when 
the app is deployed) and to shut them down (when the app is undeployed).  An 
Apache Isis session is available when initialization occurs (so services can 
interact with the object store, for example).  The framework will call any 
public method annotated with @PostConstruct with either 
 no arguments of an argument of type Map<String,String>. In the latter case, 
the framework passes in the configuration (isis.properties and any other 
component-specific configuration files).  Shutdown is similar; the framework 
will call any method annotated with @PreDestroy. ","description":" Services can 
optionally declare lifecycle callbacks to initialize them (when the app is 
deployed) and to shut them down (when the app is undeployed). 
","id":227377078},"228550183":{"title":"Policies","url":"guides/cgcom/cgcom.html#_cgcom_policies","body":"Policies
 ","description":"","id":228550183},"229025509":{"title":"Remove references to 
isis-viewer-wicket parent 
pom.","url":"migration-notes/migration-notes.html#_remove_references_to_code_isis_viewer_wicket_code_parent_pom","body":"Remove
 references to isis-viewer-wicket parent pom.  In earlier releases the Wicket 
viewer defined its own parent pom.xml for dependency management and its 
dependencies and to declare the various submodules that ma
 ke up the viewer. This pom.xml has now been incorporated into the parent 
pom.xml for the Core framework.  Therefore, in the parent pom.xml of your own 
domain applications, remove: ","description":" In earlier releases the Wicket 
viewer defined its own parent pom.xml for dependency management and its 
dependencies and to declare the various submodules that make up the viewer. 
This pom.xml has now been incorporated into the parent pom.xml for the Core 
framework. 
","id":229025509},"230599582":{"title":"AuditingServiceInternal","url":"guides/rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal","body":"AuditingServiceInternal
  The (internal) AuditingServiceInternal domain service acts as an internal 
facade to any registered AuditerService service(s). It is responsible for 
obtaining the details of all changes to domain objects within an interaction, 
and then to call the configured AuditerService(s) to actually create audit 
entries of those changes. ","description":" The (inte
 rnal) AuditingServiceInternal domain service acts as an internal facade to any 
registered AuditerService service(s). It is responsible for obtaining the 
details of all changes to domain objects within an interaction, and then to 
call the configured AuditerService(s) to actually create audit entries of those 
changes. ","id":230599582},"232471644":{"title":"Registering 
Subscribers","url":"guides/rgsvc/rgsvc.html#_registering_subscribers","body":"Registering
 Subscribers  The register() method should be called in the @PostConstruct 
lifecycle method. It is valid and probably the least confusing to readers to 
also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, 
unregistering is actually a no-op).  For example:  This works for both 
singleton (application-scoped) and also @RequestScoped domain services. 
","description":" The register() method should be called in the @PostConstruct 
lifecycle method. It is valid and probably the least confusing to readers to 
also \"
 unregister\" in the @PreDestroy lifecycle method (though as noted above, 
unregistering is actually a no-op). 
","id":232471644},"238546442":{"title":"rebuildMetamodel()","url":"guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel","body":"rebuildMetamodel()
  The Object_rebuildMetamodel mixin provides the ability to discard the current 
internal metamodel data (an instance of ObjectSpecification) for the domain 
class of the rendered object, and recreate from code and other sources (most 
notably, layout XML data). It has the following signature: ","description":" 
The Object_rebuildMetamodel mixin provides the ability to discard the current 
internal metamodel data (an instance of ObjectSpecification) for the domain 
class of the rendered object, and recreate from code and other sources (most 
notably, layout XML data). It has the following signature: 
","id":238546442},"238979657":{"title":"New 
Feature","url":"release-notes/release-notes.html#_new_feature_22","body":"New F
 eature 
","description":"","id":238979657},"240026998":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_14","body":"Improvement
 
","description":"","id":240026998},"242030985":{"title":"1.4.0","url":"release-notes/release-notes.html#_release-notes_1.4.0","body":"1.4.0
 
","description":"","id":242030985},"243439147":{"title":"hidden()","url":"guides/rgant/rgant.html#_rgant-Property_hidden","body":"hidden()
  Properties can be hidden at the domain-level, indicating that they are not 
visible to the end-user. This attribute can also be applied to actions and 
collections.  For example:  The acceptable values for the where parameter are:  
For example, if a property is annotated with @Title, then normally this should 
be hidden from all tables. Annotating with @Property(where=Where.NOWHERE) 
overrides this. ","description":" Properties can be hidden at the domain-level, 
indicating that they are not visible to the end-user. This attribute can also 
be applied to actions 
 and collections. 
","id":243439147},"243876171":{"title":"Task","url":"release-notes/release-notes.html#_task_28","body":"Task
 
","description":"","id":243876171},"244520152":{"title":"SessionLoggingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_SessionLoggingService","body":"SessionLoggingService
  The SessionLoggingService defines an SPI to keep track of (typically: to log) 
the current sessions that are using the application. ","description":" The 
SessionLoggingService defines an SPI to keep track of (typically: to log) the 
current sessions that are using the application. 
","id":244520152},"246409050":{"title":"Using system 
properties","url":"guides/ugbtb/ugbtb.html#_using_system_properties","body":"Using
 system properties  The servlet context initializer will search for any system 
properties called isis.xxx and if present will use them as overrides.  Thus, an 
alternative option for a Docker image is to bootstrap the servlet container 
(Tomcat, Jetty) with appro
 priate system properties set up. For example, with Tomcat this can be done by 
writing into the conf/catalina.properties file (see for example this 
stackoverflow post).  The Docker’s ENTRYPOINT therefore just needs to parse 
the Docker container’s own command line arguments and use to create this 
file. ","description":" The servlet context initializer will search for any 
system properties called isis.xxx and if present will use them as overrides. 
","id":246409050},"251015067":{"title":"myapp-dom 
Module","url":"migration-notes/migration-notes.html#__code_myapp_dom_code_module","body":"myapp-dom
 Module  In your myapp-dom module (containing definitions of your persistent 
entities and domain services), create an empty class to represent the module. 
This should be at the root package for the domain, eg:  Since there is no 
requirement to actually instantiate this class (it merely provides the location 
of the myapp.dom package), we give it a private constructor.  If you have any 
other mo
 dules where you have either domain services or entities, similarly create an 
empty \"module\" class. ","description":" In your myapp-dom module (containing 
definitions of your persistent entities and domain services), create an empty 
class to represent the module. This should be at the root package for the 
domain, eg: ","id":251015067},"255768608":{"title":"Multi-tenancy 
support","url":"pages/isis-in-pictures/isis-in-pictures.html#_multi_tenancy_support","body":"Multi-tenancy
 support  One significant feature of the (non-ASF) Incode Platform's security 
module is the ability to associate users and objects with a \"tenancy\". The 
todoapp uses this feature so that different users' list of todo items are kept 
separate from one another. A user with administrator is able to switch their 
own \"tenancy\" to the tenancy of some other user, in order to access the 
objects in that tenancy:  For more details, see the (non-ASF) Incode Platform's 
security module README. ","description":" One signif
 icant feature of the (non-ASF) Incode Platform's security module is the 
ability to associate users and objects with a \"tenancy\". The todoapp uses 
this feature so that different users' list of todo items are kept separate from 
one another. A user with administrator is able to 
switch","id":255768608},"257661017":{"title":"AppManifest 
(bootstrapping)","url":"guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping","body":"AppManifest
 (bootstrapping)  This section describes how to implement the AppManifest 
interface to bootstrap both an Apache Isis web application, and also its 
integration tests. ","description":" This section describes how to implement 
the AppManifest interface to bootstrap both an Apache Isis web application, and 
also its integration tests. 
","id":257661017},"259202548":{"title":"Run-as","url":"guides/htg.html#_ugsec_hints-and-tips_run-as","body":"Run-as
  This hint shows how to temporarily change the current user as reported by 
Shiro. This can be useful to 
 support \"Run As\", for example.  The heavy lifting is done in ShiroService:  
This could be exposed in the UI using a simple RunAsService, for example:  
Credits: adapted from this gist. ","description":" This hint shows how to 
temporarily change the current user as reported by Shiro. This can be useful to 
support \"Run As\", for example. ","id":259202548},"259358868":{"title":"Hints 
and Tips","url":"guides/ugodn/ugodn.html#_ugodn_hints-and-tips","body":"Hints 
and Tips 
","description":"","id":259358868},"266250802":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_2","body":"Implementation
  There is no default implementation of this service.  The (non-ASF) Isis 
addons' kitchensink app provides an example implementation:  which is rendered 
as: ","description":" There is no default implementation of this service. 
","id":266250802},"267695496":{"title":"Building Apache 
Isis","url":"guides/dg/dg.html#_dg_building-isis","body":"Building Apache Isis 
","description":"
 ","id":267695496},"273843820":{"title":"Simulated UI 
(WrapperFactory)","url":"guides/ugtst/ugtst.html#_simulated_ui_code_wrapperfactory_code","body":"Simulated
 UI (WrapperFactory)  When we talk about integration tests/specs here, we mean 
tests that exercise the domain object logic, through to the actual database. 
But we also want the tests to exercise the app from the users’s perspective, 
which means including the user interface.  For most other frameworks that would 
require having to test the application in a very heavy weight/fragile fashion 
using a tool such as Selenium, driving a web browser to navigate . In this 
regard though, Apache Isis has a significant trick up its sleeve. Because 
Apache Isis implements the naked objects pattern, it means that the UI is 
generated automatically from declared domain-objects, -views and -services. 
This therefore allows for other implementations of the UI.  The WrapperFactory 
domain service allows a test to wrap domain objects and thus to int
 eract with said objects \"as if\" through the UI:  If the test invokes an 
action that is disabled, then the wrapper will throw an appropriate exception. 
If the action is ok to invoke, it delegates through.  What this means is that 
an Isis application can be tested end-to-end without having to deploy it onto a 
webserver; the whole app can be tested while running in-memory. Although 
integration tests re (necessarily) slower than unit tests, they are not any 
harder to write (in fact, in some respects they are easier). ","description":" 
When we talk about integration tests/specs here, we mean tests that exercise 
the domain object logic, through to the actual database. But we also want the 
tests to exercise the app from the users’s perspective, which means including 
the user interface. ","id":273843820},"273985863":{"title":"addTo…​() 
(deprecated)","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_addTo","body":"addTo…​()
 (deprecated)  The addTo…​() supporting method i
 s called whenever an object is added to a collection. Its purpose is to allow 
additional business logic to be performed.  For example:  See also 
removeFrom…​()` ","description":" The addTo…​() supporting method is 
called whenever an object is added to a collection. Its purpose is to allow 
additional business logic to be performed. 
","id":273985863},"278859977":{"title":"promptStyle()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_promptStyle","body":"promptStyle()
  The promptStyle() attribute is used to specify whether, when editing a domain 
object property, the new value for the property is prompted by way of a dialog 
box, or is prompted using an inline panel (replacing the property on the page). 
 If the attribute is not set, then the value of the configuration property 
isis.viewer.wicket.promptStyle is used. If this is itself not set, then an 
inline prompt is used.  For example:  Alternatively, the promptStyle() can be 
specified using file-based layouts. ","descript
 ion":" The promptStyle() attribute is used to specify whether, when editing a 
domain object property, the new value for the property is prompted by way of a 
dialog box, or is prompted using an inline panel (replacing the property on the 
page). ","id":278859977},"278890330":{"title":"Build a domain 
app","url":"pages/tg/tg.html#_build_a_domain_app","body":"Build a domain app 
","description":"","id":278890330},"278999912":{"title":"Integration 
API","url":"guides/rgsvc/rgsvc.html#_rgsvc_integration-api","body":"Integration 
API 
","description":"","id":278999912},"285898371":{"title":"ObjectUpdatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectUpdatedEvent","body":"ObjectUpdatedEvent
  Subclass of AbstractLifecycleEvent, broadcast when an object has just been 
updated in the database. This is done either explicitly when the current 
transaction is flushed using the DomainObjectContainer's #flush(…​) method, 
else is done implicitly when the transaction commits a
 t the end of the user request.  ObjectUpdatedEvent.Default is the concrete 
implementation that is used. ","description":" Subclass of 
AbstractLifecycleEvent, broadcast when an object has just been updated in the 
database. This is done either explicitly when the current transaction is 
flushed using the DomainObjectContainer's #flush(…​) method, else is done 
implicitly when the transaction commits at the end of the user request. 
","id":285898371},"286919998":{"title":"Install Project 
Lombok","url":"guides/dg/dg.html#__dg_ide_eclipse_configure-lombok","body":"Install
 Project Lombok  The SimpleApp archetype uses Project Lombok annotations 
(@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this 
requires an installation step:  Then restart Eclipse. ","description":" The 
SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so 
on) to reduce the boilerplate. For Eclipse IDE this requires an installation 
step: ","id":286919998},"288377989":{
 "title":"Philosophy and 
Architecture","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_philosophy","body":"Philosophy
 and Architecture  This section describes some of the core ideas and 
architectural patterns upon which Apache Isis builds. ","description":" This 
section describes some of the core ideas and architectural patterns upon which 
Apache Isis builds. ","id":288377989},"288392697":{"title":"User 
Experience","url":"guides/ugvw/ugvw.html#_user_experience_3","body":"User 
Experience  The copy URL dialog is typically obtained by clicking on the icon.  
Alternatively, alt+] will also open the dialog. It can be closed with either OK 
or the Esc key. ","description":" The copy URL dialog is typically obtained by 
clicking on the icon. ","id":288392697},"291813215":{"title":"Raising events 
programmatically","url":"guides/rgant/rgant.html#_raising_events_programmatically","body":"Raising
 events programmatically  Normally events are only raised for interactions 
through the UI. However,
  events can be raised programmatically either by calling the EventBusService 
API directly, or by emulating the UI by wrapping the target object using the 
WrapperFactory domain service. ","description":" Normally events are only 
raised for interactions through the UI. However, events can be raised 
programmatically either by calling the EventBusService API directly, or by 
emulating the UI by wrapping the target object using the WrapperFactory domain 
service. 
","id":291813215},"292881794":{"title":"FixtureScript","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage_FixtureScript","body":"FixtureScript
  A fixture script is ultimately just a block of code that can be executed, so 
it’s up to you how you implement it to set up the system. However, we 
strongly recommend that you use it to invoke actions on business objects, in 
essence to replay what a real-life user would have done. That way, the fixture 
script will remain valid even if the underlying implementation of the 
 system changes in the future.  For example, here’s a fixture script called 
RecreateSimpleObjects. (This used to be part of the SimpleApp archetype, though 
the archetype now ships with a more sophisticated design, discussed below):  
Because this script has exposed a \"number\" property, it’s possible to set 
this from within the UI. For example:  When this is executed, the framework 
will parse the text and attempt to reflectively set the corresponding 
properties on the fixture result. So, in this case, when the fixture script is 
executed we actually get 6 objects created. ","description":" A fixture script 
is ultimately just a block of code that can be executed, so it’s up to you 
how you implement it to set up the system. However, we strongly recommend that 
you use it to invoke actions on business objects, in essence to replay what a 
real","id":292881794},"293860175":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_10","body":"Usage
  The most common use-case is for bulk ac
 tions that act upon multiple objects in a list. The (same) Scratchpad service 
is injected into each of these objects, and so they can use pass information.  
For example, the Isis addons example todoapp (not ASF) demonstrates how the 
Scratchpad service can be used to calculate the total cost of the selected 
`ToDoItem`s:  A more complex example could use a view model to enable bulk 
updates to a set of objects. The view model’s job is to gather track of the 
items to be updated:  The bulk action in the objects simply adds the selected 
item to the view model:  If using the Wicket viewer, the ToDoItemBulkUpdate 
view model returned from the last action invoked will be displayed. Thereafter 
this view model can be used to perform a bulk update of the \"enlisted\" items. 
","description":" The most common use-case is for bulk actions that act upon 
multiple objects in a list. The (same) Scratchpad service is injected into each 
of these objects, and so they can use pass information. ","id":293
 
860175},"295225295":{"title":"updatingLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatingLifecycleEvent","body":"updatingLifecycleEvent()
  Whenever a (persistent) domain object has been modified and is about to be 
updated to the database, an \"updating\" lifecycle event is fired.  Subscribers 
subscribe through the EventBusService and can use the event to obtain a 
reference to the domain object. The subscriber could then, for example, update 
the object, or it could use it maintain an external datastore. One possible 
application is to maintain a full-text search database using Apache Lucene or 
similar.  By default the event raised is ObjectUpdatingEvent.Default. For 
example:  The purpose of the updatingLifecycleEvent() attribute is to allows a 
custom subclass to be emitted instead. A similar attribute is available for 
other lifecycle events.  For example:  The benefit is that subscribers can be 
more targeted as to the events that they subscribe to. ","descrip
 tion":" Whenever a (persistent) domain object has been modified and is about 
to be updated to the database, an \"updating\" lifecycle event is fired. 
","id":295225295},"295564393":{"title":"FactoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_core-domain-api_FactoryService","body":"FactoryService
  The FactoryService collects together methods for instantiating domain 
objects. ","description":" The FactoryService collects together methods for 
instantiating domain objects. 
","id":295564393},"296009132":{"title":"Underlying 
Technology","url":"pages/powered-by/powered-by.html#_underlying_technology","body":"Underlying
 Technology  With regard to the underlying technology, CQNZ™ is a mobile 
application served by a web application using RESTful web services. The core, 
the CQNZ application server, is built on Apache Isis framework, which is hosted 
on a cloud service provider, configured for high availability, load balancing 
and fail-over with highly elastic scalability, prepared to scale 
 from 1 server to tens, hundreds or even thousands of application servers 
running on Apache Isis. The client is a cross-platform mobile application now 
available on Apple Store and Google Play in the US, Mexico and Europe. 
","description":" With regard to the underlying technology, CQNZ™ is a mobile 
application served by a web application using RESTful web services. The core, 
the CQNZ application server, is built on Apache Isis framework, which is hosted 
on a cloud service provider, configured for high availability, load balancing 
and fail-over 
with","id":296009132},"297314780":{"title":"Bug","url":"release-notes/release-notes.html#_bug_11","body":"Bug
 
","description":"","id":297314780},"298365005":{"title":"Command","url":"guides/rgcms/rgcms.html#_rgcms_schema-cmd","body":"Command
  The command (\"cmd\") schema defines the serialized form of the intention to 
invoke an action or to edit a property. It can be supplemented with optional 
timings capturing the actual invocation of a com
 mand (introduced to support the replication of commands in a master/slave 
arrangement). ","description":" The command (\"cmd\") schema defines the 
serialized form of the intention to invoke an action or to edit a property. It 
can be supplemented with optional timings capturing the actual invocation of a 
command (introduced to support the replication of commands in a master/slave 
arrangement). 
","id":298365005},"299154153":{"title":"Screenshots","url":"guides/ugvw/ugvw.html#_screenshots_5","body":"Screenshots
  The following scre

<TRUNCATED>

Reply via email to