[omniORB] How to create a Persistance Corba server
Mahanta, Dhruba
Dhruba.Mahanta at kla-tencor.com
Wed Nov 17 20:41:53 GMT 2010
Hi
Requirement: Corba server should be persistent so that even if the Corba
server application restarted, or the computer hosting Corba server is
rebooted, Corba Client application need not be reinitialized.
Server Side Implementation:
main()
{
CORBA::ORB_var objCorbaOrb;
objCorbaOrb = CORBA::ORB_init(argc, argv);
CORBA::Object_var obj =
objCorbaOrb->resolve_initial_references("omniINSPOA");
PortableServer::POA_var rootPOA =
PortableServer::POA::_narrow(obj);
CServerObj* pSvr = new CServerObj();
PortableServer::POAManager_var objPOAManager =
rootPOA->the_POAManager();
PortableServer::ObjectId_var myObjID =
PortableServer::string_to_ObjectId("IMC.context/Diagnostics.Object");
rootPOA->activate_object_with_id(myObjID, pSvr);
obj = rootPOA->servant_to_reference(pSvr);
if( !bindObjectToName(objCorbaOrb, obj) )
return 1;
CosNaming::NamingContext_var rootContext;
// Obtain a reference to the root context of the Name service:
CORBA::Object_var obj;
obj = objCorbaOrb->resolve_initial_references("NameService");
// Narrow the reference returned.
rootContext = CosNaming::NamingContext::_narrow(obj);
// Bind a context to the root context:
CosNaming::Name contextName;
contextName.length(1);
contextName[0].id = (const char*) "IMC"; // string copied
contextName[0].kind = (const char*) "context"; // string copied
CosNaming::NamingContext_var testContext;
// Bind the context to root.
testContext = rootContext->bind_new_context(contextName);
// Bind objref
CosNaming::Name objectName;
objectName.length(1);
objectName[0].id = (const char*) "Diagnostics"; // string
copied
objectName[0].kind = (const char*) "Object"; // string copied
testContext->bind(objectName, obj);
pSvr->_remove_ref();
objPOAManager->activate();
objCorbaOrb->run();
}
Client Side Implementation
main()
{
std::string szCorbaName = "corbaname::";
std::string szCorbaId =
":2809#IMC.context/Diagnostics.Object";
szCorbaName += szIPAddress;
szCorbaName += szCorbaId;
int nArg = 0;
m_objORB = CORBA::ORB_init(nArg, NULL);
CORBA::Object_var obj =
m_objORB->string_to_object(szCorbaName.c_str());
if( CORBA::is_nil(obj) )
{
return false;
}
m_objServerObj = IServerObj::_narrow(obj);
if( CORBA::is_nil(m_objServerObj) )
{
return false;
}
}
Problem:
When the client is freshly initialized the communication object
(m_objServerObj in the client code) there is no issue. But once server
goes down or rebooted, existing client object(m_objServerObj)
fails to invoke server calls for the first time, but if I try(somehow)
to make the invoke call for 2nd time on the same client object it
succeeds.
Can someone help me to figure out what could be the issue here.
Regards
Dhruba
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20101117/2971bfd7/attachment.htm
More information about the omniORB-list
mailing list