summaryrefslogtreecommitdiff
path: root/TAO/tao/DLL_ORB.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/DLL_ORB.cpp')
-rw-r--r--TAO/tao/DLL_ORB.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/TAO/tao/DLL_ORB.cpp b/TAO/tao/DLL_ORB.cpp
new file mode 100644
index 00000000000..6873a3a5276
--- /dev/null
+++ b/TAO/tao/DLL_ORB.cpp
@@ -0,0 +1,181 @@
+// -*- C++ -*-
+
+#include "tao/DLL_ORB.h"
+#include "tao/TAO_Singleton_Manager.h"
+#include "tao/Environment.h"
+#include "tao/debug.h"
+#include "tao/CORBA_methods.h"
+
+#include "ace/ARGV.h"
+#include "ace/Argv_Type_Converter.h"
+
+ACE_RCSID (tao,
+ DLL_ORB,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/DLL_ORB.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_DLL_ORB::TAO_DLL_ORB (void)
+ : orb_ ()
+{
+ // Nothing
+}
+
+TAO_DLL_ORB::~TAO_DLL_ORB (void)
+{
+ // Nothing
+}
+
+int
+TAO_DLL_ORB::init (int /*argc*/, ACE_TCHAR *argv[])
+{
+ // This class is deprecated. See the class documentation in
+ // DLL_ORB.h for details explaining why this is so.
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_WARNING,
+ ACE_TEXT ("TAO (%P|%t) - The TAO_DLL_ORB class is ")
+ ACE_TEXT ("deprecated. See the class documentation\n")
+ ACE_TEXT ("TAO (%P|%t) - `tao/DLL_ORB.h' for details ")
+ ACE_TEXT ("explaining why this is so.\n")));
+ }
+
+ // Make sure TAO's singleton manager is initialized, and set to not
+ // register itself with the ACE_Object_Manager since it is under the
+ // control of the Service Configurator.
+ int register_with_object_manager = 0;
+
+ if (TAO_Singleton_Manager::instance ()->init (register_with_object_manager)
+ == -1)
+ {
+ return -1; // No exceptions yet.
+ }
+
+ ACE_TRY_NEW_ENV
+ {
+ ACE_ARGV new_argv;
+
+ if (new_argv.add (ACE_TEXT ("dummy")) == -1
+ || new_argv.add (argv) == -1)
+ return -1;
+
+ int new_argc = new_argv.argc ();
+
+#if defined (ACE_HAS_WINCE) || defined (ACE_USES_WCHAR)
+ {
+ // Copy command line parameter from new_argv.
+ ACE_Argv_Type_Converter command_line(new_argc, new_argv.argv());
+
+ // Initialize the ORB.
+ this->orb_ = CORBA::ORB_init (command_line.get_argc(),
+ command_line.get_ASCII_argv(),
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ // command_line will be destroyed here and new_argv will be updated if necessary
+ }
+#else
+ // Initialize the ORB.
+ this->orb_ = CORBA::ORB_init (new_argc,
+ new_argv.argv (),
+ ""
+ ACE_ENV_ARG_PARAMETER);
+#endif // ACE_HAS_WINCE
+
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (this->orb_.in ()))
+ return -1;
+ }
+ ACE_CATCHANY
+ {
+ if (TAO_debug_level >= 4)
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "TAO_DLL_ORB::init");
+
+ return -1;
+ }
+ ACE_ENDTRY;
+
+#if defined (ACE_HAS_THREADS)
+ // Become an Active Object so that the ORB
+ // will execute in a separate thread.
+ return this->activate ();
+#else
+ return 0;
+#endif /* ACE_HAS_THREADS */
+}
+
+int
+TAO_DLL_ORB::fini (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (TAO_Singleton_Manager::instance ()->fini () == -1)
+ return -1;
+ }
+ ACE_CATCHANY
+ {
+ if (TAO_debug_level >= 4)
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "TAO_DLL_ORB::fini");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+int
+TAO_DLL_ORB::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ // Run the ORB event loop in its own thread.
+ this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ if (TAO_debug_level >= 4)
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "TAO_DLL_ORB::svc");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+
+ACE_STATIC_SVC_DEFINE (TAO_DLL_ORB,
+ ACE_TEXT ("DLL_ORB"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_DLL_ORB),
+ ACE_Service_Type::DELETE_THIS
+ | ACE_Service_Type::DELETE_OBJ,
+ 0)
+
+ACE_FACTORY_DEFINE (TAO, TAO_DLL_ORB)
+
+
+
+// Template instantiations necessary for use when dynamically load the
+// TAO_DLL_ORB.
+
+#if 0
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+
+template class ACE_Dynamic_Service<TAO_DLL_ORB>;
+
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+
+#pragma instantiate ACE_Dynamic_Service<TAO_DLL_ORB>
+
+#endif
+
+#endif /*if 0*/