We’ve prepared a number of screencasts to help you see what Apache Isis has to offer; the following were recorded using Apache Isis v1.12.x.

While these each follow on from each other, you should be able to watch them in any order; the typical duration is 3 minutes. The number of each screencast (eg '001') is a link over to youtube.

Or, if you have a little more time, you can watch the screencasts by playlist. You can either watch ALL of them one after the other, or you can use one of the themed playlists to explore particular aspects of the framework. The table below indicates which screencasts are in which playlist.

There are some screencasts relating to the Apache Isis documentation: using/searching docs, and contributing patches/editing .

Finally, you can also find some screencasts for earlier versions of the framework here.

Playlists

Archetype, IDE, layouts

DB

Dev

000
Searching and using the Apache Isis docs

x

001
Generating an app using the SimpleApp archetype

x

002
Importing the generated app into an IDE

x

x

003
Walking through the main classes that make up the SimpleApp: SimpleObject persistent entity, HomePageViewModel view model and SimpleObjects domain service (repository).

x

004
Using the optional Xxx.layout.xml file to provide layout metadata to dynamically render a domain object using the Bootstrap 3 grid system.

x

Fixture scripts, rules, tests

DB

Dev

005
Using fixture scripts to initialize the database, eg while prototyping and for demos

x

006
Implementing business rulesfor domain object members, using supporting methods ("see it, use it, do it")

x

007
Writing unit tests for a domain object responsibility

x

008
Writing end-to-end integration tests for a domain object responsibility

x

Swagger UI, Maven plugin

DB

Dev

009
Using the Swagger UI to access the REST API automatically exposed for domain services, entities, and/or view models

x

010
Using the Apache Isis maven plugin to validate domain object models during the build process (rather than at runtime).

x

App Manifest

011
How the framework uses the AppManifest is used to bootstrap the application

x

Actions

DB

Dev

012
Implementing business logic using a (no-arg) action, and associating with a property using either the @MemberOrder annotations or using dynamic (XML) layouts.

x

x

013
Invoking (no-arg) action on multiple objects at once (using @Action#invokeOn(), and using the ActionInvocationContext domain service for a smoother end-user experience.

x

x

Titles and icons, UI event subscribers

DB

Dev

014
Using the title(), iconName() and cssClass() so that end-users can distinguish domain objects within the UI.

x

x

x

015
Moving the responsibility to specify the icon for a domain object out and into a subscriber, using the IconUiEvent as per the @DomainObjectLayout#iconUiEvent() annotation

x

Derived collections

016
How to implement a derived collection on a domain object.

x

More on fixture scripts

017
Extending a fixture script to more easily demonstrate new functionality.

x

Page size of collections

018
Using dynamic (XML) layouts to specify the page size for a domain object’s collection.

x

Hints and end-user features

DB

Dev

019
Demonstrates how Apache Isis' Wicket viewer remembers the state of rendered domain objects, and how the end-user of the application can clear these UI hints using the (framework-provided) "clear hints" action.

x

020
Demonstrates how the end-user can copy and share URLs for domain objects - including UI hints - using Apache Isis' Wicket viewer.

x

021
Demonstrates how the end-user can use bookmarks and breadcrumbs within Apache Isis' Wicket viewer, and how the developer can ensure that domain objects and (query-only) actions can be bookmarked.

x

Decoupling (mixins & subscribers)

DB

Dev

022
Shows how to refactor a domain object to move an action implementation out of the domain object itself, and instead implement as a mixin (useful for decoupling).

x

x

023
Shows how to refactor a domain object to move (derived) collections out of the domain object and reimplement as a mixin.

x

024
Using a domain event subscriber to decouple and abstract business rules (validation).

x

025
Using a domain event subscriber to hide functionality, in this case the "clear hints" action automatically provided by the framework.

x

Titles using the @Title annotation

026
Using the @Title annotation (instead of the title() reserved method) to obtain the title of a domain object, so that the end-user can distinguish one object from another.

x

x

Integration testing of mixins

027
How to write an integration test for an mixin.

x

Removing boilerplate

DB

Dev

028
Using Project Lombok to remove boilerplate from your domain objects (getters and setters).

x

029
Using the (non-ASF) Isis addons' paraname8 module to remove boilerplate from your domain object (@ParameterLayout#named() annotation attribute on action parameters).

x

x

Action validation

DB

Dev

030
How to validate action parameters using a supporting validateNXxx() method.

x

x

031
How to validate action parameters using the @Parameter#mustSatisfy() and the Specification interface.

x

Instantiating/Initializing Objects

032
How to instantiate/initialize objects using RepositoryService, ServiceRegistry and/or FactoryService.

x

x

Property and parameter choices

DB

Dev

033
How to provide a set of choices (a drop-down list) when editing a property.

x

x

034
How to provide a set of choices (a drop-down list) when invoking an action.

x

035
How to use the choices supporting methods as a source for default values within a fixture script.

x

x

036
How to use an enum for choices (drop down list) for both a property or an action parameter.

x

Hiding columns

DB

Dev

037
How to hide properties as columns in tables (parented collections or standalone collections), using the dynamic XML layout (equivalent to @PropertyLayout#hidden()).

x

038
How to hide properties as columns in tables, using CSS.

x

Fixture scripts defaults / fake data

DB

Dev

039
Using the FixtureScript defaultParam(…​) method to reflectively default parameters to fixture scripts that have not been set by the caller.

x

040
Using the (non-ASF) Isis addons' fakedata module’s FakeDataService to provide fake (random) names within a fixture script.

x

x

BigDecimals

DB

Dev

041
Using BigDecimal as a property within a domain object, also demonstrating the "summary" view within the Wicket viewer.

x

x

x

042
How to use the @Digits annotation for action parameters of type java.math.BigDecimal.

x

Action parameters

DB

Dev

043
How to use the supporting defaultXxx(…​) supporting method to provide a default argument value for action parameters.

x

x

044
How to use @DomainObject#bounded() so that a drop-down list is automatically provided for any parameters to actions that are for (domain entity) reference types.

x

045
How to use the choicesXxx(…​) supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).

x

046
How to use the autoCompleteXxx(…​) supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).

x

Excel, Calendars, Maps

DB

Dev

047
Configuring an Apache Isis app to allow tables of objects to be downloaded as an Excel spreadsheet, using the (non-ASF) Isis addons' excel wicket extension.

x

048
Configuring an Apache Isis app to allow tables of domain objects with date information to be rendered on a full-page calendar, using the (non-ASF) Isis addons' fullcalendar2 wicket extension.

x

049
Using the @Programmatic annotation to exclude methods from a domain object (eg implementing methods of an interface as defined by the (non-ASF) Isis addons' fullcalendar2 wicket extension) that would otherwise be part of the Apache Isis metamodel (and thus show up in the UI).

x

050
Configuring an Apache Isis app to allow tables of domain objects with location information to be rendered on map, using the (non-ASF) Isis addons' gmap3 wicket extension.

x

051
Using derived properties to persist value types (such as gmap3’s Location value type) as regular primitive datatypes.

x

View Models

DB

Dev

052
How to write a (JAXB) view model, holding references to two domain objects.

x

x

053
Updating the title, icon and layout of a (JAXB) view model.

x

054
How to expose information from underlying domain entities referenced by a (JAXB) view model using derived properties

x

055
Adding an action to a (JAXB) view model, and adjusting the layout using custom CSS.

x

Renaming

DB

Dev

056
The (very simple) steps required to rename a domain entity class.

x

057
How to rename a menu (on the top-level menubar) as rendered in the Wicket viewer.

x

058
How to rename various elements (collections, title) of the home page view model, for an improved initial page.

x

059
How to rename the application name as it appears in the header.

x

060
Updating the logo for the application as it appears in the header.

x

Decoupling

DB

Dev

061
Refactoring a mixin action, teasing out its separate responsibilities in order to decouple the code and uncover new concepts.

x

062
Separating out the responsibilities of the persistent domain entities from those of view models that act upon those domain entities.

x

(Parented) collections

DB

Dev

063
How to implement a bidirectional 1-to-many association between two domain entities.

x

064
How domain entities can be automatically persisted just by being associated with an already persistent entity.

x

065
How bidirectional relationships between domain entities can be automatically maintained.

x

066
How deleting one persistent entity can, if required, automatically delete another associated entity.

x

Metadata fieldset

DB

Dev

067
Improving the layout of domain entities by adding a metadata fieldset.

x

for Contributors and Committers

DB

Dev

068
Contributing to the documentation

x

069
Merging pull requests

x


Copyright © 2010~2017 The Apache Software Foundation, licensed under the Apache License, v2.0.
Apache, the Apache feather logo, Apache Isis, and the Apache Isis project logo are all trademarks of The Apache Software Foundation.