[omniORB] Question about passing arguments to preinvoke()

Michael Shearer mshearer at aastra.com
Tue Jun 13 11:24:44 BST 2006


Hi!

 

I'm trying to figure out a nice and clean way of passing arguments to
the preinvoke primitive when using a CORBA servant locator.  I have an
object that needs two parameters in the constructor when creating the
instance.  Obviously I could add a primitive to initialize this data
separately but ideally I'd like some way of passing the 2 arguments to
the preinvoke.  What I'm doing right now is basically setting 2 member
variables in the servant locator which are used in the preinvoke.  These
2 member variables are currently locked with a mutex as I'm not sure if
the POA ensures that no other object references will be requested before
the previous one has been dispatched. Is that the best I can do or am I
missing something?  Here's what it looks like in a nutshell:

 

Class Line :

public POA_LineInterface,

public PortableServer::RefCountServantBase,

 {

public:

            Line(string mac, string userAgent);

            virtual ~Line();

            

private:

Line();

};

 

class LineMgr :

            public POA_PortableServer::ServantLocator

{



public:

            // CORBA servant locator

            PortableServer::Servant

            preinvoke(const PortableServer::ObjectId& oid,

                PortableServer::POA_ptr adapter, const char* operation,

                PortableServer::ServantLocator::Cookie& the_cookie)

            {

                        lines[macM] = new Line(macM, userAgentM);

                        

                        return lines[macM];

            }

 

            void

            postinvoke(const PortableServer::ObjectId& oid,

                 PortableServer::POA_ptr adapter, const char* operation,

                 PortableServer::ServantLocator::Cookie the_cookie,

                 PortableServer::Servant the_servant)

            {

                        the_servant->_remove_ref();

            }

 

            LinePtr getLine(string mac, string userAgent)

            {

                        mutex.lock();

 

                        macM = mac;

                        userAgentM = userAgent;

 

CORBA::Object_var obj =
root_poaM->create_reference("IDL:LineInterface:1.0");

 

Mutex.unlock();

 

return lines[mac];

}

 

private:

            string macM;

            string userAgentM;

            map<string, LinePtr> lines;

};

 

Note: LinePtr is a reference counting class.

 

I would appreciate any help!

 

Thanks,

 

Mike

 

 

Michael Shearer

New Product Development

Aastra Telecom US, CVX Division

8 Federal Street

Billerica, MA, USA, 01821-3570
* Phone (978) 436-4248

* Fax (978) 436-4233
* Internet Mail mshearer at aastra.com
* Web www.aastra.com

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20060613/85c846df/attachment.htm


More information about the omniORB-list mailing list