[omniORB] Question

Antoine Thierry athierry@alphacent.com
Mon, 10 Sep 2001 11:11:09 +0200


Hello

I have a question

Is there any known bug with the PortableServer::POA::deactivate_object
function

Because i have problem thing i don't understand

Here's the corresponding code

_________________________________________________________________________

CORBA::PolicyList policies;
policies.length(3);
policies[(CORBA::ULong)0] = 
rootPOA->create_lifespan_policy(PortableServer::PERSISTENT);
policies[1] = rootPOA->create_id_assignment_policy(PortableServer::USER_ID);
policies[2] = 
rootPOA->create_servant_retention_policy(PortableServer::RETAIN);

PortableServer::POA_var myrdvPOA = 
rootPOA->create_POA("myrdv_poa",poa_manager,policies);

PortableServer::ObjectId_var sessionManagermanagerId 
=PortableServer::string_to_ObjectId("MyrdvSessionManager");
PortableServer::ObjectId_var adminDoormanagerId 
=PortableServer::string_to_ObjectId("MyrdvAdminDoor");

// Create the servants

SessionManagerImpl_var sessionManagerServant = new SessionManagerImpl(myrdv, 
myrdvPOA, statRoot, false);
AdminDoorImpl_var adminDoorServant = new AdminDoorImpl(orb, statRoot, myrdv, 
sessionManagerServant, false);

// Activate the servant with the ID on myPOA
myrdvPOA->activate_object_with_id(sessionManagermanagerId, 
sessionManagerServant);
myrdvPOA->activate_object_with_id(adminDoormanagerId, adminDoorServant);

// Write reference to file
CORBA::Object_var ref = 
myrdvPOA->id_to_reference(sessionManagermanagerId.in());
string string_ref = orb->object_to_string(ref.in());
ofstream refFile(phpdoor_ior.c_str());
refFile << string_ref << endl;
refFile.close();

ref =  myrdvPOA->id_to_reference(adminDoormanagerId.in());
string_ref = orb->object_to_string(ref.in());
refFile.open(admindoor_ior.c_str());
refFile << string_ref << endl;
refFile.close();

CORBA::Object_var reference = 
myrdvPOA->servant_to_reference(sessionManagerServant);

reference = myrdvPOA->servant_to_reference(adminDoorServant);

orb->run();
orb->destroy();

unlink(phpdoor_ior.c_str());
unlink(admindoor_ior.c_str());

cout << "Deactivation of adminDoormanager" << endl;
try {
        myrdvPOA->deactivate_object(sessionManagermanagerId.in());
} catch (...) {
        cout << "catch exception" << endl;
}

cout << "Deactivation du SessionManager" << endl;
try {
        myrdvPOA->deactivate_object(adminDoormanagerId.in());
} catch (...)  {
        cout << "catch exception" << endl;
}

poa_manager->deactivate(TRUE, TRUE);
                
______________________________________________________________          

So, the problem is
when a want to deactivate my sessionManager or my Admindoor
a get an exception, but my program continues
and, when a want to deactivate the both objects, the programs freezes at the 
second deactivation

The exception i get is, i think, a CORBA::exception


Have anybody got an idea ?

Thanks in advance

Antoine Thierry - AlphaCentauri