Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Session.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Session.cc (C) 2000-2014 */
9/* */
10/* Session. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/ScopedPtr.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/ApplicationInfo.h"
19#include "arcane/utils/String.h"
20#include "arcane/utils/Array.h"
21#include "arcane/utils/ITraceMng.h"
22#include "arcane/utils/ArcanePrecomp.h"
23#include "arcane/utils/CriticalSection.h"
24
25#include "arcane/core/IApplication.h"
26#include "arcane/core/IIOMng.h"
27#include "arcane/core/IParallelMng.h"
28#include "arcane/core/ICaseDocument.h"
29#include "arcane/core/XmlNode.h"
30#include "arcane/core/CaseNodeNames.h"
31#include "arcane/core/ISubDomain.h"
32#include "arcane/core/IMainFactory.h"
33#include "arcane/core/IParallelSuperMng.h"
34#include "arcane/core/IServiceMng.h"
35#include "arcane/core/SubDomainBuildInfo.h"
36
37#include "arcane/impl/Session.h"
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
42namespace Arcane
43{
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48extern "C++" ISubDomain*
49arcaneCreateSubDomain(ISession* session, const SubDomainBuildInfo& sdbi);
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53
54extern "C++" ISession*
55arcaneCreateSession(IApplication* sm)
56{
57 Session* s = new Session(sm);
58 s->build();
59 return s;
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
68{
69 public:
70
71 Impl(IApplication* app)
72 : m_application(app)
73 , m_namespace_uri(arcaneNamespaceURI())
74 {}
75 ~Impl() {}
76
77 public:
78
81 SubDomainList m_sub_domains;
83 String m_namespace_uri;
84 String m_local_name;
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90Session::
91Session(IApplication* app)
92: TraceAccessor(app->traceMng())
93, m_p(0)
94{
95 m_p = new Impl(app);
96 m_p->m_local_name = "Session";
97}
98
99/*---------------------------------------------------------------------------*/
100/*---------------------------------------------------------------------------*/
101
102Session::
103~Session()
104{
105 for (SubDomainList::Enumerator i(m_p->m_sub_domains); ++i;) {
106 (*i)->destroy();
107 }
108 delete m_p;
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
115build()
116{
117 IMainFactory* mf = m_p->m_application->mainFactory();
118 m_p->m_service_mng = mf->createServiceMng(this);
119}
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
132checkIsValidCaseVersion(const String& version)
133{
134 ARCANE_UNUSED(version);
135 return false;
136}
137
138/*---------------------------------------------------------------------------*/
139/*---------------------------------------------------------------------------*/
140
143{
145 ISubDomain* s = 0;
146 {
147 CriticalSection cs(sm->threadMng());
148 s = arcaneCreateSubDomain(this, sdbi);
149 //TODO: Use the local rank to sort in order
150 m_p->m_sub_domains.add(s);
151 }
152 s->initialize();
153 // Specific initialization for the derived class if needed
154 _initSubDomain(s);
155 return s;
156}
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
162doAbort()
163{
164 IParallelSuperMng* psm = m_p->m_application->parallelSuperMng();
165 if (psm)
166 psm->tryAbort();
167}
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
173objectParent() const
174{
175 return m_p->m_application;
176}
177
179{
180 return m_p->m_namespace_uri;
181}
183{
184 return m_p->m_local_name;
185}
187{
188 return VersionInfo(1, 0, 0);
189}
191{
192 return m_p->m_service_mng.get();
193}
195{
196 return 0;
197}
199{
200 return m_p->m_application;
201}
203{
205}
206const String& Session::fileName() const
207{
208 return m_p->m_filename;
209}
211{
212 return m_p->m_sub_domains;
213}
214IApplication* Session::_application() const
215{
216 return m_p->m_application;
217}
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
222} // namespace Arcane
223
224/*---------------------------------------------------------------------------*/
225/*---------------------------------------------------------------------------*/
Critical section in multi-thread.
Application interface.
virtual IParallelSuperMng * parallelSuperMng()=0
Supervisory parallelism manager.
Interface of the base class for main arcane objects.
Definition IBase.h:32
virtual void initialize()=0
Initializes the instance. The instance is not usable until this method has been called.
Factory for Arcane classes.
virtual IServiceMng * createServiceMng(IBase *)=0
Creates an instance of the service manager.
Abstract class of the parallelism supervisor.
virtual void tryAbort()=0
Attempts to abort.
virtual IThreadMng * threadMng() const =0
Thread manager.
Interface of a resource manager.
Service manager interface.
Definition IServiceMng.h:32
Interface for a case execution session.
Definition ISession.h:38
Interface of the subdomain manager.
Definition ISubDomain.h:75
Encapsulation of an automatically destructing pointer.
Definition ScopedPtr.h:44
IApplication * m_application
Supervisor.
Definition Session.cc:79
String m_filename
Configuration file.
Definition Session.cc:80
ScopedPtrT< IServiceMng > m_service_mng
Service manager.
Definition Session.cc:82
Session.
Definition Session.h:40
virtual VersionInfo objectVersion() const
Service version number.
Definition Session.cc:186
virtual String objectLocalName() const
Local name of the object.
Definition Session.cc:182
virtual void build()
Constructs the instance members. The instance is not usable until this method has been called....
Definition Session.cc:115
virtual SubDomainCollection subDomains()
List of sub-domains of the session.
Definition Session.cc:210
virtual IApplication * application() const
Application.
Definition Session.cc:198
virtual ISubDomain * createSubDomain(const SubDomainBuildInfo &sdbi)
Creates a sub-domain with the parameters contained in sdbi.
Definition Session.cc:142
virtual IRessourceMng * ressourceMng() const
Resource manager.
Definition Session.cc:194
Impl * m_p
Implementation.
Definition Session.h:89
virtual IServiceMng * serviceMng() const
Service manager.
Definition Session.cc:190
virtual String objectNamespaceURI() const
Namespace of the object.
Definition Session.cc:178
virtual ITraceMng * traceMng() const
Trace manager.
Definition Session.cc:202
virtual void doAbort()
Performs an abort.
Definition Session.cc:162
virtual bool checkIsValidCaseVersion(const String &version)
Definition Session.cc:132
virtual IBase * objectParent() const
Parent of this object.
Definition Session.cc:173
Parameters necessary for building a subdomain.
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
ITraceMng * traceMng() const
Trace manager.
Information about a version.
Definition VersionInfo.h:47
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
List< ISubDomain * > SubDomainList
Array of subdomains.
Collection< ISubDomain * > SubDomainCollection
Collection of subdomains.