00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <mpcl/net/corba/exceptions.hh>
00027 #include <mpcl/net/corba/orb.hh>
00028
00029
00030
00031
00032
00033
00034 mpcl::net::corba::TOrb::
00035 TOrb (int iPARAMETER_COUNT, const char** ppkcPARAMETERS) :
00036 gIsColocated (false) ,
00037 gHasNameService (false) ,
00038 qtOrb () ,
00039 qtPoa () ,
00040 qtPoaManager () ,
00041 qtRootNamingContext ()
00042 {
00043
00044 CORBA::Object_var qtObject;
00045
00046
00047
00048
00049 qtOrb = CORBA::ORB_init (iPARAMETER_COUNT, const_cast<char**> (ppkcPARAMETERS));
00050 qtObject = qtOrb->resolve_initial_references ("RootPOA");
00051 qtPoa = PortableServer::POA::_narrow (qtObject);
00052 qtPoaManager = qtPoa->the_POAManager();
00053
00054 try
00055 {
00056 qtObject = qtOrb->resolve_initial_references ("NameService");
00057 qtRootNamingContext = CosNaming::NamingContext::_narrow (qtObject);
00058 gHasNameService = true;
00059 }
00060
00061
00062
00063 catch (const CORBA::ORB::InvalidName&) {}
00064 catch (const CORBA::SystemException&) {}
00065
00066
00067 }
00068
00069
00070 CosNaming::NamingContext_var mpcl::net::corba::TOrb::
00071 bindContext ( CosNaming::NamingContext_var& rqtNAMING_CONTEXT ,
00072 const text::TString& rkyCONTEXT_NAME )
00073 {
00074
00075 CosNaming::NamingContext_var qtNamingContext;
00076
00077 if ( !gHasNameService )
00078 {
00079 throw TNoNameServiceException ("can not bind naming context", __FILE__, __LINE__);
00080 }
00081 else
00082 {
00083 CosNaming::Name tContextName;
00084
00085 tContextName.length (1);
00086 tContextName [0].id = rkyCONTEXT_NAME.c_str();
00087 tContextName [0].kind = "";
00088 try
00089 {
00090
00091
00092
00093 qtNamingContext = rqtNAMING_CONTEXT->bind_new_context (tContextName);
00094 }
00095 catch (const CosNaming::NamingContext::AlreadyBound&)
00096 {
00097
00098
00099
00100
00101
00102 CORBA::Object_var qtObject = rqtNAMING_CONTEXT->resolve (tContextName);
00103
00104 qtNamingContext = CosNaming::NamingContext::_narrow (qtObject);
00105 if( CORBA::is_nil (qtNamingContext) )
00106 {
00107 throw TNarrowFailedException ("on naming context", __FILE__, __LINE__);
00108 }
00109 }
00110 }
00111 return qtNamingContext;
00112
00113 }