summaryrefslogtreecommitdiff
path: root/TAO/examples/POA/FindPOA/FindPOA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/POA/FindPOA/FindPOA.cpp')
-rw-r--r--TAO/examples/POA/FindPOA/FindPOA.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/TAO/examples/POA/FindPOA/FindPOA.cpp b/TAO/examples/POA/FindPOA/FindPOA.cpp
new file mode 100644
index 00000000000..4af3e001392
--- /dev/null
+++ b/TAO/examples/POA/FindPOA/FindPOA.cpp
@@ -0,0 +1,134 @@
+// $Id$
+
+//===========================================================================
+//
+// = LIBRARY
+// TAO/tests/POA/FindPOA
+//
+// = FILENAME
+// FindPOA.cpp
+//
+// = DESCRIPTION
+// This Program tests the find_POA method of a POA.
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+//===========================================================================
+
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/PortableServer/Adapter_Activator.h"
+
+#include "tao/ORB.h"
+#include "ace/Log_Msg.h"
+#include "ace/SString.h"
+
+ACE_RCSID (FindPOA,
+ FindPOA,
+ "$Id$")
+
+void
+find_non_existant_POA (PortableServer::POA_ptr parent,
+ const char *child_poa_name,
+ int activate)
+{
+ bool expected_exception_raised = false;
+
+ // New environment.
+ try
+ {
+ // Try to find child poa.
+ PortableServer::POA_var child_poa =
+ parent->find_POA (child_poa_name,
+ activate);
+ }
+ catch (const PortableServer::POA::AdapterNonExistent& )
+ {
+ expected_exception_raised = true;
+ }
+
+ if (!expected_exception_raised)
+ ACE_ERROR ((LM_ERROR, "ERROR: Caught incorrect exception\n"));
+ else
+ ACE_DEBUG ((LM_DEBUG, "Caught correct exception\n"));
+}
+
+int
+main (int argc, char **argv)
+{
+
+ // Initialize the ORB
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ // Obtain the RootPOA.
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("RootPOA");
+
+ // Narrow Object reference to RootPOA to a POA reference.
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (obj.in());
+
+ // Get the POAManager of the RootPOA.
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager ();
+
+ poa_manager->activate ();
+
+ // Try to find a non-existant POA. Since the Adapter Activator
+ // has not been installed yet, this call should fail.
+ find_non_existant_POA (root_poa.in (),
+ "firstPOA",
+ 1);
+
+ // Get a TAO_Adapter_Activator reference
+ PortableServer::AdapterActivator_var activator =
+ new TAO::Portable_Server::Adapter_Activator (poa_manager.in ());
+
+ // Register the TAO_Adapter_Activator reference to be the RootPOA's
+ // Adapter Activator.
+ root_poa->the_activator (activator.in ());
+
+ // Try to find a childPOA of RootPOA named firstPOA
+ ACE_CString name = "firstPOA";
+ PortableServer::POA_var first_poa =
+ root_poa->find_POA (name.c_str (),
+ 1);
+
+ name = "secondPOA";
+ PortableServer::POA_var second_poa =
+ first_poa->find_POA (name.c_str (),
+ 1);
+
+ // Try to find a non-existant POA. Even though the Adapter
+ // Activator has been installed, this call should fail because
+ // the activate (if not found) flag is 0.
+ find_non_existant_POA (root_poa.in (),
+ "thirdPOA",
+ 0);
+
+ // Get the names of all the POAs
+ CORBA::String_var root_poa_name =
+ root_poa->the_name ();
+
+ CORBA::String_var first_poa_name =
+ first_poa->the_name ();
+
+ CORBA::String_var second_poa_name =
+ second_poa->the_name ();
+
+ ACE_DEBUG ((LM_DEBUG,
+ "%s\n%s\n%s\n",
+ root_poa_name.in (),
+ first_poa_name.in (),
+ second_poa_name.in ()));
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("Exception caught");
+ return -1;
+ }
+
+ return 0;
+}