#include <Adapter_Registry.h>
Collaboration diagram for TAO_Adapter_Registry:

Public Member Functions | |
| TAO_Adapter_Registry (TAO_ORB_Core *orb_core) | |
| ~TAO_Adapter_Registry (void) | |
| Close the. | |
| void | close (int wait_for_completion) |
| void | check_close (int wait_for_completion) |
| void | insert (TAO_Adapter *adapter) |
| Insert a new adapter into the registry. | |
| void | dispatch (TAO::ObjectKey &key, TAO_ServerRequest &request, CORBA::Object_out forward_to) |
| CORBA::Object_ptr | create_collocated_object (TAO_Stub *, const TAO_MProfile &) |
| Create a collocated object using the given profile and stub. | |
| CORBA::Long | initialize_collocated_object (TAO_Stub *) |
| TAO_Adapter * | find_adapter (const char *name) const |
| Fetch the adapter named name. | |
Private Attributes | |
| TAO_ORB_Core * | orb_core_ |
| The ORB Core. | |
A simple array of adapters. | |
| size_t | adapters_capacity_ |
| size_t | adapters_count_ |
| TAO_Adapter ** | adapters_ |
|
|
Definition at line 19 of file Adapter_Registry.cpp. References ACE_NEW.
00020 : orb_core_ (oc), 00021 adapters_capacity_ (16), // @@ Make it configurable 00022 adapters_count_ (0), 00023 adapters_ (0) 00024 { 00025 ACE_NEW (this->adapters_, 00026 TAO_Adapter*[this->adapters_capacity_]); 00027 } |
|
|
Close the.
Definition at line 29 of file Adapter_Registry.cpp. References adapters_, and adapters_count_.
00030 {
00031 for (size_t i = 0; i != this->adapters_count_; ++i)
00032 delete this->adapters_[i];
00033
00034 delete[] this->adapters_;
00035 }
|
|
|
Verify if the close() call can be invoked in the current context for *all* adapters. Raise the right exception if not. Definition at line 65 of file Adapter_Registry.cpp. References ACE_ENV_ARG_PARAMETER, ACE_TRY_CHECK, adapters_, adapters_count_, and TAO_Adapter::check_close(). Referenced by TAO_ORB_Core::shutdown().
00067 {
00068 for (size_t i = 0; i != this->adapters_count_; ++i)
00069 {
00070 this->adapters_[i]->check_close (wait_for_completion
00071 ACE_ENV_ARG_PARAMETER);
00072 ACE_TRY_CHECK;
00073 }
00074 }
|
|
|
Close each of of the Adapters and then cleanup the Registry. It is possible that an Adapter will reject a close() call if it is invoked in an innapropriate context (think shutting down the POA while performing an upcall). Definition at line 38 of file Adapter_Registry.cpp. References ACE_ANY_EXCEPTION, ACE_CATCHANY, ACE_ENDTRY, ACE_ENV_ARG_PARAMETER, ACE_PRINT_EXCEPTION, ACE_TRY, ACE_TRY_CHECK, adapters_, adapters_count_, TAO_Adapter::close(), and TAO_debug_level. Referenced by TAO_ORB_Core::shutdown().
00040 {
00041 ACE_TRY
00042 {
00043 for (size_t i = 0; i != this->adapters_count_; ++i)
00044 {
00045 this->adapters_[i]->close (wait_for_completion
00046 ACE_ENV_ARG_PARAMETER);
00047 ACE_TRY_CHECK;
00048 }
00049 }
00050 ACE_CATCHANY
00051 {
00052 if (TAO_debug_level > 3)
00053 {
00054 ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
00055 "Exception in TAO_Adapter_Registry::close ()");
00056 }
00057 return;
00058 }
00059 ACE_ENDTRY;
00060
00061 return;
00062 }
|
|
||||||||||||
|
Create a collocated object using the given profile and stub.
Definition at line 141 of file Adapter_Registry.cpp. References adapters_, adapters_count_, TAO_Stub::collocated_servant(), TAO_Adapter::create_collocated_object(), and CORBA::Object_ptr. Referenced by TAO_ORB_Core::create_object().
00143 {
00144 for (size_t i = 0; i != this->adapters_count_; ++i)
00145 {
00146 CORBA::Object_ptr x =
00147 this->adapters_[i]->create_collocated_object (stub,
00148 mprofile);
00149 if (x != 0)
00150 {
00151 if (!stub->collocated_servant ())
00152 {
00153 // This adapter created an object but it was not able to locate
00154 // a servant so we need to give the rest of the adapters a chance to
00155 // initialise the stub and find a servant or forward us or whatever.
00156 for (CORBA::Long go_on = 1; go_on && i != this->adapters_count_; ++i)
00157 {
00158 // initialize_collocated_object only returns 0 if it has completely
00159 // initialised the object.
00160 go_on = this->adapters_[i]->initialize_collocated_object (stub);
00161 }
00162 }
00163 return x;
00164 }
00165 }
00166 return 0;
00167 }
|
|
||||||||||||||||
|
Dispatch the request to all the adapters. It tries the adapters ordered by priority, stopping when the adapter returns a status different from DS_MISMATCHED_KEY Definition at line 115 of file Adapter_Registry.cpp. References ACE_CHECK, ACE_ENV_ARG_PARAMETER, ACE_THROW, adapters_, adapters_count_, TAO_Adapter::dispatch(), CORBA::is_nil(), and CORBA::Object_out. Referenced by TAO_Request_Dispatcher::dispatch(), TAO_GIOP_Message_Lite::process_locate_request(), and TAO_GIOP_Message_Lite::process_request().
00119 {
00120 for (size_t i = 0; i != this->adapters_count_; ++i)
00121 {
00122 int const r = this->adapters_[i]->dispatch (key,
00123 request,
00124 forward_to
00125 ACE_ENV_ARG_PARAMETER);
00126 ACE_CHECK;
00127
00128 if (r != TAO_Adapter::DS_MISMATCHED_KEY)
00129 {
00130 return;
00131 }
00132 }
00133
00134 if (CORBA::is_nil (forward_to))
00135 {
00136 ACE_THROW (CORBA::OBJECT_NOT_EXIST ());
00137 }
00138 }
|
|
|
Fetch the adapter named name.
Definition at line 187 of file Adapter_Registry.cpp. References adapters_, adapters_count_, and ACE_OS::strcmp(). Referenced by TAO_ORB_Core::poa_adapter().
00188 {
00189 for (TAO_Adapter **i = this->adapters_;
00190 i != this->adapters_ + this->adapters_count_;
00191 ++i)
00192 if (ACE_OS::strcmp ((*i)->name (), name) == 0)
00193 return *i;
00194
00195 return 0;
00196
00197 }
|
|
|
Initialize a collocated object using the given stub and object pointer for lazily evaluated object references. Definition at line 170 of file Adapter_Registry.cpp. References adapters_, adapters_count_, and TAO_Adapter::initialize_collocated_object(). Referenced by TAO_ORB_Core::initialize_object_i().
00171 {
00172 for (size_t i = 0; i != this->adapters_count_; ++i)
00173 {
00174 int const retval =
00175 this->adapters_[i]->initialize_collocated_object (stub);
00176 if (retval == 0)
00177 {
00178 // initialize_collocated_object only returns 0 if it has completely
00179 // initialised the object. We can return early.
00180 return retval;
00181 }
00182 }
00183 return 0;
00184 }
|
|
|
Insert a new adapter into the registry.
Definition at line 77 of file Adapter_Registry.cpp. References ACE_CHECK, ACE_NEW_THROW_EX, adapters_, adapters_capacity_, adapters_count_, and TAO_Adapter::priority(). Referenced by TAO_ORB_Core::resolve_ior_table_i(), and TAO_ORB_Core::root_poa().
00079 {
00080 if (this->adapters_capacity_ == this->adapters_count_)
00081 {
00082 this->adapters_capacity_ *= 2;
00083 TAO_Adapter **tmp = 0;
00084 ACE_NEW_THROW_EX (tmp,
00085 TAO_Adapter*[this->adapters_capacity_],
00086 CORBA::NO_MEMORY ());
00087 ACE_CHECK;
00088
00089 for (size_t i = 0; i != this->adapters_count_; ++i)
00090 tmp[i] = this->adapters_[i];
00091 delete[] this->adapters_;
00092 this->adapters_ = tmp;
00093 }
00094
00095 int const priority = adapter->priority ();
00096 for (size_t i = 0; i != this->adapters_count_; ++i)
00097 {
00098 if (this->adapters_[i]->priority () >= priority)
00099 {
00100 for (size_t j = this->adapters_count_ + 1;
00101 j > i;
00102 --j)
00103 {
00104 this->adapters_[j] = this->adapters_[j - 1];
00105 }
00106 this->adapters_[i] = adapter;
00107 ++this->adapters_count_;
00108 return;
00109 }
00110 }
00111 this->adapters_[this->adapters_count_++] = adapter;
00112 }
|
|
|
Definition at line 111 of file Adapter_Registry.h. Referenced by check_close(), close(), create_collocated_object(), dispatch(), find_adapter(), initialize_collocated_object(), insert(), and ~TAO_Adapter_Registry(). |
|
|
Definition at line 109 of file Adapter_Registry.h. Referenced by insert(). |
|
|
Definition at line 110 of file Adapter_Registry.h. Referenced by check_close(), close(), create_collocated_object(), dispatch(), find_adapter(), initialize_collocated_object(), insert(), and ~TAO_Adapter_Registry(). |
|
|
The ORB Core.
Definition at line 103 of file Adapter_Registry.h. |
1.3.6