Locator_Loader.cpp

Go to the documentation of this file.
00001 // Locator_Loader.cpp,v 1.5 2006/03/16 15:53:35 sjiang Exp
00002 
00003 #include "Locator_Loader.h"
00004 #include "ace/Dynamic_Service.h"
00005 #include "ace/Task.h"
00006 
00007 class ImR_Locator_ORB_Runner : public ACE_Task_Base
00008 {
00009 public:
00010   ImR_Locator_ORB_Runner (ImR_Locator_Loader& service)
00011     : service_ (service)
00012   {
00013   }
00014   virtual int svc ()
00015   {
00016     // Block until service_.fini () calls orb->destroy ()
00017     this->service_.run ();
00018     return 0;
00019   }
00020 private:
00021   ImR_Locator_Loader& service_;
00022 };
00023 
00024 ImR_Locator_Loader::ImR_Locator_Loader()
00025 {
00026 }
00027 
00028 int
00029 ImR_Locator_Loader::init (int argc, ACE_TCHAR *argv[])
00030 {
00031   ACE_DECLARE_NEW_CORBA_ENV;
00032   ACE_TRY
00033     {
00034       int err = this->opts_.init (argc, argv);
00035       if (err != 0)
00036         return -1;
00037 
00038       err = this->service_.init (this->opts_ ACE_ENV_ARG_PARAMETER);
00039       ACE_TRY_CHECK;
00040       if (err != 0)
00041         return -1;
00042 
00043       // Create a thread in which to run the service
00044       ACE_ASSERT(this->runner_.get () == 0);
00045       this->runner_.reset(new ImR_Locator_ORB_Runner (*this));
00046       this->runner_->activate ();
00047     }
00048   ACE_CATCHANY
00049     {
00050       return -1;
00051     }
00052   ACE_ENDTRY;
00053   return 0;
00054 }
00055 
00056 int
00057 ImR_Locator_Loader::fini (void)
00058 {
00059   ACE_ASSERT(this->runner_.get () != 0);
00060   ACE_DECLARE_NEW_CORBA_ENV;
00061   ACE_TRY
00062     {
00063       int ret = this->service_.fini (ACE_ENV_SINGLE_ARG_PARAMETER);
00064       ACE_TRY_CHECK;
00065 
00066       this->runner_->wait ();
00067       this->runner_.reset (0);
00068       return ret;
00069     }
00070   ACE_CATCHANY
00071     {
00072     }
00073   ACE_ENDTRY;
00074   return -1;
00075 }
00076 
00077 CORBA::Object_ptr
00078 ImR_Locator_Loader::create_object (CORBA::ORB_ptr,
00079                                   int,
00080                                   ACE_TCHAR**
00081                                   ACE_ENV_ARG_DECL)
00082    ACE_THROW_SPEC ((CORBA::SystemException))
00083 {
00084   ACE_THROW_RETURN (CORBA::NO_IMPLEMENT(), CORBA::Object::_nil ());
00085 }
00086 
00087 int
00088 ImR_Locator_Loader::run(void)
00089 {
00090   ACE_DECLARE_NEW_CORBA_ENV;
00091   ACE_TRY
00092     {
00093       return this->service_.run (ACE_ENV_SINGLE_ARG_PARAMETER);
00094       ACE_TRY_CHECK;
00095     }
00096   ACE_CATCHALL
00097     {
00098       ACE_ERROR((LM_ERROR, "Exception in ImR_Locator_ORB_Runner ()\n"));
00099       return -1;
00100     }
00101   ACE_ENDTRY;
00102 }
00103 
00104 
00105 ACE_FACTORY_DEFINE (Locator, ImR_Locator_Loader)

Generated on Thu Nov 9 13:36:20 2006 for TAO_Implementation_Repository by doxygen 1.3.6