14#include "arcane/utils/Iostream.h"
15#include "arcane/utils/Collection.h"
16#include "arcane/utils/Enumerator.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/ITraceMng.h"
19#include "arcane/utils/CriticalSection.h"
21#include "arcane/IServiceLoader.h"
22#include "arcane/IServiceMng.h"
23#include "arcane/ISubDomain.h"
24#include "arcane/Service.h"
25#include "arcane/IModuleFactory.h"
26#include "arcane/IModule.h"
28#include "arcane/ServiceInfo.h"
29#include "arcane/IService.h"
53 ~ServiceLoader()
override;
95arcaneCreateServiceLoader()
108 trace->
log() <<
"Loading Application Services";
119 trace->
log() <<
"Loading Session Services";
130 trace->
log() <<
"Loading SubDomain Services";
154 tm->
info() <<
"WARNING: singleton service loading'"
155 << si->
localName() <<
"' which is not specified as singleton.";
162 VersionInfo vi = si->
version();
164 tm->
log() <<
"Loading singleton service " << local_name
165 <<
" (Version " << vi <<
")"
166 <<
" (Type " <<
typeid(instance.
get()).name() <<
")"
167 <<
" N=" << implemented_interfaces.count();
169 tm->
log() <<
" (Interface implemented '" << *sc <<
"'";
187 const bool do_all =
true;
195 if (old_instance.
get()){
196 trace->
warning() <<
"An instance of singleton service; name: '" << name <<
"' already exists."
197 <<
" The second instance will not be created !";
213 auto instance = _createSingletonInstance(service_mng,si,sbi);
242 _createSingletonInstance(service_mng,si,sbib);
263 trace->
info() <<
"Loading module " <<
module->name()
264 << " (Version " << module->versionInfo() << ")"
265 << ((is_autoload) ? " (autoload)" : " ");
EnumeratorT< String > Enumerator
Section critique en multi-thread.
Interface de l'application.
virtual ModuleFactoryInfoCollection moduleFactoryInfos()=0
Liste des informations sur les fabriques des modules.
virtual ServiceFactory2Collection serviceFactories2()=0
Liste des fabriques de service.
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
virtual IServiceMng * serviceMng() const =0
Gestionnaire de services.
Informations sur la fabrique d'un module.
virtual void initializeModuleFactory(ISubDomain *sub_domain)=0
Si la fabrique est un pour un module, l'initialise sur le sous-domaine sub_domain.
virtual Ref< IModule > createModule(ISubDomain *parent, const MeshHandle &mesh_handle)=0
Créé un module.
virtual bool isAutoload() const =0
Indique si le module et doit être chargé automatiquement.
Informations sur la fabrique d'un service.
virtual bool isAutoload() const =0
vrai si le service est un module et doit être chargé automatiquement
virtual bool isSingleton() const =0
vrai si le service est un service singleton (une seule instance)
Interface des informations d'un service ou d'un module.
virtual String localName() const =0
Partie locale du nom du service.
virtual IServiceFactoryInfo * factoryInfo() const =0
Infos sur les fabriques disponibles pour ce service.
virtual VersionInfo version() const =0
Version du service.
virtual Internal::ISingletonServiceFactory * singletonFactory() const =0
Fabrique pour les service singleton (nullptr si non supporté)
virtual StringCollection implementedInterfaces() const =0
Liste des noms des classes implémentées par ce service.
Interface de chargement des services.
Interface du gestionnaire de services.
virtual SingletonServiceInstanceRef singletonServiceReference(const String &name) const =0
virtual ITraceMng * traceMng() const =0
Gestionnaire de trace associé
virtual void addSingletonInstance(SingletonServiceInstanceRef sv)=0
Ajoute une référence au service sv.
Interface d'une session d'exécution d'un cas.
virtual IApplication * application() const =0
Application.
Interface du gestionnaire d'un sous-domaine.
virtual IThreadMng * threadMng()=0
Retourne le gestionnaire de thread.
virtual IApplication * application()=0
Application.
virtual const MeshHandle & defaultMeshHandle()=0
Handle sur le maillage par défaut.
Interface du gestionnaire de traces.
virtual TraceMessage warning()=0
Flot pour un message d'avertissement.
virtual TraceMessage log()=0
Flot pour un message de log.
virtual TraceMessage info()=0
Flot pour un message d'information.
virtual IServiceInfo * serviceInfo() const =0
Retourne le IServiceInfo associé à cette fabrique.
virtual Ref< ISingletonServiceInstance > createSingletonServiceInstance(const ServiceBuildInfoBase &sbi)=0
Créé une instance d'un service singleton.
Référence à une instance.
InstanceType * get() const
Instance associée ou nullptr si aucune.
Informations pour créer un service.
IBase * serviceParent() const
Accès à l'instance parente qui a créée cette instance.
Chargeur des services dans l'architecture.
void loadApplicationServices(IApplication *) override
Charge les services applicatifs disponibles.
void _loadServices(IApplication *application, const ServiceBuildInfoBase &sbib)
Charge les services dans le gestionnaire base.
void loadSubDomainServices(ISubDomain *parent) override
Charge les services de sous-domaine disponibles dans le sous-domaine sd.
void loadSessionServices(ISession *) override
Charge les services de session disponibles.
bool loadSingletonService(ISubDomain *sd, const String &name) override
Charge le service singleton de sous-domaine de nom name.
void initializeModuleFactories(ISubDomain *sd) override
Appel les méthodes d'initialisation des fabriques des modules.
void loadModules(ISubDomain *sd, bool all_modules) override
Charge les modules disponibles.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< String > StringCollection
Collection de chaînes de caractères.
Collection< Internal::IServiceFactory2 * > ServiceFactory2Collection
Collection de fabriques de service.
Ref< ISingletonServiceInstance > SingletonServiceInstanceRef
Référence à l'interface 'ISingletonServiceInstance'.
Collection< IModuleFactoryInfo * > ModuleFactoryInfoCollection
Collection d'informations sur les fabriques de module.