///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

[[tut-services,Services Composites Tutorial]]
= Services Composites Tutorial =

TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
http://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
this tutorial, run it and play with it.


In this other set of tutorials it will be shown how to create and work with Service Composites, which are composites
that extends from the ServiceComposite class. We will refactor one a very simple Library where you can borrow and
return books to take advantage of the various features in Zest™. These refactorings will benefit from automatic Service
activation and Configuration Entities management.

- <<tut-services-step1>>
- <<tut-services-step2>>
- <<tut-services-step3>>

Each tutorial step in this series starts with the result from the previous tutorial, so you can
always look at the next tutorial step for guidance on what to do.

At the bottom of each tutorial step, the is Solutions section, which list the files you should have come to if you
have followed the instructions.

If you want to reproduce what's explained in this tutorial, remember to depend on the Core Runtime artifact that depends
on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:

include::../../../../core/runtime/build/docs/buildinfo/artifact.txt[]

See the <<howto-depend-on-zest>> tutorial for details.

:leveloffset: 3

include::step1.txt[]

:leveloffset: 3

include::step2.txt[]

:leveloffset: 3

include::step3.txt[]

