<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (C) 2000 - 2024 Silverpeas

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as
    published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.

    As a special exception to the terms and conditions of version 3.0 of
    the GPL, you may redistribute this Program in connection with Free/Libre
    Open Source Software ("FLOSS") applications as described in Silverpeas's
    FLOSS exception.  You should have received a copy of the text describing
    the FLOSS exception, and it is also available here:
    "https://www.silverpeas.org/legal/floss_exception.html"

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

-->
<document>
  <properties>
    <author>Miguel Moquillon</author>
    <title>Silverpeas Kernel Introduction</title>
  </properties>
  <head>
  </head>
  <body>
    <section name="Silverpeas Kernel">
      <p>
        Silverpeas Kernel is the technical foundation upon which are built all the code of the Silverpeas projects.
        It provides common objects, technical APIs, and wrappers of libraries or frameworks about technical need like,
        for example, logging or IoC/IoD (Inversion of Control/Injection of Dependency).
      </p>
      <p>
        The goal of wrappers is to provide to the Silverpeas projects an API for usual tools and that are agnostic to
        any
        solution providers so that the change of an implementation can easily transparently be done without having to
        modify the code of the Silverpeas projects. Because Silverpeas Kernel must be itself agnostic to any frameworks,
        its code must be built only upon the Java standard library. This is why the implementation of the wrappers are
        loaded by the Java Service Provider Interface (SPI).
      </p>
      <p>
        The more important technical components provided by Silverpeas Kernel are:
      </p>
      <ul>
        <li>An API to access the resources of the Silverpeas projects (l10n bundles, configuration properties, ...)</li>
        <li>A wrapper for logging. By default if no candidate is available by SPI, it is the Java Logging system that is
          used.
        </li>
        <li>A wrapper for IoC/IoD (Inversion of Control/Injection of Dependency). The wrappers is based upon the JSR-330
          and
          as such it expects the implementation to be compliant to this specification.
        </li>
      </ul>
      <p>
        Beside the code, Silverpeas Kernel provides also a library to write unit tests based upon the APIs and the
        wrappers provided by its technical library. For doing, it provides a simple implementation of some of the
        wrappers as
        well as some Junit extensions to ease the access of resources in the tests.
      </p>
    </section>
  </body>
</document>
