Salome HOME
Use a CORBA single thread model for study to avoid problems on concurrent access...
authorPaul RASCLE <paul.rascle@edf.fr>
Mon, 5 Feb 2018 15:45:22 +0000 (16:45 +0100)
committerPaul RASCLE <paul.rascle@edf.fr>
Fri, 16 Feb 2018 14:13:24 +0000 (15:13 +0100)
Problems detected on geometry and mesh scripts executed in YACS foreach loop with multiple branches.

21 files changed:
src/GenericObj/SALOME_GenericObj_i.cc
src/SALOMEDS/SALOMEDS.cxx
src/SALOMEDS/SALOMEDS_ChildIterator_i.cxx
src/SALOMEDS/SALOMEDS_ChildIterator_i.hxx
src/SALOMEDS/SALOMEDS_GenericAttribute_i.cxx
src/SALOMEDS/SALOMEDS_GenericAttribute_i.hxx
src/SALOMEDS/SALOMEDS_SComponentIterator_i.cxx
src/SALOMEDS/SALOMEDS_SComponentIterator_i.hxx
src/SALOMEDS/SALOMEDS_SObject_i.cxx
src/SALOMEDS/SALOMEDS_SObject_i.hxx
src/SALOMEDS/SALOMEDS_Server.cxx
src/SALOMEDS/SALOMEDS_StudyBuilder_i.cxx
src/SALOMEDS/SALOMEDS_StudyBuilder_i.hxx
src/SALOMEDS/SALOMEDS_StudyManager_i.cxx
src/SALOMEDS/SALOMEDS_StudyManager_i.hxx
src/SALOMEDS/SALOMEDS_Study_i.cxx
src/SALOMEDS/SALOMEDS_Study_i.hxx
src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.cxx
src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.hxx
src/SALOMEDS/SALOMEDS_UseCaseIterator_i.cxx
src/SALOMEDS/SALOMEDS_UseCaseIterator_i.hxx

index 80966ca6ec370dfa9fde728ca56364fa774f46f9..1d756a1ce095fcf567b18aec0a8bf71c1db28de5 100644 (file)
@@ -31,7 +31,7 @@
 
 // note: in KERNEL _DEBUG_ is not defined by default
 #ifdef _DEBUG_
-static int MYDEBUG = 0;
+static int MYDEBUG = 1;
 #else
 static int MYDEBUG = 0;
 #endif
@@ -92,6 +92,7 @@ namespace SALOME
     else {
       myPOA = PortableServer::POA::_duplicate(thePOA);
     }
+    MESSAGE("GenericObj_i::GenericObj_i thePOA: " << thePOA << " myPOA: " << myPOA);
   }
 
   /*!
@@ -104,6 +105,7 @@ namespace SALOME
   */
   PortableServer::POA_ptr GenericObj_i::_default_POA()
   {
+    MESSAGE("GenericObj_i::_default_POA: " << myPOA);
     return PortableServer::POA::_duplicate(myPOA);
   }
 
index 81a3ce56edc581a518e41ffcb1a24c7d3b9744e4..06dda32112b30631bba12f0a9dd90d0f88b7056c 100644 (file)
@@ -36,6 +36,7 @@
 #include "SALOMEDSClient_IParameters.hxx"
 #include "SALOMEDS_IParameters.hxx"
 #include "SALOMEDS_StudyManager_i.hxx"
+#include "utilities.h"
 
 #include "SALOMEDS_Defines.hxx"
 
@@ -117,10 +118,22 @@ SALOMEDS_EXPORT
   SALOME_NamingService namingService(orb);
   CORBA::Object_var obj = namingService.Resolve( "/myStudyManager" );
   SALOMEDS::StudyManager_var theManager = SALOMEDS::StudyManager::_narrow( obj );
-  if( CORBA::is_nil(theManager) ) {
-    SALOMEDS_StudyManager_i * aStudyManager_i = new  SALOMEDS_StudyManager_i(orb, root_poa);
+  if( CORBA::is_nil(theManager) )
+  {
+    PortableServer::POAManager_var pman = root_poa->the_POAManager();
+    CORBA::PolicyList policies;
+    policies.length(2);
+    PortableServer::ThreadPolicy_var threadPol(root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL));
+    PortableServer::ImplicitActivationPolicy_var implicitPol(root_poa->create_implicit_activation_policy(PortableServer::IMPLICIT_ACTIVATION));
+    policies[0] = PortableServer::ThreadPolicy::_duplicate(threadPol);
+    policies[1] = PortableServer::ImplicitActivationPolicy::_duplicate(implicitPol);
+    PortableServer::POA_var poa = root_poa->create_POA("KERNELStudySingleThreadPOA",pman,policies);
+    MESSAGE("CreateStudyManager: KERNELStudySingleThreadPOA: "<< poa);
+    threadPol->destroy();
+
+    SALOMEDS_StudyManager_i * aStudyManager_i = new  SALOMEDS_StudyManager_i(orb, poa);
     // Activate the objects.  This tells the POA that the objects are ready to accept requests.
-    PortableServer::ObjectId_var aStudyManager_iid =  root_poa->activate_object(aStudyManager_i);
+    PortableServer::ObjectId_var aStudyManager_iid =  poa->activate_object(aStudyManager_i);
     //give ownership to the poa : the object will be deleted by the poa
     aStudyManager_i->_remove_ref();
     aStudyManager_i->register_name((char*)"/myStudyManager");
index e5c3ad9e1cfd6a876d7e323d9ae777ee50eb3d78..31476bf5b7377dba0a96116fd39c9b9bf0c7a9a6 100644 (file)
@@ -25,6 +25,7 @@
 //  Module : SALOME
 //
 #include "SALOMEDS_ChildIterator_i.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"
 #include "SALOMEDS.hxx"
 #include "SALOMEDSImpl_SObject.hxx"
@@ -37,8 +38,9 @@
  */
 //============================================================================
 SALOMEDS_ChildIterator_i::SALOMEDS_ChildIterator_i(const SALOMEDSImpl_ChildIterator& theImpl,
-                                                   CORBA::ORB_ptr orb) 
-  : _it(theImpl.GetPersistentCopy())
+                                                   CORBA::ORB_ptr orb)  :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA()),
+  _it(theImpl.GetPersistentCopy())
 {
   SALOMEDS::Locker lock;
   _orb = CORBA::ORB::_duplicate(orb);
@@ -54,6 +56,23 @@ SALOMEDS_ChildIterator_i::~SALOMEDS_ChildIterator_i()
     if(_it) delete _it;
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_ChildIterator_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_ChildIterator_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 //============================================================================
 /*! Function :Init
  * 
index 4b68eaf353a6f6cf4a5e5db8fce515c085da87c0..779731f78781f88737ef142d0fe3c19c6efec1ad 100644 (file)
@@ -53,6 +53,8 @@ public:
   
   //! standard destructor
   ~SALOMEDS_ChildIterator_i();
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   virtual void Init();
   virtual void InitEx(CORBA::Boolean);
index 5b98df2db2e2ccf0f12c8a3a95db8ca5577eb3c6..fc3f26323a241cc4c342e610ca364b59d7a98bc3 100644 (file)
@@ -26,6 +26,7 @@
 //
 #include "utilities.h"
 #include "SALOMEDS_GenericAttribute_i.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_Attributes.hxx"
 #include "SALOMEDS.hxx"
 #include "SALOMEDSImpl_SObject.hxx"
@@ -43,7 +44,8 @@
 
 UNEXPECT_CATCH(GALockProtection, SALOMEDS::GenericAttribute::LockProtection);
 
-SALOMEDS_GenericAttribute_i::SALOMEDS_GenericAttribute_i(DF_Attribute* theImpl, CORBA::ORB_ptr theOrb)
+SALOMEDS_GenericAttribute_i::SALOMEDS_GenericAttribute_i(DF_Attribute* theImpl, CORBA::ORB_ptr theOrb) :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
 {
   _orb = CORBA::ORB::_duplicate(theOrb);
   _impl = theImpl;
@@ -53,6 +55,23 @@ SALOMEDS_GenericAttribute_i::~SALOMEDS_GenericAttribute_i()
 {
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_GenericAttribute_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_GenericAttribute_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 void SALOMEDS_GenericAttribute_i::CheckLocked() throw (SALOMEDS::GenericAttribute::LockProtection) 
 {
   SALOMEDS::Locker lock;
index 0654e26dde47176167a0f74aa1edae4a7a449a4d..b141ad266b85e34653630767cdd0d74fe28b11cd 100644 (file)
@@ -48,6 +48,8 @@ public:
   SALOMEDS_GenericAttribute_i(DF_Attribute* theImpl, CORBA::ORB_ptr theOrb);
   virtual ~SALOMEDS_GenericAttribute_i();
 
+  virtual PortableServer::POA_ptr _default_POA();
+
   void CheckLocked() throw (SALOMEDS::GenericAttribute::LockProtection);
   
   virtual char* Type();
index cc7d6700fda508498f90395d78f7f59796d68637..07b24a93cd3d2970de5914d5391e05a113ec445e 100644 (file)
@@ -27,6 +27,8 @@
 #include "SALOMEDS_SComponentIterator_i.hxx"
 #include "SALOMEDS.hxx"
 #include "SALOMEDSImpl_SComponent.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
+#include "utilities.h"
 
 //============================================================================
 /*! Function : constructor
@@ -35,7 +37,8 @@
 //============================================================================
 
 SALOMEDS_SComponentIterator_i::SALOMEDS_SComponentIterator_i(const SALOMEDSImpl_SComponentIterator& theImpl, 
-                                                             CORBA::ORB_ptr orb) 
+                                                             CORBA::ORB_ptr orb)  :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
 {
   _orb = CORBA::ORB::_duplicate(orb);
   _impl = theImpl.GetPersistentCopy();
@@ -51,6 +54,23 @@ SALOMEDS_SComponentIterator_i::~SALOMEDS_SComponentIterator_i()
    if(_impl) delete _impl;
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_SComponentIterator_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_SComponentIterator_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 //============================================================================
 /*! Function : Init
  * 
index 73124108fbaa43a2e1c82573cb087af2c18a9666..928fe053071a877f3addae357810173c11d5fd4c 100644 (file)
@@ -54,6 +54,8 @@ public:
   SALOMEDS_SComponentIterator_i(const SALOMEDSImpl_SComponentIterator& theImpl, CORBA::ORB_ptr);
   
   ~SALOMEDS_SComponentIterator_i();
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   virtual void Init();
   virtual CORBA::Boolean More();
index 210e0fa68217ad2a69d83c4bf17afbe39d3ed9f5..fd6601ee005211aea3618b28fc9bf4edab17b37a 100644 (file)
@@ -58,7 +58,8 @@ SALOMEDS::SObject_ptr SALOMEDS_SObject_i::New(const SALOMEDSImpl_SObject& theImp
  *  Purpose  :
  */
 //============================================================================
-SALOMEDS_SObject_i::SALOMEDS_SObject_i(const SALOMEDSImpl_SObject& impl, CORBA::ORB_ptr orb)
+SALOMEDS_SObject_i::SALOMEDS_SObject_i(const SALOMEDSImpl_SObject& impl, CORBA::ORB_ptr orb) :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
 {
   _impl = 0;
   if(!impl.IsNull()) {
@@ -85,6 +86,23 @@ SALOMEDS_SObject_i::~SALOMEDS_SObject_i()
    if(_impl) delete _impl;    
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_SObject_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_SObject_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 //================================================================================
 /*!
  * \brief Returns true if the %SObject does not belong to any %Study
index f996197fb2f8e70a41e5a63a82a9b05030b778f8..5c0bdc652ea52e0c570e2a79d1cd8e580c5d5074 100644 (file)
@@ -53,6 +53,8 @@ public:
   SALOMEDS_SObject_i(const SALOMEDSImpl_SObject&, CORBA::ORB_ptr);
   
   virtual ~SALOMEDS_SObject_i();
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   virtual CORBA::Boolean IsNull();
   virtual char* GetID();
index 17a6583b0b6f7fe26c48ce8ed3b0defe4a613849..a780abd6cc2c861a34954b83908c2ba6e08f2477 100644 (file)
@@ -70,6 +70,7 @@ int main(int argc, char** argv)
       ts_rem.tv_nsec=0;
       ts_rem.tv_sec=0;
       CosNaming::NamingContext_var inc;
+      PortableServer::POA_var defaultPoa;
       PortableServer::POA_var poa;
       CORBA::Object_var theObj;
       CORBA::Object_var obj;
@@ -95,9 +96,20 @@ int main(int argc, char** argv)
             { 
               obj = orb->resolve_initial_references("RootPOA");
               if(!CORBA::is_nil(obj))
-                poa = PortableServer::POA::_narrow(obj);
-              if(!CORBA::is_nil(poa))
-                pman = poa->the_POAManager();
+                defaultPoa = PortableServer::POA::_narrow(obj);
+              if(!CORBA::is_nil(defaultPoa))
+                pman = defaultPoa->the_POAManager();
+
+              PortableServer::POAManager_var pman = defaultPoa->the_POAManager();
+              CORBA::PolicyList policies;
+              policies.length(2);
+              PortableServer::ThreadPolicy_var threadPol(defaultPoa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL));
+              PortableServer::ImplicitActivationPolicy_var implicitPol(defaultPoa->create_implicit_activation_policy(PortableServer::IMPLICIT_ACTIVATION));
+              policies[0] = PortableServer::ThreadPolicy::_duplicate(threadPol);
+              policies[1] = PortableServer::ImplicitActivationPolicy::_duplicate(implicitPol);
+              poa = defaultPoa->create_POA("KERNELStandaloneStudySingleThreadPOA",pman,policies);
+              threadPol->destroy();
+
               if(!CORBA::is_nil(orb)) 
                 theObj = orb->resolve_initial_references("NameService"); 
               if (!CORBA::is_nil(theObj)){
index a31fda64c6d16eebd6a2ce09bac1eec4228a136b..e3013e714232005a8ed7d0a64bb483476e53ad74 100644 (file)
@@ -26,6 +26,7 @@
 //
 #include "utilities.h"
 #include "SALOMEDS_StudyBuilder_i.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_Study_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"
 #include "SALOMEDS_SComponent_i.hxx"
@@ -67,6 +68,23 @@ SALOMEDS_StudyBuilder_i::SALOMEDS_StudyBuilder_i(SALOMEDSImpl_StudyBuilder* theI
 SALOMEDS_StudyBuilder_i::~SALOMEDS_StudyBuilder_i()
 {}
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_StudyBuilder_i::_default_POA()
+{
+  PortableServer::POA_ptr poa = SALOMEDS_StudyManager_i::GetThePOA();
+  MESSAGE("SALOMEDS_StudyBuilder_i::_default_POA: " << poa);
+  return PortableServer::POA::_duplicate(poa);
+}
+
 //============================================================================
 /*! Function : NewComponent
  *  Purpose  : Create a new component (Scomponent)
index d4c30fb74bf155ada22b44a6f972487692e503e8..99b44a92c1d17c7a16787334dd56b9cae4ae1c9d 100644 (file)
@@ -48,6 +48,8 @@ public:
 
   ~SALOMEDS_StudyBuilder_i();
 
+  virtual PortableServer::POA_ptr _default_POA();
+
   //! NewComponent
   /*!
     \param ComponentDataType    
index c5eefdfaaf099b926e824989bfb218c8baff2228..2e91468964bc54d9b4f63fe4b8f633603cba6450 100644 (file)
@@ -69,6 +69,11 @@ SALOMEDS_StudyManager_i::SALOMEDS_StudyManager_i(CORBA::ORB_ptr orb, PortableSer
 {
   _orb = CORBA::ORB::_duplicate(orb);
   _poa = PortableServer::POA::_duplicate(thePOA);
+  MESSAGE("thePOA, _poa="<<_poa);
+  if (_mapOfPOA.empty())
+    _mapOfPOA[0] = _poa;
+  else
+    MESSAGE("_mapOfPOA[0] already contains: " << _mapOfPOA[0]);
   _name_service = new SALOME_NamingService(_orb);
   // Study directory creation in the naming service : to register all
   // open studies in the session
@@ -91,6 +96,22 @@ SALOMEDS_StudyManager_i::~SALOMEDS_StudyManager_i()
   delete _impl;
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_StudyManager_i::_default_POA()
+{
+  MESSAGE("SALOMEDS_StudyManager_i::_default_POA: " << _poa);
+  return PortableServer::POA::_duplicate(_poa);
+}
+
 //============================================================================
 /*! Function : register_name
  *  Purpose  : Register the study Manager in the naming service under the
@@ -487,6 +508,19 @@ PortableServer::POA_ptr SALOMEDS_StudyManager_i::GetPOA(const SALOMEDS::Study_pt
   return PortableServer::POA::_nil();
 }
 
+PortableServer::POA_ptr SALOMEDS_StudyManager_i::GetThePOA()
+{
+  std::map<int, PortableServer::POA_ptr>::iterator iter = _mapOfPOA.begin();
+  if (iter != _mapOfPOA.end())
+    {
+      PortableServer::POA_ptr aPoa = iter->second;
+      MESSAGE("GetThePOA(): "<< aPoa);
+      return aPoa;
+    }
+  MESSAGE("GetThePOA(): _nil !");
+  return PortableServer::POA::_nil();
+}
+
 CORBA::Long SALOMEDS_StudyManager_i::getPID()
 {
 #ifdef WIN32
index ba1daf0eb3684e7504c16a9ff8ec33bb34455486..05225c75e5521baf3f4b8c52c704b3e3fa7c823b 100644 (file)
@@ -71,6 +71,8 @@ public:
   //! standard destructor
   virtual  ~SALOMEDS_StudyManager_i();
 
+  virtual PortableServer::POA_ptr _default_POA();
+
  //! method to Register study Manager in the naming service
   /*!
     \param char* arguments, the context to register the study manager in the NS
@@ -149,6 +151,7 @@ public:
   virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
 
   static PortableServer::POA_ptr GetPOA(const SALOMEDS::Study_ptr theStudy);
+  static PortableServer::POA_ptr GetThePOA();
 
   void Shutdown() { if(!CORBA::is_nil(_orb)) _orb->shutdown(0); }
 };
index d0b936acc08a635d67697e4f9b2a857f180ef0fc..3d99e2b73925b3f4a428dc077152c8f4745c1d49 100644 (file)
@@ -274,6 +274,23 @@ SALOMEDS_Study_i::~SALOMEDS_Study_i()
   _mapOfStudies.erase(_impl);
 }  
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_Study_i::_default_POA()
+{
+  PortableServer::POA_ptr poa = SALOMEDS_StudyManager_i::GetThePOA();
+  MESSAGE("SALOMEDS_Study_i::_default_POA: " << poa);
+  return PortableServer::POA::_duplicate(poa);
+}
+
 //============================================================================
 /*! Function : GetPersistentReference
  *  Purpose  : Get persistent reference of study (idem URL())
index a767e6414162f8bad9fe11e04bebfbc20df52160..59fed56643c5fbd007b6f4515525ae3b4dff9e1f 100644 (file)
@@ -38,6 +38,7 @@
 #include <stdio.h>
 
 //SALOMEDS headers
+#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_SComponentIterator_i.hxx"
 #include "SALOMEDS_StudyBuilder_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"
@@ -64,6 +65,8 @@ public:
   
   //! standard destructor
   virtual ~SALOMEDS_Study_i(); 
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   //! method to Get persistent reference of study (idem URL())
   /*!
index 118ab2d8120f3b5123ea895c448899ad04c7187b..2076c255b5f1a635305dc2949f590a1efa8b07e2 100644 (file)
@@ -28,6 +28,7 @@
 #include "SALOMEDS_UseCaseIterator_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"  
 #include "SALOMEDS.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
 
 #include "utilities.h"
 
@@ -37,7 +38,8 @@
  */
 //============================================================================
 SALOMEDS_UseCaseBuilder_i::SALOMEDS_UseCaseBuilder_i(SALOMEDSImpl_UseCaseBuilder* theImpl,
-                                                     CORBA::ORB_ptr orb)
+                                                     CORBA::ORB_ptr orb) :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
 {
   _orb = CORBA::ORB::_duplicate(orb);
   _impl = theImpl;
@@ -52,6 +54,23 @@ SALOMEDS_UseCaseBuilder_i::~SALOMEDS_UseCaseBuilder_i()
 {
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_UseCaseBuilder_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_UseCaseBuilder_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 
 //============================================================================
 /*! Function : Append
index b7edf4d81a30bdc2d93dab92c61a420eac0e2a49..42a836e0d5a6f29b3751596a20e82be3ab67c86b 100644 (file)
@@ -58,6 +58,8 @@ public:
   
   //! standard destructor
   ~SALOMEDS_UseCaseBuilder_i();
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   virtual CORBA::Boolean Append(SALOMEDS::SObject_ptr theObject);
 
index cb3babe7672d7a2567f8d13d58f880bdc6b8d180..9a1f681b147c107be741794d727ebaf52f6d2cd5 100644 (file)
@@ -27,6 +27,7 @@
 #include "SALOMEDS_UseCaseIterator_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"
 #include "SALOMEDS.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
 
 #include "SALOMEDSImpl_SObject.hxx"
 #include "utilities.h"
@@ -37,7 +38,8 @@
  */
 //============================================================================
 SALOMEDS_UseCaseIterator_i::SALOMEDS_UseCaseIterator_i(const SALOMEDSImpl_UseCaseIterator& theImpl, 
-                                                       CORBA::ORB_ptr orb)
+                                                       CORBA::ORB_ptr orb) :
+  GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
 {
   _orb = CORBA::ORB::_duplicate(orb);
   _impl = theImpl.GetPersistentCopy();
@@ -53,6 +55,23 @@ SALOMEDS_UseCaseIterator_i::~SALOMEDS_UseCaseIterator_i()
     if(_impl) delete _impl;
 }
 
+//============================================================================
+/*!
+  \brief Get default POA for the servant object.
+
+  This function is implicitly called from "_this()" function.
+  Default POA can be set via the constructor.
+
+  \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_UseCaseIterator_i::_default_POA()
+{
+  myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+  MESSAGE("SALOMEDS_UseCaseIterator_i::_default_POA: " << myPOA);
+  return PortableServer::POA::_duplicate(myPOA);
+}
+
 //============================================================================
 /*! Function :Init
  * 
index fbba0d691380a95e63126236b6aeeb1bf1474097..a659cd81a4dc4f026b607ff2c1dc1cefcba2c76a 100644 (file)
@@ -53,6 +53,8 @@ public:
   
   //! standard destructor
   ~SALOMEDS_UseCaseIterator_i();
+
+  virtual PortableServer::POA_ptr _default_POA();
   
   virtual void Init(CORBA::Boolean);
   virtual CORBA::Boolean More();