[pygtk] ORBit and python

Russell Strong russell at strong.id.au
Wed Sep 27 18:31:51 WST 2006


Thanks everyone, I've raised a bug report at 
http://bugzilla.gnome.org/show_bug.cgi?id=357944

Now, back to learning more about CORBA

Cheers,
Russell

Gustavo J. A. M. Carneiro wrote:
> On Ter, 2006-09-26 at 10:03 +1000, Russell Strong wrote:
>   
>> Hi,
>>
>> I've been pulling my hair out the last couple of days trying to get a 
>> simple python/ORBit example working.
>>
>> The server code ( see below ) show the following error
>> Traceback (most recent call last):
>>   File "server", line 14, in increment
>>     self.count += 1
>> AttributeError: 'Counter' object has no attribute 'count'
>>
>> Adding a line print dir(self) to increment shows there really is no 
>> count. Huh???
>>
>> The client ( see below ) shows:
>> Traceback (most recent call last):
>>   File "client", line 13, in ?
>>     counter.increment()
>> CORBA.UNKNOWN
>>
>> HELP !!!
>>
>> Client Code
>> ----------------
>>
>> #!/usr/bin/env python
>>
>> import ORBit
>> ORBit.load_file ('Test.idl')
>> import CORBA, Test
>>
>> orb = CORBA.ORB_init()
>> ior = open('/tmp/orbit-python.ior').readline()
>> counter = orb.string_to_object(ior)
>>
>> for i in xrange(10001):
>>         try:
>>                 counter.increment()
>>         except Test.Counter, data:
>>                 print 'Overflow : ', data.count
>>
>>
>> Server Code
>> ----------------
>>
>> #!usr/bin/env python
>>
>> import ORBit
>> ORBit.load_file('Test.idl')
>> import CORBA, Test, Test__POA
>>
>> class Counter(Test__POA.Counter):
>>
>>         def __init__(self):
>>                 Test__POA.Counter.__init__(self)
>>                 self.count = 0
>>
>>         def increment(self):
>>                 self.count += 1
>>                 if self.count > 10000:
>>                         e = Test.TestInterface.Overflow()
>>                         e.count = self.count
>>                         raise Test.TestInterface.Overflow, e
>>
>> orb = CORBA.ORB_init()
>> poa = orb.resolve_initial_references("RootPOA")
>>     
>
> If you change this code:
>
>   
>> ref = Counter()._this()
>>     
>
> to this:
>
>   
>> counter = Counter()
>> ref = counter._this()
>>     
>
> Then it works (after you fix the rest of the code,
> s/Test.TestInterface.Overflow/Test.Counter.Overflow/).
>
> The reason is that this expression "Counter()._this()" creates a
> Counter() servant, takes a CORBA object reference to it, but then the
> servant's reference count drops to zero and the servant is deallocated
> and deactivated.  So the client ends up receiving a reference to a dead
> object.
>
> I'm not completely sure yet, but this looks like a PyORBit bug.  Could
> you open a bug report in bugzilla?  Thanks.
>
>   



More information about the pygtk mailing list