[prev in list] [next in list] [prev in thread] [next in thread] 

List:       omniorb-list
Subject:    RE: [omniORB] Help passing objects
From:       Dietmar May <dcmay () object-workshops ! com>
Date:       1999-06-28 18:30:55
[Download RAW message or body]

Duncan,

> Another point is that you should really return person->_this(), rather
> than duplicating the implementation object. It is only an omniORB
> implementation artifact that _duplicate() works in this situation. It
> will no longer work when the POA comes along.

I'll admit, I'm confused. It would be greatly appreciated if you could clear a few \
things up.

Given an object factory scenario: 


  interface MyInterface;
  interface MyFactory
  {
    MyInterface make_it ();
  };

  MyInterface_ptr _sk_MyFactory::make_it ()
  {
    MyInterface_ptr p_my = new MyInterfaceImpl;
    p_boa->obj_is_ready(p_my);
  #if 0 //what's the difference?
    return MyInterface::_duplicate(p_my);
  #else
    return p_my->_this();   //not in a member function
  #endif
  }


_this() returns a duplicated object reference for the target object (or more \
precisely, it returns an object reference upon which CORBA::release() must be \
called). _duplicate() accepts an object reference of the target object and returns an \
object reference upon which CORBA::release() must be called. So what is the \
difference between using _this() and _duplicate()?

It seems there are a total of five lines describing "_this()" in the CORBA 2.0 spec! \
Has CORBA 2.2 changed this? Per CORBA 2.0 sec 18.2, it appears that _this() is only \
guaranteed to be available "from within the body of a member function". Also, per \
18.4.5, "the method code may not assume where these two routines [_boa() and _this()] \
are defined." 

Within an object factory, what is the impact of these references upon its suggested \
use for duplicating a returned reference? That is, since the object is created in a \
method belonging to a difference interface, why is _this() a better choice than \
_duplicate()?

I can see how in a tie situation, for example, it would be quite inappropriate to \
return _duplicate(this), because 'this' isn't an ORB-derived class. One would have to \
have some other method available, such as _this(). But in an object factory creator \
method, the code has a pointer to the actual, ORB-derived object, since the factory \
method just created it.

Also, what makes a difference with the POA?

Regards,
Dietmar


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic