///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[two-hours-intro,Zest™ in 2 hours]]
= Zest™ in 2 hours =

NOTE: This tutorial is not written yet. Learn how to contribute in <<community-docs>>.

This introduction assumes that the "Zest™ in 10 minutes" and "Zest™ in 30 minutes" introductions has been read and
understood.

In this introduction we will touch on the core concepts of UnitOfWork, Application structure and Bootstrap API.

- Persistence and UnitOfWork -

We have previously seen that it is easy to declare that a Composite should be persisted, but not touched on how to
interact with the underlying persistence system. This is done via EntitySessions.

- Application Structure -

    * There are one Application per Zest™ instance.

    * An Application consists of one or more Layers.

    * Each Layer consist of one or more Modules.

    * Layers are organized in a top-down manner, lower Layers on top of higher Layers.

    * One must declare which Composites that each Module is responsible for.

    * A Composite can either be private or public in the Module.

    * A private Composite can only be reached from within the same Module.

    * A public Composite can be reached from other Modules in the same Layer.

    * A public Composite can be declared to be public in the Layer.

    * A Composite that is declared public in the Layer can be reached from the Layers directly on top (not transitive
      to Layers higher up).

    * The Application can also declare public Composites (later for SCA).

For simpler Applications it is possible (quite easily) to create a single Layer with a single Module, but for more
complex Applications we strongly recommend the partitioned approach.

Bootstrap API

-- to be continued
