[omniORB] TIE approach and reference counting

Hautesserres, Thomas thomas.hautesserres@managedstorage.fr
Mon Feb 3 13:04:02 2003


Hi,

I am using the TIE approach to implement my servant objects, but as I have
just discovered, the generated _tie classes do not inherit from
PortableServer::RefCountServantBase but only from
PortableServer::ServantBase. As one can guess, the main difference is that
when one of my TIEd servant is deactivated from its POA, it is not
automatically deleted.

So here are my two questions:

- Why are the generated _tie classes not inheriting from
RefCountServantBase? Is that a question of CORBA-standard complicance, or is
there any good reason not to do that? In my opinion, inheriting from
PortableServer::RefCountServantBase would be OK as one can use the "r" (for
release) parameter in the _tie class constructor to indicate that the
associated object should not be released, thus having exactly the same
behaviour as now.

- At the end of this message is what I have done to force my TIE servant to
use the RefCountServantBase. Is here any other (more standard) way to
achieve that?

Thanks in advance,

Thomas

--------------------------------------

// Server side implementation of the IDL interface dn::MyInterface
// As we are using the TIE approach, no specific inheritance is declared.
class MyServerImpl
{
public:
  // ...
protected:
  // Create and return a new servant associated with this implementation.
  // The returned object will the activated in the POA.
  PortableServer::Servant getServant()
    { return new MyTIEServant (this); }

private:
  // Private servant class: Inherit from both the _tie class and
RefCountBaseClass.
  // Note: using public virtual inheritance doesn't compile with VC++.
  class MyTIEServant 
    : public POA_dn::MyInterface_tie<MyServerImpl>,
      public PortableServer::RefCountServantBase
  {
  public:
    MyTIEServant (MyServerImpl *impl)
      : POA_dn::MyInterface_tie<MyServerImpl>(impl) {}
  };

};