1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#!/usr/bin/env python
import sys
from omniORB import CORBA, PortableServer
# Import the stubs for the Naming service
import CosNaming
# Import the stubs and skeletons for the Example module
import Example, Example__POA
# Define an implementation of the Echo interface
class Echo_i (Example__POA.Echo):
def echoString(self, mesg):
print "echoString() called with message:", mesg
return mesg
# Initialise the ORB
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
# Find the root POA
poa = orb.resolve_initial_references("RootPOA")
# Create an instance of Echo_i
ei = Echo_i()
# Create an object reference, and implicitly activate the object
eo = ei._this()
# 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 Echo object to the test context
name = [CosNaming.NameComponent("ExampleEcho", "Object")]
try:
testContext.bind(name, eo)
print "New ExampleEcho object bound"
except CosNaming.NamingContext.AlreadyBound:
testContext.rebind(name, eo)
print "ExampleEcho binding already existed -- rebound"
# Note that is should be sufficient to just call rebind() without
# calling bind() first. Some Naming service implementations
# incorrectly raise NotFound if rebind() is called for an unknown
# name, so we use the two-stage approach above
# Activate the POA
poaManager = poa._get_the_POAManager()
poaManager.activate()
# Everything is running now, but if this thread drops out of the end
# of the file, the process will exit. orb.run() just blocks until the
# ORB is shut down
orb.run()
|