TAO_CosNotify_Service Class Reference

A service object for creating the Notify Service Factory. More...

#include <CosNotify_Service.h>

Inheritance diagram for TAO_CosNotify_Service:

Inheritance graph
[legend]
Collaboration diagram for TAO_CosNotify_Service:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_CosNotify_Service (void)
 Constuctor.

virtual ~TAO_CosNotify_Service ()
 Destructor.

virtual int init (int argc, ACE_TCHAR *argv[])
 Init the service from configurator.

virtual void init_service (CORBA::ORB_ptr orb)
 Init the service from driver.

virtual int fini (void)
virtual CosNotifyChannelAdmin::EventChannelFactory_ptr create (PortableServer::POA_ptr default_POA)
 Create the Channel Factory.

virtual void remove (TAO_Notify_EventChannelFactory *ecf)
 Called by the factory when it is destroyed.


Protected Member Functions

virtual void init_i (CORBA::ORB_ptr orb)
 Init the data members.


Private Member Functions

virtual TAO_Notify_Factorycreate_factory ()
 Create the Factory for Notify objects.

virtual TAO_Notify_Buildercreate_builder ()
 Create the Builder for Notify objects.

void set_threads (CosNotification::QoSProperties &qos, int threads)
 Set thread options on .

TAO_Notify_Factoryfactory ()
TAO_Notify_Builderbuilder ()
 Service component for building NS participants.


Private Attributes

ACE_Auto_Ptr< TAO_Notify_Factoryfactory_
 Service component for object factory operations.

ACE_Auto_Ptr< TAO_Notify_Builderbuilder_
 Service component for building NS participants.


Detailed Description

A service object for creating the Notify Service Factory.

Definition at line 37 of file CosNotify_Service.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_CosNotify_Service::TAO_CosNotify_Service void   ) 
 

Constuctor.

Definition at line 20 of file CosNotify_Service.cpp.

00021 {
00022 }

TAO_CosNotify_Service::~TAO_CosNotify_Service  )  [virtual]
 

Destructor.

Definition at line 24 of file CosNotify_Service.cpp.

00025 {
00026 }


Member Function Documentation

TAO_Notify_Builder & TAO_CosNotify_Service::builder  )  [private]
 

Service component for building NS participants.

Definition at line 284 of file CosNotify_Service.cpp.

References ACE_ASSERT, and builder_.

Referenced by create(), and create_builder().

00285 {
00286   ACE_ASSERT( this->builder_.get() != 0 );
00287   return *this->builder_;
00288 }

CosNotifyChannelAdmin::EventChannelFactory_ptr TAO_CosNotify_Service::create PortableServer::POA_ptr  default_POA  )  [virtual]
 

Create the Channel Factory.

Implements TAO_Notify_Service.

Definition at line 265 of file CosNotify_Service.cpp.

References ACE_ENV_ARG_PARAMETER, TAO_Notify_Builder::build_event_channel_factory(), and builder().

00266 {
00267   return this->builder().build_event_channel_factory (poa ACE_ENV_ARG_PARAMETER);
00268 }

TAO_Notify_Builder * TAO_CosNotify_Service::create_builder  )  [private, virtual]
 

Create the Builder for Notify objects.

Reimplemented in TAO_RT_Notify_Service.

Definition at line 253 of file CosNotify_Service.cpp.

References ACE_CHECK_RETURN, ACE_NEW_THROW_EX, and builder().

00254 {
00255   TAO_Notify_Builder* builder = 0;
00256   ACE_NEW_THROW_EX (builder,
00257                     TAO_Notify_Builder (),
00258                     CORBA::NO_MEMORY ());
00259   ACE_CHECK_RETURN (0);
00260 
00261   return builder;
00262 }

TAO_Notify_Factory * TAO_CosNotify_Service::create_factory  )  [private, virtual]
 

Create the Factory for Notify objects.

Reimplemented in TAO_RT_Notify_Service.

Definition at line 239 of file CosNotify_Service.cpp.

References ACE_CHECK_RETURN, ACE_NEW_THROW_EX, and ACE_Dynamic_Service< TYPE >::instance().

00240 {
00241   TAO_Notify_Factory* factory = ACE_Dynamic_Service<TAO_Notify_Factory>::instance ("TAO_Notify_Factory");
00242   if (factory == 0)
00243     {
00244        ACE_NEW_THROW_EX (factory,
00245                          TAO_Notify_Default_Factory (),
00246                          CORBA::NO_MEMORY ());
00247        ACE_CHECK_RETURN (0);
00248     }
00249   return factory;
00250 }

TAO_Notify_Factory & TAO_CosNotify_Service::factory  )  [private]
 

Definition at line 277 of file CosNotify_Service.cpp.

References ACE_ASSERT.

00278 {
00279   ACE_ASSERT( this->factory_.get() != 0 );
00280   return *this->factory_;
00281 }

int TAO_CosNotify_Service::fini void   )  [virtual]
 

Reimplemented from ACE_Shared_Object.

Definition at line 191 of file CosNotify_Service.cpp.

00192 {
00193   return 0;
00194 }

int TAO_CosNotify_Service::init int  argc,
ACE_TCHAR argv[]
[virtual]
 

Init the service from configurator.

Implements TAO_Notify_Service.

Definition at line 29 of file CosNotify_Service.cpp.

References ACE_Arg_Shifter, ACE_DEBUG, ACE_ERROR, ACE_TCHAR, ACE_TEXT, TAO_Notify_Properties::asynch_updates(), ACE_OS::atoi(), TAO_Notify_Properties::default_consumer_admin_qos_properties(), TAO_Notify_Properties::default_event_channel_qos_properties(), TAO_Notify_Properties::default_proxy_consumer_qos_properties(), TAO_Notify_Properties::default_proxy_supplier_qos_properties(), TAO_Notify_Properties::default_supplier_admin_qos_properties(), TAO_Singleton< TYPE, ACE_LOCK >::instance(), LM_DEBUG, LM_ERROR, CosNotification::QoSProperties, set_threads(), and TAO_Notify_Properties::updates().

00030 {
00031   ACE_Arg_Shifter arg_shifter (argc, argv);
00032 
00033   const ACE_TCHAR *current_arg = 0;
00034 
00035   // Default to an all reactive system.
00036   int ec_threads = 0;
00037   int consumer_threads = 0;
00038   int supplier_threads = 0;
00039 
00040   int task_per_proxy = 0;
00041 
00042   TAO_Notify_Properties *properties = TAO_Notify_PROPERTIES::instance();
00043 
00044   while (arg_shifter.is_anything_left ())
00045     {
00046       if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-MTDispatching")) == 0)
00047         {
00048           arg_shifter.consume_arg ();
00049           ACE_DEBUG ((LM_DEBUG,
00050                       ACE_TEXT ("(%P|%t) The -MTDispatching option has been deprecated, use -DispatchingThreads \n")));
00051         }
00052       else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-DispatchingThreads"))))
00053         {
00054           consumer_threads += ACE_OS::atoi (current_arg);
00055           arg_shifter.consume_arg ();
00056         }
00057       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-MTSourceEval")) == 0)
00058         {
00059           arg_shifter.consume_arg ();
00060           ACE_DEBUG ((LM_DEBUG,
00061                       ACE_TEXT ("(%P|%t) The -MTSourceEval option has been deprecated, use -SourceThreads \n")));
00062         }
00063       else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-SourceThreads"))))
00064         {
00065           supplier_threads += ACE_OS::atoi (current_arg);
00066           arg_shifter.consume_arg ();
00067         }
00068       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-MTLookup")) == 0)
00069         {
00070           arg_shifter.consume_arg ();
00071           ACE_DEBUG ((LM_DEBUG,
00072                       ACE_TEXT ("(%P|%t) The -MTLookup option has been deprecated, use -SourceThreads \n")));
00073         }
00074       else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-LookupThreads"))))
00075         {
00076           supplier_threads += ACE_OS::atoi (current_arg);
00077           arg_shifter.consume_arg ();
00078           ACE_DEBUG ((LM_DEBUG,
00079                       ACE_TEXT ("(%P|%t) The -LookupThreads option has been deprecated, use -SourceThreads \n")));
00080         }
00081       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-MTListenerEval")) == 0)
00082         {
00083           arg_shifter.consume_arg ();
00084           ACE_DEBUG ((LM_DEBUG,
00085                       ACE_TEXT ("(%P|%t) The -MTListenerEval option has been deprecated, use -DispatchingThreads \n")));
00086         }
00087       else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-ListenerThreads"))))
00088         {
00089           // Since this option is always added to consumer_threads, we'll
00090           // deprecate it in favor of that option.
00091           ACE_DEBUG ((LM_DEBUG,
00092                       ACE_TEXT ("(%P|%t) The -ListenerThreads option has been deprecated, use -DispatchingThreads \n")));
00093           consumer_threads += ACE_OS::atoi (current_arg);
00094           arg_shifter.consume_arg ();
00095         }
00096       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-AsynchUpdates")) == 0)
00097         {
00098           arg_shifter.consume_arg ();
00099 
00100           properties->asynch_updates (1);
00101         }
00102       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-NoUpdates")) == 0)
00103         {
00104           arg_shifter.consume_arg ();
00105 
00106           properties->updates (0);
00107         }
00108       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-AllocateTaskperProxy")) == 0)
00109         {
00110           task_per_proxy = 1;
00111           arg_shifter.consume_arg ();
00112         }
00113       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-AllowReconnect")) == 0)
00114       {
00115         arg_shifter.consume_arg ();
00116         TAO_Notify_PROPERTIES::instance()->allow_reconnect (true);
00117       }
00118       else
00119       {
00120         ACE_ERROR ((LM_ERROR,
00121                     ACE_TEXT ("(%P|%t) Ignoring unknown option for Notify Factory: %s\n"),
00122                     arg_shifter.get_current()
00123           ));
00124         arg_shifter.consume_arg ();
00125       }
00126     }
00127 
00128   // Init the EC QoS
00129   {
00130     CosNotification::QoSProperties qos;
00131     this->set_threads (qos, ec_threads);
00132     properties->default_event_channel_qos_properties (qos);
00133   }
00134 
00135   if (task_per_proxy == 0)
00136     {
00137       // Set the per ConsumerAdmin QoS
00138       {
00139         if (consumer_threads > 0)
00140           ACE_DEBUG((LM_DEBUG, "Using %d threads for each ConsumerAdmin.\n", consumer_threads));
00141         CosNotification::QoSProperties qos;
00142         this->set_threads (qos, consumer_threads);
00143         properties->default_consumer_admin_qos_properties (qos);
00144       }
00145 
00146       // Set the per SupplierAdmin QoS
00147       {
00148         if (supplier_threads > 0)
00149           ACE_DEBUG((LM_DEBUG, "Using %d threads for each SupplierAdmin.\n", supplier_threads));
00150         CosNotification::QoSProperties qos;
00151         this->set_threads (qos, supplier_threads);
00152         properties->default_supplier_admin_qos_properties (qos);
00153       }
00154     }
00155   else
00156     {
00157       // Set the per ProxyConsumer QoS
00158       {
00159         if (supplier_threads > 0)
00160           ACE_DEBUG((LM_DEBUG, "Using %d threads for each Supplier.\n", supplier_threads));
00161         CosNotification::QoSProperties qos;
00162         this->set_threads (qos, supplier_threads); // lookup thread per proxy doesn't make sense.
00163         properties->default_proxy_consumer_qos_properties (qos);
00164       }
00165 
00166       // Set the per ProxySupplier QoS
00167       {
00168         if (consumer_threads > 0)
00169           ACE_DEBUG((LM_DEBUG, "Using %d threads for each Consumer.\n", consumer_threads));
00170         CosNotification::QoSProperties qos;
00171         this->set_threads (qos, consumer_threads);
00172         properties->default_proxy_supplier_qos_properties (qos);
00173       }
00174     }
00175 
00176   return 0;
00177 }

void TAO_CosNotify_Service::init_i CORBA::ORB_ptr  orb  )  [protected, virtual]
 

Init the data members.

Set the properties

Reimplemented in TAO_RT_Notify_Service.

Definition at line 206 of file CosNotify_Service.cpp.

References ACE_ASSERT, ACE_CHECK, ACE_ENV_ARG_PARAMETER, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_ERROR, builder_, TAO_Notify_Properties::default_poa(), TAO_Singleton< TYPE, ACE_LOCK >::instance(), CORBA::is_nil(), LM_ERROR, TAO_Notify_Properties::orb(), and ACE_Auto_Basic_Ptr< X >::reset().

Referenced by TAO_RT_Notify_Service::init_i(), and init_service().

00207 {
00208   // Obtain the Root POA
00209   CORBA::Object_var object  =
00210     orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
00211   ACE_CHECK;
00212 
00213   if (CORBA::is_nil (object.in ()))
00214     ACE_ERROR ((LM_ERROR,
00215                 " (%P|%t) Unable to resolve the RootPOA.\n"));
00216 
00217   PortableServer::POA_var default_poa = PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
00218   ACE_CHECK;
00219 
00220   /// Set the properties
00221     TAO_Notify_Properties* properties = TAO_Notify_PROPERTIES::instance();
00222 
00223     properties->orb (orb);
00224     properties->default_poa (default_poa.in ());
00225 
00226     // Init the factory
00227     this->factory_.reset (this->create_factory (ACE_ENV_SINGLE_ARG_PARAMETER));
00228     ACE_CHECK;
00229     ACE_ASSERT( this->factory_.get() != 0 );
00230     TAO_Notify_PROPERTIES::instance()->factory (this->factory_.get());
00231 
00232     this->builder_.reset (this->create_builder (ACE_ENV_SINGLE_ARG_PARAMETER));
00233     ACE_CHECK;
00234     ACE_ASSERT( this->builder_.get() != 0 );
00235     TAO_Notify_PROPERTIES::instance()->builder (this->builder_.get());
00236 }

void TAO_CosNotify_Service::init_service CORBA::ORB_ptr  orb  )  [virtual]
 

Init the service from driver.

Implements TAO_Notify_Service.

Reimplemented in TAO_RT_Notify_Service.

Definition at line 197 of file CosNotify_Service.cpp.

References ACE_CHECK, ACE_DEBUG, ACE_ENV_ARG_PARAMETER, init_i(), and LM_DEBUG.

00198 {
00199   ACE_DEBUG ((LM_DEBUG, "Loading the Cos Notification Service...\n"));
00200 
00201   this->init_i (orb ACE_ENV_ARG_PARAMETER);
00202   ACE_CHECK;
00203 }

void TAO_CosNotify_Service::remove TAO_Notify_EventChannelFactory ecf  )  [virtual]
 

Called by the factory when it is destroyed.

Definition at line 271 of file CosNotify_Service.cpp.

00272 {
00273   // NOP.
00274 }

void TAO_CosNotify_Service::set_threads CosNotification::QoSProperties qos,
int  threads
[private]
 

Set thread options on .

Definition at line 180 of file CosNotify_Service.cpp.

References CosNotification::QoSProperties, and CORBA::string_dup().

Referenced by init().

00181 {
00182   NotifyExt::ThreadPoolParams tp_params =
00183     {NotifyExt::CLIENT_PROPAGATED, 0, 0, (unsigned)threads, 0, 0, 0, 0, 0 };
00184 
00185   qos.length (1);
00186   qos[0].name = CORBA::string_dup (NotifyExt::ThreadPool);
00187   qos[0].value <<= tp_params;
00188 }


Member Data Documentation

ACE_Auto_Ptr< TAO_Notify_Builder > TAO_CosNotify_Service::builder_ [private]
 

Service component for building NS participants.

Definition at line 84 of file CosNotify_Service.h.

Referenced by builder(), and init_i().

ACE_Auto_Ptr< TAO_Notify_Factory > TAO_CosNotify_Service::factory_ [private]
 

Service component for object factory operations.

Definition at line 81 of file CosNotify_Service.h.


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 13:31:32 2006 for TAO_CosNotification by doxygen 1.3.6