[omniORB] Problem with omniORBpy and NamingService
marc
marc@xena.nekhem.fr
Wed, 25 Jul 2001 13:33:15 +0000
I use omniORBpy with omniORB3 on Linux. I work with the NamingService. If I put the server and the client on the local host, it ru very well. But if I put the server on a remote host on the same network, the exception "omniORB.CORBA.COMM_FAILURE: Minor: 32, Completed: COMPLETED_NO." from the client, appears. I tried to change the configuration in the omniorb.cfg file, but I always obtained the same result.
I don't understand why it's not working.
I put my scripts below:
##################### IDL
module User {
interface Information {
readonly attribute string name;
readonly attribute string surname;
attribute float salary;
string getName();
string getSurname();
float getSalary();
float increaseSalary( in float inc_value );
float decreaseSalary( in float dec_value );
};
};
##################### Server.py
import sys
from omniORB import CORBA, PortableServer
import User, User__POA
import CosNaming
# Define implementation of the Information interface
class Information_s ( User__POA.Information ) :
def __init__ ( self ):
self.name = "Eric"
self.surname = "Bianchi"
self.salary = 100.0
def getName ( self ):
print """getName"""
return self.name
def getSurname ( self ):
print """getSurName"""
return self.surname
def getSalary ( self ):
print """getSalary"""
return float(self.salary)
def increaseSalary ( self, inc_value ):
print """increaseSalary"""
self.salary = self.salary + inc_value
return float(self.salary)
def decreaseSalary ( self, dec_value ):
print """decreaseSalary"""
self.salary = self.salary - dec_value
return float(self.salary)
# Initialise the ORB:
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
poa = orb.resolve_initial_references("RootPOA")
# Create an instance of Information_s and an Information object reference:
ifts = Information_s()
ift = ifts._this()
print """New Information object has been created"""
print ift
# Obtain a reference to the root naming context:
obj = orb.resolve_initial_references("NameService")
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
print 'Failed to narrow the root naming context'
sys.exit(1)
# Bind a context named "test.my_context" to the root context:
name = [CosNaming.NameComponent("test", "my_context")]
try:
testContext = rootContext.bind_new_context(name)
print "New test context bound"
except CosNaming.NamingContext.AlreadyBound, ex:
print "Test context already exists"
obj = rootContext.resolve(name)
testContext = obj._narrow(CosNaming.NamingContext)
if testContext is None:
print "test.mycontext exists but is not a NamingContext"
sys.exit(1)
# Bind the Information object to the test context:
name = [CosNaming.NameComponent("UserInformation", "Object")]
try:
testContext.bind(name, ift)
print "New UserInformation object bound"
except CosNaming.NamingContext.AlreadyBound:
testContext.rebind(name, ift)
print "UserInformation binding already existed -- rebound"
# Activate the POA
poaManager = poa._get_the_POAManager()
poaManager.activate()
# Block for ever (or until the ORB is shut down)
orb.run()
#################### Client.py
import sys
from omniORB import CORBA
import User
import CosNaming
# Initialise the ORB
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
# Obtain a reference to the root naming context
obj = orb.resolve_initial_references("NameService")
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
print "Failed to narrow the root naming context"
sys.exit(1)
# Resolve the name "test.my_context/UserInformation.Object"
name = [CosNaming.NameComponent("test", "my_context"),
CosNaming.NameComponent("UserInformation", "Object")]
try:
obj = rootContext.resolve(name)
except CosNaming.NamingContext.NotFound, ex:
print "Name not found"
sys.exit(1)
# Narrow the object to an User::Information
ift = obj._narrow(User.Information)
print ift
if ift is None:
print "Object reference is not an User::Information"
sys.exit(1)
#Invoke getName operation
print 'the user is :\n'
name = ift.getName()
print 'Name: ', name
surname = ift.getSurname()
print 'Surname: ', surname
salary = ift.getSalary()
print 'Salary: ', salary
x = ''
while not x:
x = int(raw_input('Increase or decrease the salary? 1 or 2:'))
if x == 1:
y = ''
while not y:
y = float(raw_input('salary increased value;\n'))
salary = ift.increaseSalary(y)
print 'The new salary is:\n', salary
if x == 2:
y = ''
while not y:
y = float(raw_input('salary decreased value;\n'))
salary = ift.decreaseSalary(y)
print 'The new salary is:\n', salary
######################################################################
The client answer me:
Traceback (innermost last):
File "client.py", line 36, in ?
name = ift.getName()
File "User_idl.py", line 67, in getName
return _omnipy.invoke(self, "getName", _0_User.Information._d_getName, args)
omniORB.CORBA.COMM_FAILURE: Minor: 32, Completed: COMPLETED_NO.
--
Marc
--