Salome HOME
PR: container lifecycle, new design, first part
[modules/kernel.git] / src / Container / SALOME_ContainerPy.py
index 4d906f84de61e1ea23a9551894dc2fcb46840eb8..d2b30bfa89753151c0c7ce34504d0f547de7d3f9 100755 (executable)
@@ -36,10 +36,13 @@ from omniORB import CORBA, PortableServer
 # (if not, incomplete import done by SALOME module: no load of SALOMEDS_attributes)
 import SALOMEDS 
 import Engines, Engines__POA
+reload(Engines)
+reload(Engines__POA)
 from SALOME_NamingServicePy import *
 from SALOME_ComponentPy import *
 
 from SALOME_utilities import *
+from Utils_Identity import getShortHostName
 
 #=============================================================================
 
@@ -58,10 +61,10 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         self._poa = poa
         self._containerName = containerName
 
-        myMachine=string.split(os.getenv( "HOSTNAME" ),'.')
+        myMachine=getShortHostName()
         naming_service = SALOME_NamingServicePy_i(self._orb)
         self._naming_service = naming_service
-        Container_path = "/Containers/" + myMachine[0] + "/" + self._containerName
+        Container_path = "/Containers/" + myMachine + "/" + self._containerName
         MESSAGE( str(Container_path) )
         naming_service.Register(self._this(), Container_path)
             
@@ -69,8 +72,8 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
 
     def start_impl(self, ContainerName):
         MESSAGE(  "SALOME_ContainerPy_i::start_impl " + str(ContainerName) )
-        myMachine=string.split(os.getenv( "HOSTNAME" ),'.')
-        theContainer = "/Containers/" + myMachine[0] + "/" + ContainerName
+        myMachine=getShortHostName()
+        theContainer = "/Containers/" + myMachine + "/" + ContainerName
         try:
             obj = self._naming_service.Resolve(theContainer)
         except :
@@ -83,14 +86,32 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
             if container is None:
                 MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(containerName) + ".object exists but is not a Container" )
             else :
-                MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(ContainerName) + ".object found without runSession" )
+                MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(ContainerName) + ".object found without new launch" )
             return container
-        shstr = os.getenv( "PWD" ) + "/"
-        shstr += "runSession ./SALOME_ContainerPy.py "
+        #shstr = os.getenv( "PWD" ) + "/"
+        #shstr += "runSession ./SALOME_ContainerPy.py "
+        shstr = os.getenv("KERNEL_ROOT_DIR") + "/bin/salome/SALOME_ContainerPy.py ";
+        #shstr = "runSession SALOME_ContainerPy.py "
         shstr += ContainerName
-        shstr += " > /tmp/"
-        shstr += ContainerName
-        shstr += ".log 2>&1 &"
+
+        # mpv: fix for SAL4731 - allways create new file to write log of server
+        num = 1
+        fileName = ""
+        while 1:
+            fileName = "/tmp/"+ContainerName+"_%i.log"%num
+            if not os.path.exists(fileName):
+                break
+            num += 1
+            pass
+        
+        shstr += " > "
+        shstr += fileName
+        shstr += " 2>&1 &"
+        
+        #shstr += " > /tmp/"
+        #shstr += ContainerName
+        #shstr += ".log 2>&1 &"
+        
         MESSAGE(  "SALOME_ContainerPy_i::start_impl " + "os.system(" + str(shstr) + ")" )
         os.system( shstr )
         count = 21
@@ -114,6 +135,22 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
 
     #-------------------------------------------------------------------------
 
+    def instance(self, nameToRegister, componentName):
+        MESSAGE(  "SALOME_ContainerPy_i::instance " + str(nameToRegister) + ' ' + str(componentName) )
+        self._numInstance = self._numInstance +1
+        instanceName = nameToRegister + "_inst_" + `self._numInstance`
+
+       component=__import__(componentName)
+       factory=getattr(component,componentName)
+       comp_i=factory(self._orb, self._poa, self._this(), self._containerName,
+                      instanceName, nameToRegister)
+
+        MESSAGE( "SALOME_ContainerPy_i::instance : component created")
+        comp_o = comp_i._this()
+        return comp_o
+
+    #-------------------------------------------------------------------------
+
     def load_impl(self, nameToRegister, componentName):
         MESSAGE(  "SALOME_ContainerPy_i::load_impl " + str(nameToRegister) + ' ' + str(componentName) )
         self._numInstance = self._numInstance +1
@@ -131,21 +168,25 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
 
     def remove_impl(self, component):
         MESSAGE( "SALOME_ContainerPy_i::remove_impl" )
+        return None
 
     #-------------------------------------------------------------------------
 
     def finalize_removal(self):
         MESSAGE( "SALOME_ContainerPy_i::finalize_removal" )
+        return None
 
     #-------------------------------------------------------------------------
 
     def ping(self):
         MESSAGE( "SALOME_ContainerPy_i::ping" )
+        return None
 
     #-------------------------------------------------------------------------
 
     def _get_name(self):
         MESSAGE( "SALOME_ContainerPy_i::_get_name" )
+        return self._containerName
 
     #-------------------------------------------------------------------------
 
@@ -154,6 +195,12 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         self._machineName = "localhost"
         return self._machineName
 
+    #-------------------------------------------------------------------------
+
+    def Shutdown(self):
+        self._orb.shutdown(0)
+        pass
+
 #=============================================================================
 
 #initialise the ORB and find the root POA