Nearly everything could be considered a service! To get a better idea, let's look into the exo-tomcat/lib folder where you find all deployed Jar files. For example, the services for databases and caching:
Of course, there are many more services, in fact a lot of these Jar files are services. To find out you have to open the Jar file and then look into its /conf or /conf/portal directory. Only if there is a file named configuration.xml, you are sure to have found a service.
Why are there 2 different places to look for the
configuration.xml? Because the /conf directory is
used by the
RootContainer and the
/conf/portal directory is used by the
PortalContainer. Later you will see more details
about these containers.
Interface - Implementation It's important to get the idea that you separate the interface and implementation for a service. That is a good concept to reduce dependencies on specific implementations. This concept is well known for JDBC. If you use standard JDBC (=interface), you can connect any database (=implementation) to your application. In a similar way any service in eXo is defined by a Java interface and may have many different implementations. The service implementation is then injected by a container into the application.
Singleton Each service has to be implemented as a singleton, which means that each service is created only once - in one single instance.
Service = Component You always read about services, and you imagine a service as a large application which does big things, but that's not true, a service can be just a little component that reads or transforms a document, therefore the term component is often used instead of service - so bear in mind: a service and a component can safely be considered to be the same thing.