[omniORB] eg3_clt.cc eg3_impl.cc design questions

Martin Trappel 0xCDCDCDCD at gmx.at
Wed Apr 9 11:44:44 BST 2008


Andre Konopka wrote:
> Hi,
> 
> I'm new on corba and played around with the enclosed examples 
> (especially eg3_clt.cc eg3_impl.cc).
> I use Suse SLES9 and omniORB-4.1.2
> 
> I would like to 'hide' the complete corba stuff in an additional class 
> so that I can call the 'echoString' method as you see if you have a look 
> at the following code
> 
> (...)
> I wrote a new class 'sendecho' to hide the corba details.
> (...)
> Here comes the sendecho.cc file
> (...)
> void sendecho::echoit(const char *msg) {
>   int argc=0;
>   char** argv=0;
>   cout << "initializing corba " << endl;
>   CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
>   cout << "calling getObjectReference" << endl;
>   CORBA::Object_var obj = getObjectReference(orb);
>   Echo_var echoref = Echo::_narrow(obj);
>   cout << "calling echoString with parameter "<< msg << endl;
>   CORBA::String_var dest = echoref->echoString(msg);
>   cout << "server replied: " << dest << endl;
> 
> }

I guess it's just test code so it should be all right. But if you want 
to hide the CORBA stuff, it will be better to call ORB_init (and maybe 
also getObjReferences) in the dtor (or another initializer fn) of your 
helper class.

> 
> CORBA::Object_ptr sendecho::getObjectReference(CORBA::ORB_ptr orb) {
> 
> original code from eg3_clt.cc
> 
> }
> 
> It works fine as long as my 'server' eg3_impl.cc is up and running
> 
> If I stop the server and restart my 'client' I get just
> 
> Aborted
> (...)
> If I run the original code
> 
> ./eg3_clt
> Caught system exception TRANSIENT -- unable to contact the server.
> 
> the 'client' aborted as expected.
> 
> 
> Why the code doesn't throw an exception?
> Is there a better (clean) way to hide corba implementation details?
> 

When you read the error messages given in eg3_clt you will see that the 
try-catch block in getObjRef() is for the Naming Service and _not_ for 
the Object. The TRANSIENT error message you are getting in the original 
code comes from main() as there is also a try-catch block.

br,
Martin



More information about the omniORB-list mailing list