4 #define protected public
5 #include <omniORB4/CORBA.h>
6 #include <omniORB4/internal/typecode.h>
9 #include "RuntimeSALOME.hxx"
10 #include "SalomeContainer.hxx"
11 #include "SalomeComponent.hxx"
13 #include "SALOME_NamingService.hxx"
14 #include "SALOME_LifeCycleCORBA.hxx"
15 #include "SALOME_ContainerManager.hxx"
21 #include "YacsTrace.hxx"
23 using namespace YACS::ENGINE;
26 SalomeContainer::SalomeContainer():_trueCont(Engines::Container::_nil())
30 SalomeContainer::SalomeContainer(const SalomeContainer& other):Container(other),_trueCont(Engines::Container::_nil())
34 SalomeContainer::~SalomeContainer()
38 void SalomeContainer::lock()
43 void SalomeContainer::unLock()
48 bool SalomeContainer::isAlreadyStarted() const
50 if(CORBA::is_nil(_trueCont))
56 void SalomeContainer::start() throw (Exception)
58 CORBA::ORB_ptr orb=getSALOMERuntime()->getOrb();
59 SALOME_NamingService ns(orb);
60 CORBA::Object_var obj=ns.Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS);
61 Engines::ContainerManager_var contManager=Engines::ContainerManager::_narrow(obj);
62 SALOME_LifeCycleCORBA LCC(&ns);
63 Engines::MachineParameters params;
65 params.hostname=CORBA::string_dup("");
66 std::ostringstream stream;
67 stream << (void *)(this);
68 params.container_name=CORBA::string_dup(stream.str().c_str());
71 std::string policy=getProperty("policy");
73 _trueCont=contManager->StartContainer(params,Engines::P_BEST);
74 else if(policy=="first")
75 _trueCont=contManager->StartContainer(params,Engines::P_FIRST);
77 _trueCont=contManager->StartContainer(params,Engines::P_CYCL);
79 catch(CORBA::COMM_FAILURE&)
81 throw Exception("SalomeContainer::start : Unable to launch container in Salome : CORBA Comm failure detected");
83 catch(CORBA::Exception&)
85 throw Exception("SalomeContainer::start : Unable to launch container in Salome : Unexpected CORBA failure detected");
87 if(CORBA::is_nil(_trueCont))
88 throw Exception("SalomeContainer::start : Unable to launch container in Salome");
90 DEBTRACE(_trueCont->_PR_getobj()->pd_refCount );
94 Container *SalomeContainer::clone() const
96 if(_isAttachedOnCloning)
99 return (Container*) (this);
102 return new SalomeContainer(*this);
105 std::string SalomeContainer::getPlacementId() const
107 if(isAlreadyStarted())
109 const char *what="/";
110 char *corbaStr=_trueCont->name();
111 string ret(corbaStr);
112 CORBA::string_free(corbaStr);
114 std::string::size_type i=ret.find_first_of(what,0);
115 i=ret.find_first_of(what, i==std::string::npos ? i:i+1);
116 if(i!=std::string::npos)
117 return ret.substr(i+1);
121 return "Not placed yet !!!";
124 void SalomeContainer::checkCapabilityToDealWith(const ComponentInstance *inst) const throw (Exception)
126 if(inst->getKind()!=SalomeComponent::KIND)
127 throw Exception("SalomeContainer::checkCapabilityToDealWith : SalomeContainer is not able to deal with this type of ComponentInstance.");