///////////////////////////////////////////////////////////////
 * 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://polygene.apache.org/download.html[Polygene™ 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 Polygene™. 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, and Core Bootstrap:

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

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

:leveloffset: 3

include::step1.txt[]

:leveloffset: 3

include::step2.txt[]

:leveloffset: 3

include::step3.txt[]
