[omniORB] issues with multiple orbs in a server gui app
Duncan Grisby
duncan at grisby.org
Wed Jan 18 17:00:36 GMT 2006
On Wednesday 18 January, Jason Dolan wrote:
> >>How is it I can run m_pORB->run() for each window if in fact there is
> >>just one orb? What is really happening when I call m_pORB->run() for
> >>each window?
> > Absolutely nothing. The thread from which you call run() just blocks
> > waiting for the ORB to be destroyed. Any number of threads can be
> > blocked in run(), but none of them will do anything.
>
> Right, but since each window has a gui, that gui expects not to be
> blocked. So I need to create a separate thread to be blocked by
> ORB::run() all the while the gui is running on happily.
No you don't. You don't need to call ORB::run(). At all. Ever.
> > omniORB always creates its own threads to handle incoming calls and do
> > all the other things the ORB needs to do. You do not need to call
> > ORB::run() at all. There is no "event loop" for you to run.
>
> hmm, now I'm really confused... you don't need to call ORB:run() at
> all? How does it start listening for incoming calls then?
You don't need to call ORB::run(). omniORB has its own threads. When you
call ORB_init() (and various other methods), omniORB starts its threads.
They stay running until you call ORB::destroy(). Run your server with
command line arguments -ORBtraceLevel 20 -ORBtraceThreadId 1. Amongst
other things, you'll see lots of messages about threads being started.
> My client has a base window. From that window I can open new
> windows. These new windows are the ones I'm talking about above. When
> a new window opens, it makes a CORBA call to another server
> application(not mentioned here). Its call tells the server that it
> can send commands to that new window (i.e. it gives the server it's
> IOR). It then starts up its ORB instance and waits for commands. The
> server using that window's unique IOR can then send commands to that
> specific window.
>
> Why I'm doing this is beyond the scope of this conversation... I guess
> you can just trust that the server knows all the windows on the client
> by each windows IOR. And it needs the ability to send messages to an
> individual window by that IOR.
OK. So each window has an associated CORBA object that the server can
call back to. That's a very common situation.
> To achive this, each window needs it's own CORBA server running to
> listen for the incoming commands.
No it doesn't. The whole process is a CORBA server. Each window has an
associated object. You just have multiple activated objects in your
server.
Simply initialise the ORB and POA once when the client program starts
up, then activate as many objects as you need. All those objects will be
contactable without you having to do anything else.
Cheers,
Duncan.
--
-- Duncan Grisby --
-- duncan at grisby.org --
-- http://www.grisby.org --
More information about the omniORB-list
mailing list