-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// SALOME_ParallelContainerProxy : implementation of container and engine for Parallel Kernel
// File : SALOME_ParallelContainerProxy_i.cxx
// Author : André RIBES, EDF
-
+//
#include "SALOME_ParallelContainerProxy_i.hxx"
Container_proxy_impl_final::Container_proxy_impl_final(CORBA::ORB_ptr orb,
// déterminer si on doit créer une instance sequentielle
// ou parallèle d'un composant dans la méthode create_component_instance
CORBA::Boolean
-Container_proxy_impl_final::load_component_Library(const char* componentName)
+Container_proxy_impl_final::load_component_Library(const char* componentName, CORBA::String_out reason)
{
- MESSAGE("Begin of load_component_Library on proxy : " << componentName)
+ MESSAGE("Begin of load_component_Library on proxy : " << componentName);
+ reason=CORBA::string_dup("");
+
std::string aCompName = componentName;
CORBA::Boolean ret = true;
Engines::Container_var node = Engines::Container::_narrow(object);
if (!CORBA::is_nil(node))
{
+ char* reason;
try
{
- node->load_component_Library(componentName);
+ node->load_component_Library(componentName,reason);
MESSAGE("Call load_component_Library done node : " << i);
+ CORBA::string_free(reason);
}
catch (...)
{
INFOS("Exception catch during load_component_Library of node : " << i);
+ CORBA::string_free(reason);
ret = false;
}
}
return ret;
}
+Engines::EngineComponent_ptr
+Container_proxy_impl_final::create_component_instance(const char* componentName, ::CORBA::Long studyId)
+{
+ Engines::FieldsDict_var env = new Engines::FieldsDict;
+ char* reason;
+ Engines::EngineComponent_ptr compo = create_component_instance_env(componentName, studyId, env, reason);
+ CORBA::string_free(reason);
+ return compo;
+}
+
// Il y a deux cas :
// Composant sequentiel -> on le créer sur le noeud 0 (on pourrait faire une répartition de charge)
// Composant parallèle -> création du proxy ici puis appel de la création de chaque objet participant
// au composant parallèle
-Engines::Component_ptr
-Container_proxy_impl_final::create_component_instance(const char* componentName, ::CORBA::Long studyId)
+Engines::EngineComponent_ptr
+Container_proxy_impl_final::create_component_instance_env(const char* componentName, ::CORBA::Long studyId,
+ const Engines::FieldsDict& env, CORBA::String_out reason)
{
+ reason=CORBA::string_dup("");
+
std::string aCompName = componentName;
if (_libtype_map.count(aCompName) == 0)
{
// Component is not loaded !
INFOS("Proxy: component is not loaded ! : " << aCompName);
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
// If it is a sequential component
}
// Parallel Component !
- Engines::Component_var component_proxy = Engines::Component::_nil();
+ Engines::EngineComponent_var component_proxy = Engines::EngineComponent::_nil();
// On commence par créer le proxy
#ifndef WIN32
#ifndef WIN32
INFOS("dlerror() result is : " << dlerror());
#endif
- return Engines::Component::_nil() ;
+ return Engines::EngineComponent::_nil() ;
}
try {
_numInstanceMutex.lock() ; // lock on the instance number
// --- get reference & servant from id
CORBA::Object_var obj = _poa->id_to_reference(*(proxy->proxy_id));
- component_proxy = Engines::Component::_narrow(obj);
+ component_proxy = Engines::EngineComponent::_narrow(obj);
proxy->proxy_corba_ref = component_proxy;
if (!CORBA::is_nil(component_proxy))
else
{
INFOS("The factory returns a nil object !");
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
}
catch (...)
{
INFOS( "Exception catched in Proxy creation" );
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
// Create on each node a work node
catch (SALOME::SALOME_Exception & ex)
{
INFOS("SALOME_EXCEPTION : " << ex.details.text);
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
catch (...)
{
INFOS("Unknown Exception catch during create_paco_component_node_instance on node : " << i);
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
}
else
{
INFOS("Cannot call create_paco_component_node_instance on node " << i << " ref is nil !");
- return Engines::Component::_nil();
+ return Engines::EngineComponent::_nil();
}
}