diff options
Diffstat (limited to 'trunk/TAO/examples/Quoter/Generic_Factory.cpp')
-rw-r--r-- | trunk/TAO/examples/Quoter/Generic_Factory.cpp | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/trunk/TAO/examples/Quoter/Generic_Factory.cpp b/trunk/TAO/examples/Quoter/Generic_Factory.cpp new file mode 100644 index 00000000000..eb1bfe506ab --- /dev/null +++ b/trunk/TAO/examples/Quoter/Generic_Factory.cpp @@ -0,0 +1,309 @@ +// $Id$ + +// ============================================================================ +// +// = FILENAME +// Generic_Factory.cpp +// +// = DESCRIPTION +// The server for the GenericFactory for the quoter example. +// +// = AUTHOR +// Michael Kircher (mk1@cs.wustl.edu) +// +// ============================================================================ + +#include "Generic_Factory.h" + +#include "orbsvcs/LifeCycleServiceC.h" + +ACE_RCSID (Quoter, + Generic_Factory, + "$Id$") + +Quoter_Generic_Factory_Server::Quoter_Generic_Factory_Server (void) +: use_LifeCycle_Service_ (0), + debug_level_ (1) +{ +} + +Quoter_Generic_Factory_Server::~Quoter_Generic_Factory_Server (void) +{ + ACE_TRY_NEW_ENV + { + // Unbind the Quoter Factory Finder. + CosNaming::Name generic_Factory_Name (2); + generic_Factory_Name.length (2); + generic_Factory_Name[0].id = CORBA::string_dup ("IDL_Quoter"); + generic_Factory_Name[1].id = CORBA::string_dup ("Quoter_Generic_Factory"); + if (!CORBA::is_nil (this->quoterNamingContext_var_.in ())) + this->quoterNamingContext_var_->unbind (generic_Factory_Name ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::SystemException, sysex) + { + ACE_PRINT_EXCEPTION (sysex, "System Exception"); + } + ACE_CATCH (CORBA::UserException, userex) + { + ACE_PRINT_EXCEPTION (userex, "User Exception"); + } + ACE_ENDTRY; +} + +int +Quoter_Generic_Factory_Server::init (int argc, + char *argv[] + ACE_ENV_ARG_DECL) +{ + const char *exception_message = "Null Message"; + + ACE_TRY + { + int result = 0; + // Initialize the ORB Manager + exception_message = "While initing the orb_manager"; + result = this->orb_manager_.init (argc, argv ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (result == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "init"), -1); + + // Activate the POA manager + exception_message = "While activating the POA manager"; + result = this->orb_manager_.activate_poa_manager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (result == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "activate_poa_manager"), -1); + + // Copy them, because parse_args expects them there. + this->argc_ = argc; + this->argv_ = argv; + this->parse_args (); + + ACE_NEW_RETURN (this->quoter_Generic_Factory_i_ptr_, + Quoter_Generic_Factory_i(this->debug_level_), + -1); + + // Activate the object. + exception_message = "While activating the Generic Factory"; + CORBA::String_var str = + this->orb_manager_.activate (this->quoter_Generic_Factory_i_ptr_ + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + // Print the IOR. + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, "Generic_Factory: IOR is: <%s>\n", str.in ())); + + // Register the Quoter GenericFactory with the Naming Service. + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, + "Generic_Factory: Trying to get a reference to the Naming Service.\n")); + + // Get the Naming Service object reference. + exception_message = "While getting the Naming Service Reference"; + CORBA::Object_var namingObj_var = + orb_manager_.orb()->resolve_initial_references ("NameService" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (namingObj_var.in ())) + ACE_ERROR ((LM_ERROR, + " (%P|%t) Unable get the Naming Service.\n")); + + // Narrow the object reference to a Naming Context. + exception_message = "While narrowing the Naming Context"; + CosNaming::NamingContext_var namingContext_var = + CosNaming::NamingContext::_narrow (namingObj_var.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (namingContext_var.in ())) + ACE_ERROR ((LM_ERROR, + " (%P|%t) Unable get the Naming Service.\n")); + + + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, + "Generic_Factory: Have a proper reference to the Naming Service.\n")); + + // Get the IDL_Quoter naming context. + CosNaming::Name quoterContextName (1); // max = 1 + quoterContextName.length (1); + quoterContextName[0].id = CORBA::string_dup ("IDL_Quoter"); + + exception_message = "While resolving the Quoter"; + CORBA::Object_var quoterNamingObj_var = + namingContext_var->resolve (quoterContextName + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + exception_message = "While narrowing the Quoter"; + quoterNamingContext_var_ = + CosNaming::NamingContext::_narrow (quoterNamingObj_var.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, + "Generic_Factory: Have a proper reference to the Quoter Naming Context.\n")); + + // Bind the Quoter GenericFactory to the IDL_Quoter naming + // context. + CosNaming::Name quoter_Generic_Factory_Name (1); + quoter_Generic_Factory_Name.length (1); + quoter_Generic_Factory_Name[0].id = CORBA::string_dup ("Quoter_Generic_Factory"); + + exception_message = "Generic_Factory::_this"; + CORBA::Object_var gf_obj = this->quoter_Generic_Factory_i_ptr_->_this(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + exception_message = "While binding the Generic Factory"; + quoterNamingContext_var_->bind (quoter_Generic_Factory_Name, + gf_obj.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, + "Generic_Factory: Bound the Quoter GenericFactory to the Quoter Naming Context.\n")); + + // now the Quoter GenericFactory is bound to the Naming Context + // the Generic Factory should try to register itself to the closest + // Life Cycle Service is order to be called. + + if (this->use_LifeCycle_Service_) + { + // get the Quoter_Life_Cycle_Service + CosNaming::Name life_Cycle_Service_Name (1); + life_Cycle_Service_Name.length (1); + life_Cycle_Service_Name[0].id = CORBA::string_dup ("Life_Cycle_Service"); + + exception_message = "While resolving the Life Cycle Service"; + CORBA::Object_var life_Cycle_Service_Obj_var = + namingContext_var->resolve (life_Cycle_Service_Name + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + exception_message = "While narrowing the Life Cycle Service"; + LifeCycleService::Life_Cycle_Service_var life_Cycle_Service_var = + LifeCycleService::Life_Cycle_Service::_narrow (life_Cycle_Service_Obj_var.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, "Generic_Factory: Have a proper reference to Life Cycle Service.\n")); + + exception_message = "While _this on Generic Factory"; + CORBA::Object_var object_var = this->quoter_Generic_Factory_i_ptr_->_this(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + exception_message = "While registering the generic factory"; + life_Cycle_Service_var->register_factory ("Quoter_Generic_Factory", // name + "Bryan 503", // location + "Generic Factory", // description + object_var.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (this->debug_level_ >= 2) + ACE_DEBUG ((LM_DEBUG, + "Generic_Factory: Registered the Quoter GenericFactory to the Life Cycle Service.\n")); + } + + } + ACE_CATCHANY + { + ACE_ERROR ((LM_ERROR, "Quoter_Generic_Factory_Server::init - %s\n", exception_message)); + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Quoter_Generic_Factory_Server::init"); + return -1; + } + ACE_ENDTRY; + + + return 0; +} + +int +Quoter_Generic_Factory_Server::run (ACE_ENV_SINGLE_ARG_DECL) +{ + if (this->debug_level_ >= 1) + ACE_DEBUG ((LM_DEBUG, + "\nQuoter Example: Quoter_Generic_Factory_Server is running\n")); + + orb_manager_.orb()->run (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + return 0; +} + +// Function get_options. + +u_int +Quoter_Generic_Factory_Server::parse_args (void) +{ + ACE_Get_Opt get_opt (this->argc_, this->argv_, "l?d:"); + int opt; + int exit_code = 0; + + while ((opt = get_opt ()) != EOF) + switch (opt) + { + case 'd': // debug flag. + this->debug_level_ = ACE_OS::atoi (get_opt.opt_arg ()); + break; + case 'l': + this->use_LifeCycle_Service_ = 1; + break; + default: + exit_code = 1; + ACE_ERROR ((LM_ERROR, + "%s: unknown arg, -%c\n", + this->argv_[0], char(opt))); + case '?': + ACE_DEBUG ((LM_DEBUG, + "usage: %s" + " [-d] <debug level> - Set the debug level\n" + " [-?] - Prints this message\n" + " [-l] - Use the lifecycle service\n" + "\n", + this->argv_[0])); + ACE_OS::exit (exit_code); + break; + } + return 0; +} + +// function main + +int +main (int argc, char *argv []) +{ + Quoter_Generic_Factory_Server quoter_Generic_Factory_Server; + + ACE_TRY_NEW_ENV + { + if (quoter_Generic_Factory_Server.init (argc, + argv + ACE_ENV_ARG_PARAMETER) == -1) + return 1; + else + { + quoter_Generic_Factory_Server.run (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + } + ACE_CATCH (CORBA::SystemException, sysex) + { + ACE_PRINT_EXCEPTION (sysex, "System Exception"); + return -1; + } + ACE_CATCH (CORBA::UserException, userex) + { + ACE_PRINT_EXCEPTION (userex, "User Exception"); + return -1; + } + ACE_ENDTRY; + return 0; +} |