summaryrefslogtreecommitdiff
path: root/TAO/tests
diff options
context:
space:
mode:
authormk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-04-07 23:25:30 +0000
committermk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-04-07 23:25:30 +0000
commit942fe64f7d5f768800004b84259b04154d0d4a19 (patch)
tree4b4ff7f7fe031f8e5668722d352d1b6e76225efc /TAO/tests
parentf9a715b11e3da34c214703b3c7435f2b763549c1 (diff)
downloadATCD-942fe64f7d5f768800004b84259b04154d0d4a19.tar.gz
Tue Apr 7 18:25:09 1998 Michael Kircher <mk1@cs.wustl.edu>
Diffstat (limited to 'TAO/tests')
-rw-r--r--TAO/tests/Quoter/QuoterFactoryFinder.cpp244
-rw-r--r--TAO/tests/Quoter/QuoterFactoryFinder.h42
2 files changed, 286 insertions, 0 deletions
diff --git a/TAO/tests/Quoter/QuoterFactoryFinder.cpp b/TAO/tests/Quoter/QuoterFactoryFinder.cpp
new file mode 100644
index 00000000000..b6aeb92817e
--- /dev/null
+++ b/TAO/tests/Quoter/QuoterFactoryFinder.cpp
@@ -0,0 +1,244 @@
+// $Id$
+// ============================================================================
+//
+// = FILENAME
+// QuoterFactoryFinder.cpp
+//
+// = DESCRIPTION
+// A Factory Finder for the Quoter example. This example conforms
+// to the CosLifeCycle Factory Finder notion.
+//
+// = AUTHOR
+// Michael Kircher (mk1@cs.wustl.edu)
+//
+// ============================================================================
+
+#include "ace/Get_Opt.h"
+#include "tao/corba.h"
+#include "QuoterFactoryFinder.h"
+
+static const char usage [] =
+"[-? |\n"
+" [-O[RBport] ORB port number]]";
+
+
+// Constructor
+QuoterFactoryFinder_i::QuoterFactoryFinder_i () {
+
+ TAO_TRY {
+
+ // get a reference to the ORB
+ CORBA::ORB_var orb_var = TAO_ORB_Core_instance()->orb();
+ TAO_CHECK_ENV;
+
+ // Get the Naming Service object reference.
+ CORBA::Object_var namingObj_var =
+ orb_var->resolve_initial_references ("NameService");
+ TAO_CHECK_ENV;
+
+ 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
+ CosNaming::NamingContext_var namingContext_var =
+ CosNaming::NamingContext::_narrow (namingObj_var.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // get the IDL_Quoter naming context
+ CosNaming::Name quoterContextName (1); // max = 1
+ quoterContextName.length(1);
+ quoterContextName[0].id = CORBA::string_dup ("IDL_Quoter");
+ CORBA::Object_var quoterNamingObj_var =
+ namingContext_var->resolve (quoterContextName, TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ quoterNamingContext_var_ =
+ CosNaming::NamingContext::_narrow (quoterNamingObj_var.in (),
+ TAO_TRY_ENV);
+
+
+ // bind the QuoterFactory Finder to the IDL_Quoter naming context
+
+ CosNaming::Name quoterFactoryFinderName_ (1);
+ quoterFactoryFinderName_.length (1);
+ quoterFactoryFinderName_[0].id = CORBA::string_dup ("QuoterFactoryFinder");
+ this->quoterNamingContext_var_->bind (quoterFactoryFinderName_,
+ (CORBA::Object *)this,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("SYS_EX");
+ }
+ TAO_ENDTRY;
+}
+
+// Destructor
+QuoterFactoryFinder_i::~QuoterFactoryFinder_i () {
+}
+
+
+CosLifeCycle::Factories *
+QuoterFactoryFinder_i::find_factories (const CosLifeCycle::Key & factory_key,
+ CORBA::Environment &_env_there) {
+
+ CORBA::Environment env_here;
+
+ // fill in the name of the Quoter Factory
+ CosNaming::Name factoryName (1); // max = 1
+ factoryName.length(1);
+ factoryName[0].id = CORBA::string_dup ("quoter_factory");
+
+
+ // Try to get a reference to a Quoter Factory
+ CORBA::Object_var quoterObject_var =
+ quoterNamingContext_var_->resolve (factoryName, env_here);
+
+ // see if there is an exception, if yes then throw the NoFactory exception
+ if (env_here.exception () != 0) {
+
+ // throw a NoFactory exception
+ _env_there.exception (new CosLifeCycle::NoFactory (factory_key));
+ return 0;
+ }
+
+ // Check if it is a valid Quoter Factory reference
+ if (CORBA::is_nil (quoterObject_var.in())) {
+
+ // throw a NoFactory exception
+ _env_there.exception (new CosLifeCycle::NoFactory (factory_key));
+ return 0;
+ }
+
+ // were able to get a reference to Quoter Factory
+ else {
+
+ // create a sequence of factories object
+ CosLifeCycle::Factories *factories_ptr = new CosLifeCycle::Factories (1);
+ // using the Naming Service only one reference is available
+ factories_ptr->length (1);
+
+ // dereference the Object pointer
+ (*factories_ptr)[0] = quoterObject_var;
+
+ ACE_DEBUG ((LM_DEBUG,"Have reference to a Quoter Factory.\n"));
+
+ return factories_ptr;
+ }
+}
+
+// Function get_options.
+
+static u_int
+get_options (int argc,
+ char *argv [])
+{
+ // We need the 'O' in get_opt() because we also want to have ORB
+ // parameters, they all start with 'O'.
+ ACE_Get_Opt get_opt (argc, argv, "O?");
+ int opt;
+
+ while ((opt = get_opt ()) != EOF)
+ {
+ switch (opt)
+ {
+ case '?':
+ ACE_DEBUG ((LM_DEBUG,
+ "Usage: %s %s\n",
+ argv[0], usage));
+ ACE_OS::exit (0);
+ break;
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%s: unknown arg, -%c\n"
+ "Usage: %s %s\n",
+ argv[0], char(opt),
+ argv[0],
+ usage),
+ 1);
+ }
+ }
+
+ if (argc != get_opt.optind)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%s: too many arguments\n"
+ "Usage: %s %s\n",
+ argv[0],
+ argv[0],
+ usage),
+ 1);
+
+ return 0;
+}
+
+// function main
+
+int
+main (int argc, char *argv [])
+{
+ TAO_TRY
+ {
+ // Initialize ORB.
+
+ CORBA::ORB_var orb_var = CORBA::ORB_init (argc,
+ argv,
+ "internet",
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // Connect to the RootPOA.
+ CORBA::Object_var poa_object = orb_var->resolve_initial_references("RootPOA");
+ if (CORBA::is_nil (poa_object.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Unable to initialize the POA.\n"),
+ 1);
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in (), TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // get the Options
+ if (get_options (argc, argv))
+ ACE_OS::exit (-1);
+
+ // instantiate the QuoterFactoryFinder
+ QuoterFactoryFinder_i *quoterFactoryFinder_i_ptr_;
+ ACE_NEW_RETURN (quoterFactoryFinder_i_ptr_,
+ QuoterFactoryFinder_i (),
+ -1);
+
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Quoter Factory Finder is instantiated.\n"));
+
+ // The POA Manager has to be activated before starting the ORB
+ // event loop.
+ poa_manager->activate (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // Run the ORB.
+ if (orb_var->run () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "CORBA::ORB::run"),
+ -1);
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("SYS_EX");
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Quoter/QuoterFactoryFinder.h b/TAO/tests/Quoter/QuoterFactoryFinder.h
new file mode 100644
index 00000000000..cf3a166f8a0
--- /dev/null
+++ b/TAO/tests/Quoter/QuoterFactoryFinder.h
@@ -0,0 +1,42 @@
+// $Id$
+// ============================================================================
+//
+// = FILENAME
+// QuoterFactoryFinder.cpp
+//
+// = DESCRIPTION
+// Factory Finder for the Quoter example
+//
+// = AUTHOR
+// Michael Kircher (mk1@cs.wustl.edu)
+//
+// ============================================================================
+
+#include "quoterS.h"
+
+#if !defined (QUOTER_FACTORY_FINDER_H)
+#define QUOTER_FACTORY_FINDER_H
+
+
+class QuoterFactoryFinder_i : public POA_Stock::QuoterFactoryFinder {
+ // = TILE
+ // A CosLifeCycle conforming Factory Finder for the Quoter
+ // example. It uses the Naming Service to find a fitting factory.
+
+public:
+ QuoterFactoryFinder_i ();
+ ~QuoterFactoryFinder_i ();
+
+ virtual CosLifeCycle::Factories * find_factories (
+ const CosLifeCycle::Key & factory_key,
+ CORBA::Environment &_tao_environment);
+ // Returns a squence of Factories if factories matching the factory_key
+ // were found. If no factory was found, then the NoFactory exception,
+ // defined in CosLifeCycle, is raised.
+
+private:
+ CosNaming::NamingContext_var quoterNamingContext_var_;
+ // Hold a reference to the Quoter example naming context
+};
+
+#endif // QUOTER_FACTORY_FINDER_H