// This may look like C, but it's really -*- C++ -*- // $Id$ // ============================================================================ // // = LIBRARY // TAO // // = FILENAME // default_server.h // // = AUTHOR // Chris Cleeland // // ============================================================================ #ifndef TAO_DEFAULT_SERVER_FACTORY_H # define TAO_DEFAULT_SERVER_FACTORY_H #include "tao/corba.h" #include "tao/ORB_Strategies_T.h" class TAO_Default_Server_Creation_Strategy : public TAO_Server_Strategy_Factory::CREATION_STRATEGY { public: TAO_Default_Server_Creation_Strategy (ACE_Thread_Manager * = 0); // ctor // = Factory method. virtual int make_svc_handler (TAO_Server_Connection_Handler *&sh); }; class TAO_Default_Server_Strategy_Factory : public TAO_Server_Strategy_Factory { // = TITLE // This is the default strategy factory for CORBA servers. It // allows developers to choose strategies via argument flags. // This design gives substantial freedom for experimentation. public: // = Initialization and termination methods. TAO_Default_Server_Strategy_Factory (void); virtual ~TAO_Default_Server_Strategy_Factory (void); virtual int open (void); // Call for our strategies. // = Server-side ORB Strategy Factory Methods. virtual CREATION_STRATEGY *creation_strategy (void); // Return concrete creation strategy. virtual CONCURRENCY_STRATEGY *concurrency_strategy (void); virtual TAO_Object_Table_Impl *create_object_table (int user_id_policy); // Return a new id-->object table. If is true, the // request is being made for a POA with USER ID policy. Otherwise, // the SYSTEM_ID policy is being used. virtual ACE_Lock *create_poa_lock (void); // Creates and returns a lock for POA based on the setting for // <-ORBpoalock>. A setting of returns an // >; a setting of // returns an >. virtual ACE_Lock *create_poa_mgr_lock (void); // Creates and returns a lock for a POA Manager based on the setting // for <-ORBpoamgrlock>. A setting of returns an // >; a setting of // returns an >. virtual ACE_Lock *create_servant_lock (void); // Creates and returns a lock for servants based on the setting of // POA, and concurrency strategy as follows: // 1. If concurrency policy is reactive and POA is TSS // then return ACE_Null_Mutex via ACE_Lock_Adapter. // // 2. If concurrency policy is non-reactive then // return ACE_Thread_Mutex ... // // 3. If the POA is global then, return // ACE_Null_Mutex iff ORB_init count == 1, // else if ORB_init count > 1 return // ACE_Thread_Mutex. virtual ACE_Lock *create_event_loop_lock (void); // Creates and returns a lock for the event loop. // If the ORB is single threaded or some form of ORB-per-thread then // it is more efficient to use a Null_Mutex for the variables // controlling the event loop (termination). Otherwise a // Recursive_Thread_Mutex or Thread_Mutex may be required. virtual ACE_Lock *create_collocation_table_lock (void); // Creates and returns the lock for the global collocation table. virtual ACE_Lock *create_cached_connector_lock (void); // Creates and returns the lock for the global collocation table. // = Service Configurator hooks. virtual int init (int argc, char *argv[]); // Initialize the ORB when it's linked dynamically. virtual u_long object_table_size (void) const; // Return the object table size int parse_args (int argc, char *argv[]); // Arguments are in the form of -ORBxxx. Valid arguments are: // <-ORBconcurrency> <{which}> // where <{which}> is one of or . // <-ORBtablesize> <{num}> // to set the table size // <-ORBdemuxstrategy> <{which}> // where <{which}> is one of , , or // <-ORBpoalock> <{which}> // where <{which}> is one of or (default ) // <-ORBpoamgrlock> <{which}> // where <{which}> is one of or (default ) // <-ORBeventlock> <{which}> // where <{which}> is one of or (default ) protected: void tokenize (char *flag_string); // = Helpers for TAO_Object_Table_Impl *create_user_id_policy_object_table (void); TAO_Object_Table_Impl *create_system_id_policy_object_table (void); TAO_Object_Table_Impl *create_object_table_i (TAO_Demux_Strategy table_type); u_long thread_flags_; // Default thread flags passed to thr_create(). u_long object_table_size_; // Default size of object lookup table. TAO_Demux_Strategy object_lookup_strategy_for_user_id_policy_; // The type of lookup/demultiplexing strategy being used for user id // policy TAO_Demux_Strategy object_lookup_strategy_for_system_id_policy_; // The type of lookup/demultiplexing strategy being used for system // id policy enum Lock_Type { TAO_NULL_LOCK, TAO_THREAD_LOCK }; Lock_Type poa_lock_type_; // The type of lock to be returned by . Lock_Type poa_mgr_lock_type_; // The type of lock to be returned by . Lock_Type event_loop_lock_type_; // The type of lock to be returned by . Lock_Type collocation_table_lock_type_; // Type of lock used by the collocation table. Lock_Type cached_connector_lock_type_; // Type of lock used by the cached connector. // = Strategies Used. TAO_Reactive_Strategy reactive_strategy_; // A strategy for passively establishing connections which utilizes // the Reactor. ACE_Thread_Strategy threaded_strategy_; // The threaded strategy used for passively establishing // connections. CREATION_STRATEGY *creation_strategy_; // concrete creation strategy. CONCURRENCY_STRATEGY *concurrency_strategy_; // concrete concurrency strategy. TAO_Default_Server_Creation_Strategy default_creation_strategy_; // The default creation strategy for the server side connection // handlers #if 0 // Someday we'll need these! ACCEPT_STRATEGY *accept_strategy_; SCHEDULING_STRATEGY *scheduling_strategy_; #endif /* 0 */ }; #if defined (__ACE_INLINE__) # include "tao/default_server.i" #endif /* __ACE_INLINE__ */ ACE_FACTORY_DECLARE (TAO, TAO_Default_Server_Strategy_Factory) #endif /* TAO_DEFAULT_SERVER_FACTORY_H */