[omniORB] [Q]report server architecture with omniOrb

Martin Trappel 0xCDCDCDCD at gmx.at
Thu Feb 5 08:10:44 GMT 2009


V S P wrote:
> Hi,
> I am new to the list.
> Currently designing a somewhat simple (but distributed) reporting server
> that will be using postegres and files joining them together to create
> reports.
> 
> The way the system would work is there is a table called request_queue
> an entry there would indicate a type of report to run and the status of
> the entry (submitted, executed, errored, inprogress).
> 
> Reports can take several hours to run, so the 'report servers'
> have to be asynchronious.
> 
> I was thinking I coud use omniOrb to implement the 'distribution'
> underpinning. However I am having difficulties invisioning how it can be
> done.
> 
> a) assuming that I have some kind of a 'dispatcher' client that reads
> the data from the queue table, then it needs to figure out which one of
> the report serveres is not busy -- and send the request to that one.
> 
> b) the server would take the request, will say 'thank you' and work it
> on it for a couple of hours, and then update the status of the queue
> entry as 'executed'.
> 

Since both the Servers and the Dispatcher-Client need to talk to the 
postgre Database, you could just leave CORBA out completely and let them 
talk via the database ...

> I thought I would need Naming Service and notification service for this,
> however, my undestanding is that Notification service is not really
> supported and certainly not working in Windows with VC++ 9
> 
> Wanted to ask if anybody has recommendation of what OmniOrb features I
> need to look for/use for the above (or if there are better alternatives)
> 

I'm not sure you even need the Naming Service.

// Multiple Instances on multiple machines:
interface ReportGenerator {
   // return true on OK, false on currently busy
   // ReportDispatcher can call al registered servers until one returns true
   bool StartProcessingRequest(in request_id id);
}

// Dispatcher Service, starting the report generation.
// Servers look it up via corbaloc.
interface ReportDispatcher {
   void RegisterGenerator(in ReportGenerator r);
   void UnregisterGenerator(in ReportGenerator r);

   void RequestFinished(in request_id id);
}


br,
Martin



More information about the omniORB-list mailing list