blob: a91eca87e05c370c4607b2597bf437274acd6bf2 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Common Use Cases :: Apache Isis</title>
<link rel="canonical" href="https://isis.apache.org/docs/2.0.0-M5/what-is-apache-isis/common-use-cases.html">
<meta name="generator" content="Antora 2.3.4">
<link rel="stylesheet" href="../../../_/css/site.css">
<link rel="stylesheet" href="../../../_/css/site-custom.css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i|Raleway:300,400,500,700,800|Montserrat:300,400,700" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"/>
<link rel="home" href="https://isis.apache.org" title="Apache Isis">
<link rel="next" href="screencasts.html" title="Screencasts">
<link rel="prev" href="isis-in-pictures.html" title="Apache Isis in pictures">
</head>
<body class="article">
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="https://isis.apache.org">
<span class="icon">
<img src="../../../_/img/isis-logo-48x48.png"></img>
</span>
<span>Apache Isis</span>
</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<a class="navbar-end">
<div class="navbar-item hide-for-print">
<span>
<input id="algolia-search-input" placeholder="Search"></span>
</span>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Quick Start</a>
<div class="navbar-dropdown">
<span class="navbar-item navbar-heading">Starter Apps</span>
<a class="navbar-item" href="../../../docs/2.0.0-M5/starters/helloworld.html">Hello World</a>
<a class="navbar-item" href="../../../docs/2.0.0-M5/starters/simpleapp.html">Simple App</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Demos &amp; Tutorials</span>
<a class="navbar-item" href="../../../docs/2.0.0-M5/demo/about.html">Demo App</a>
<a class="navbar-item" href="https://danhaywood.gitlab.io/isis-petclinic-tutorial-docs/petclinic/1.16.2/intro.html">Petclinic (tutorial)</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Resources</span>
<a class="navbar-item" href="../../../docs/2.0.0-M5/resources/cheatsheet.html">Cheatsheet</a>
<a class="navbar-item" href="../../../docs/2.0.0-M5/resources/icons.html">Icons</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Guides</a>
<div class="navbar-dropdown">
<span class="navbar-item navbar-heading">Development</span>
<a class="navbar-item" href="../../../setupguide/2.0.0-M5/about.html">Setup Guide</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Core</span>
<a class="navbar-item" href="../../../userguide/2.0.0-M5/about.html">User Guide</a>
<a class="navbar-item" href="../../../refguide/2.0.0-M5/about.html">Reference Guide</a>
<a class="navbar-item" href="../../../testing/2.0.0-M5/about.html">Testing Guide</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Libraries</a>
<div class="navbar-dropdown">
<span class="navbar-item navbar-heading">For Use in Apps</span>
<a class="navbar-item" href="../../../subdomains/2.0.0-M5/about.html">Subdomain Libraries</a>
<a class="navbar-item" href="../../../valuetypes/2.0.0-M5/about.html">Value Types</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Integrate between Apps</span>
<a class="navbar-item" href="../../../mappings/2.0.0-M5/about.html">Bounded Context Mapping Libraries</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Other</span>
<a class="navbar-item" href="../../../incubator/2.0.0-M5/about.html">Incubator</a>
<a class="navbar-item" href="../../../legacy/2.0.0-M5/about.html">Legacy</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Components</a>
<div class="navbar-dropdown">
<span class="navbar-item navbar-heading">Viewers</span>
<a class="navbar-item" href="../../../vw/2.0.0-M5/about.html">Web UI (Wicket)</a>
<a class="navbar-item" href="../../../vro/2.0.0-M5/about.html">REST API (Restful Objects)</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Security</span>
<a class="navbar-item" href="../../../security/2.0.0-M5/about.html">Security Guide</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Persistence</span>
<a class="navbar-item" href="../../../pjpa/2.0.0-M5/about.html">JPA (EclipseLink)</a>
<a class="navbar-item" href="../../../pjdo/2.0.0-M5/about.html">JDO (DataNucleus)</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Extensions</span>
<a class="navbar-item" href="../../../extensions/2.0.0-M5/about.html">Extensions Catalog</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Support</a>
<div class="navbar-dropdown">
<span class="navbar-item navbar-heading">Contact</span>
<a class="navbar-item" href="../../../docs/2.0.0-M5/support/slack-channel.html">Slack</a>
<a class="navbar-item" href="../../../docs/2.0.0-M5/support/mailing-list.html">Mailing Lists</a>
<a class="navbar-item" href="https://issues.apache.org/jira/browse/ISIS">JIRA</a>
<a class="navbar-item" href="https://stackoverflow.com/questions/tagged/isis">Stack Overflow</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Releases</span>
<a class="navbar-item" href="../../../docs/2.0.0-M5/downloads/how-to.html">Downloads</a>
<a class="navbar-item" href="../../../relnotes/2.0.0-M5/about.html">Release Notes</a>
<a class="navbar-item" href="../../../docs/2.0.0-M5/archive/1-x.html">Archive (1.x)</a>
<hr class="navbar-divider"/>
<span class="navbar-item navbar-heading">Framework</span>
<a class="navbar-item" href="../../../conguide/2.0.0-M5/about.html">Contributors' Guide</a>
<a class="navbar-item" href="../../../comguide/2.0.0-M5/about.html">Committers' Guide</a>
<a class="navbar-item" href="../../../core/2.0.0-M5/about.html">Core Design</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">ASF</a>
<div class="navbar-dropdown">
<a class="navbar-item" href="http://www.apache.org/">Apache Homepage</a>
<a class="navbar-item" href="https://www.apache.org/events/current-event">Events</a>
<a class="navbar-item" href="https://www.apache.org/licenses/">Licenses</a>
<a class="navbar-item" href="https://www.apache.org/security/">Security</a>
<a class="navbar-item" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
<a class="navbar-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
<hr class="navbar-divider"/>
<a class="navbar-item" href="https://whimsy.apache.org/board/minutes/Isis.html">PMC board minutes</a>
</div>
</div>
<a class="navbar-item" href="../../../docs/2.0.0-M5/about.html">
<span class="icon">
<img src="../../../_/img/home.png"></img>
</span>
</a>
</div>
</div>
</nav>
</header>
<div class="body ">
<div class="nav-container" data-component="docs" data-version="2.0.0-M5">
<aside class="nav">
<div class="panels">
<div class="nav-panel-pagination">
<a class="page-previous" rel="prev" href="isis-in-pictures.html" title="Apache Isis in pictures"><span></span></a>
<a class="page-next" rel="next"
href="screencasts.html" title="Screencasts"><span></span></a>
<!--
page.parent doesn't seem to be set...
<a class="page-parent disabled" rel="prev" href="" title="Apache Isis in pictures"><span></span></a>
-->
</div>
<div class="nav-panel-menu is-active" data-panel="menu">
<nav class="nav-menu">
<h3 class="title"><a href="../about.html"> </a></h3>
<ul class="nav-list">
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">What is Apache Isis?</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="isis-in-pictures.html">Apache Isis in pictures</a>
</li>
<li class="nav-item is-current-page" data-depth="2">
<a class="nav-link" href="common-use-cases.html">Common Use Cases</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="screencasts.html">Screencasts</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Quick Start</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../starters/helloworld.html">HelloWorld</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../starters/simpleapp.html">SimpleApp</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../parent-pom/about.html">Parent POM</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../mavendeps/about.html">Aggregator POMs</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Demos &amp; Tutorials</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../demo/about.html">Demo App</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="https://danhaywood.gitlab.io/isis-petclinic-tutorial-docs/petclinic/1.16.2/intro.html">Petclinic (tutorial)</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Resources</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../resources/cheatsheet.html">Cheat Sheet</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../resources/icons.html">Icons</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Guides</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Development</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../setupguide/2.0.0-M5/about.html">Setup Guide</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Core</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../userguide/2.0.0-M5/about.html">User Guide</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../refguide/2.0.0-M5/about.html">Reference Guide</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../testing/2.0.0-M5/about.html">Testing Guide</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Libraries</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">For Use in Apps</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../subdomains/2.0.0-M5/about.html">Subdomain Libraries</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../valuetypes/2.0.0-M5/about.html">Value Type Catalog</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Integrate between Apps</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../mappings/2.0.0-M5/about.html">Bounded Context Mapping Libraries</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Other</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../incubator/2.0.0-M5/about.html">Incubator</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../legacy/2.0.0-M5/about.html">Legacy</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Components</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Overview</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../core/2.0.0-M5/_overview/about.html">System Overview</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Viewers</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../vw/2.0.0-M5/about.html">Web UI (Wicket)</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../vro/2.0.0-M5/about.html">REST API (Restful Objects)</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Security</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../security/2.0.0-M5/about.html">Security Guide</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Persistence</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../pjpa/2.0.0-M5/about.html">JPA (EclipseLink)</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../pjdo/2.0.0-M5/about.html">JDO (DataNucleus)</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Extensions</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../../extensions/2.0.0-M5/about.html">Extensions Catalog</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Support</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../support/slack-channel.html">Slack</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../support/mailing-list.html">Mailing Lists</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87">ASF JIRA</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="http://stackoverflow.com/questions/tagged/isis">Stack Overflow</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Releases</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../downloads/how-to.html">Downloads</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../../relnotes/2.0.0-M5/about.html">Release Notes</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Nightly Builds (not ASF)</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://github.com/apache-isis-committers/isis-nightly">CI</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://repo.incode.cloud/">Maven Repo</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://apache-isis-committers.github.io/isis-nightly">Website preview</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<span class="nav-text">Framework</span>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../../conguide/2.0.0-M5/about.html">Contributors' Guide</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../../comguide/2.0.0-M5/about.html">Committers' Guide</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../../core/2.0.0-M5/about.html">Design Docs</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../more-thanks/more-thanks.html">Acknowledgements</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title"> </span>
<span class="version">2.0.0-M5</span>
</div>
<ul class="components">
<li class="component is-current">
<span class="title"> </span>
<ul class="versions">
<li class="version is-current is-latest">
<a href="../about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">BC Mappings Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../mappings/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Committers' Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../comguide/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Contributors' Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../conguide/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Design Docs</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../core/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Extensions Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../extensions/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Incubator Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../incubator/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">JDO/DataNucleus</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../pjdo/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">JPA</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../pjpa/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Legacy Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../legacy/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Reference Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../refguide/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Release Notes</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../relnotes/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Restful Objects Viewer</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../vro/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Security Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../security/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Setup Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../setupguide/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Subdomains Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../subdomains/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Testing Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../testing/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Tooling</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../tooling/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">User Guide</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../userguide/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Value Types Catalog</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../valuetypes/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
<li class="component">
<span class="title">Wicket Viewer</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../vw/2.0.0-M5/about.html">2.0.0-M5</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</div>
<main role="main">
<div class="toolbar" role="navigation">
<button class="nav-toggle"></button>
<a href="../about.html" class="home-link"></a>
<nav class="breadcrumbs" aria-label="breadcrumbs">
<ul>
<li><a href="../about.html"> </a></li>
<li>What is Apache Isis?</li>
<li><a href="common-use-cases.html">Common Use Cases</a></li>
</ul>
</nav>
<div class="edit-this-page"><a href="https://github.com/apache/isis/edit/2.0.0-M5/antora/components/docs/modules/ROOT/pages/what-is-apache-isis/common-use-cases.adoc">Edit</a></div>
</div>
<article class="doc">
<a name="section-top"></a>
<h1 class="page">Common Use Cases</h1>
<div class="sect1">
<h2 id="prototyping"><a class="anchor" href="#prototyping"></a>Prototyping</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Apache Isis is great for rapid prototyping, because all you need to write in order to get an application up-and-running is the domain model objects.</p>
</div>
<div class="paragraph">
<p>By focusing just on the domain, you&#8217;ll also find that you start to develop a ubiquitous language - a set of terms and concepts that the entire team (business and technologists alike) have a shared understanding.</p>
</div>
<div class="paragraph">
<p>If you wish, you could combine this with BDD - the framework integrates with <a href="../../../testing/2.0.0-M5/specsupport/about.html" class="page">Cucumber</a>.</p>
</div>
<div class="paragraph">
<p>Once you&#8217;ve sketched out your domain model, you can then either start-over and deploy with one of the deployment options listed below.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploy-with-a-generic-ui"><a class="anchor" href="#deploy-with-a-generic-ui"></a>Deploy with a generic UI</h2>
<div class="sectionbody">
<div class="paragraph">
<p>One of the original motivations for Apache Isis was to be able automatically generate a user interface for a domain object model.
The framework&#8217;s architecture allows for different user interface technologies.
The principal implementation is the <a href="../../../vw/2.0.0-M5/about.html" class="page">Wicket viewer</a>, which as well as providing an appealing default user interface also has the ability to be customized the user interface by writing new <a href="http://wicket.apache.org">Apache Wicket</a> components.
The framework provides a <a href="../../../extensions/2.0.0-M5/about.html" class="page">number of these</a>.</p>
</div>
<div class="paragraph">
<p>Deploying on Apache Isis means that the framework also manages object persistence.
Again this is pluggable.
There are two implementations, either <a href="../../../pjdo/2.0.0-M5/about.html" class="page">JDO (DataNucleus)</a> or <a href="../../../pjpa/2.0.0-M5/about.html" class="page">JPA (EclipseLink)</a>.
These are normally used with an RDBMS, though in principle could be used with NoSQL databases.
JDO/DataNucleus historically has <a href="https://www.datanucleus.org/products/accessplatform/datastores/datastores.html">extensive support</a> for NoSQL, though JPA/EclipseLink also has <a href="https://wiki.eclipse.org/EclipseLink/FAQ/NoSQL">some support</a> also.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploy-with-custom-controllers"><a class="anchor" href="#deploy-with-custom-controllers"></a>Deploy with custom controllers</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If the <a href="../../../vw/2.0.0-M5/about.html" class="page">Wicket viewer</a>'s extensions are too restrictive, another option is to deploy custom controllers/views for specific use cases <em>alongside</em> the generic viewer.
This way you can use the generic viewer to deliver the majority of the app&#8217;s functionality, but you can justify the additional effort of writing a custom controller for those specialised/high volume use cases where a different flow is needed.</p>
</div>
<div class="paragraph">
<p>Because Apache Isis runs on top of <a href="https://spring.io/projects/spring-boot">Spring Boot</a>, you can easily integrate any of the UI technologies supported by Spring, or of course use Apache Wicket for a similar look-n-feel.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploy-as-a-rest-api"><a class="anchor" href="#deploy-as-a-rest-api"></a>Deploy as a REST API</h2>
<div class="sectionbody">
<div class="paragraph">
<p>REST (Representation State Transfer) is an architectural style for building highly scalable distributed systems, using the same principles as the World Wide Web.
Many commercial web APIs (twitter, facebook, Amazon) are implemented as either pure REST APIs or some approximation therein.</p>
</div>
<div class="paragraph">
<p>The <a href="http://restfulobjects.org">Restful Objects specification</a> defines a means by which a domain object model can be exposed as RESTful resources using JSON representations over HTTP.</p>
</div>
<div class="paragraph">
<p>Apache Isis' <a href="../../../vro/2.0.0-M5/about.html" class="page">RestfulObjects viewer</a> is an implementation of that spec, making any Apache Isis domain object automatically available via REST.
The set of domain objects can also be optionally restricted to exclude domain entities (thereby avoiding leaking implementation details).</p>
</div>
<div class="paragraph">
<p>There are three main use cases for deploying Apache Isis as a RESTful web service are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>to allow a custom UI to be built against the RESTful API</p>
<div class="paragraph">
<p>For example, using a JavaScript framework such as Angular/Ionic/ReactJs/Vue etc, or JavaFX</p>
</div>
</li>
<li>
<p>to enable integration between systems</p>
<div class="paragraph">
<p>REST is designed to be machine-readable, and so is an excellent choice for synchronous data interchange scenarios.</p>
</div>
<div class="paragraph">
<p>The framework provides <a href="../../../refguide/2.0.0-M5/applib/index/services/conmap/ContentMappingService.html" class="page">SPI</a>s to allow custom repreentations to be returned as required.</p>
</div>
</li>
<li>
<p>as the basis for a generic UI.</p>
<div class="paragraph">
<p>At the time of writing there are a couple being developed, <a href="https://github.com/joerg-rade/kroviz">Kroviz</a> (using Kotlin/JS), and <a href="https://github.com/sebastianslutzky/rob">Rob</a> (using <a href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor">Microsoft&#8217;s Blazor</a>).</p>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Another framework that implements the RO spec is the <a href="https://github.com/NakedObjectsGroup/NakedObjectsFramework">Naked Objects Framework</a> (on .NET).
It provides a complete generic UI tested against its own RO implementation.</p>
</div>
<div class="paragraph">
<p>As for the human-usable generic UI discussed <a href="#deploy-with-a-generic-ui">above</a>, the framework manages object persistence, for example using the JDO/DataNucleus objectstore.
It is perfectly possible to deploy the RESTful API alongside an auto-generated webapp; both work from the same domain object model.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploy-on-your-own-platform"><a class="anchor" href="#deploy-on-your-own-platform"></a>Deploy on your own platform</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You may be happy to use Apache Isis for prototyping, but have your own proprietary application framework to actually build production apps.</p>
</div>
<div class="paragraph">
<p>Apache Isis supports this, because the programming model defined by Apache Isis deliberately minimizes the dependencies on the rest of the framework.
In fact, the only hard dependency that the domain model classes have on Apache Isis is through the <code>org.apache.isis.applib</code> classes, mostly to pick up annotations such as <a href="../../../refguide/2.0.0-M5/applib/index/annotation/Action.html" class="page">@Action</a> and <a href="../../../refguide/2.0.0-M5/applib/index/annotation/Property.html" class="page">@Property</a>.
It&#8217;s therefore relatively easy to take a domain object prototyped and/or tested using Apache Isis, but to deploy on some other framework&#8217;s runtime.</p>
</div>
<div class="paragraph">
<p>If you are interested in taking this approach, then you will need to provide your own implementations of any framework-provided services used by your code.</p>
</div>
<div class="paragraph">
<p>If your own application framework is based on <a href="https://spring.io/projects/spring-boot">Spring Boot</a> and with JPA or JDO, then there is another option.
As noted above, Apache Isis itself runs on top of Spring Boot.
You could therefore develop a complete custom UI using one of the regular Spring technologies and run that alongside Apache Isis - in effect the option described <a href="#deploy-with-custom-controllers">earlier</a> but for every use case, not just selected ones.
Apache Isis continues to manage the object lifecycle and persistence as a thin layer on top of Spring, but your custom UI renders the domain objects exactly as you require.</p>
</div>
</div>
</div>
</article>
<aside class="article-aside toc hide-for-print" role="navigation">
<p class="toc-title">On this page</p>
<div id="article-toc"></div>
</aside>
</main>
</div>
<footer class="footer">
<div class="content">
<div class="copyright">
<p>
Copyright © 2010~2021 The Apache Software Foundation, licensed under the Apache License, v2.0.
<br/>
Apache, the Apache feather logo, Apache Isis, and the Apache Isis project logo are all trademarks of The Apache Software Foundation.
</p>
</div>
<div class="revision">
<p>Revision: SNAPSHOT</p>
</div>
</div>
</footer>
<script src="../../../_/js/site.js"></script>
<script async src="../../../_/js/vendor/highlight.js"></script>
<script src="../../../_/js/vendor/jquery-3.4.1.min.js"></script>
<script src="../../../_/js/vendor/jquery-ui-1.12.1.custom.widget-only.min.js"></script>
<script src="../../../_/js/vendor/jquery.tocify.min.js"></script>
<script>
$(function() {
$("#article-toc").tocify( {
showEffect: "slideDown",
hashGenerator: "pretty",
hideEffect: "slideUp",
selectors: "h2, h3",
scrollTo: 120,
smoothScroll: true,
theme: "jqueryui",
highlightOnScroll: true
} );
});
</script>
<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script>
function focusSearchInput () { document.querySelector('#algolia-search-input').focus() }
var search = docsearch({
appId: '5ISP5TFAEN',
apiKey: '0fc51c28b4ad46e7318e96d4e97fab7c',
indexName: 'isis-apache-org',
inputSelector: '#algolia-search-input',
autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
debug: false,
}).autocomplete
search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
focusSearchInput()
window.addEventListener('load', focusSearchInput);
</script>
<!--
docsearch options:
https://docsearch.algolia.com/docs/behavior/
-->
<!--
https://www.algolia.com/doc/api-reference/api-parameters/
algoliaOptions: { hitsPerPage: 6 },
-->
</body>
</html>