00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "tao/ORB_Core.h"
00013 #include "tao/debug.h"
00014 #include "tao/PortableServer/ServantRetentionStrategyRetain.h"
00015 #include "tao/PortableServer/Non_Servant_Upcall.h"
00016 #include "tao/PortableServer/Servant_Upcall.h"
00017 #include "tao/PortableServer/POA_Current_Impl.h"
00018 #include "tao/PortableServer/Root_POA.h"
00019 #include "tao/PortableServer/Active_Object_Map.h"
00020 #include "tao/PortableServer/Active_Object_Map_Entry.h"
00021
00022 #if defined (TAO_HAS_MONITOR_POINTS) && (TAO_HAS_MONITOR_POINTS == 1)
00023 #include "ace/Monitor_Size.h"
00024 #endif
00025
00026 ACE_RCSID (PortableServer,
00027 ServantRetentionStrategyRetain,
00028 "$Id: ServantRetentionStrategyRetain.cpp 88564 2010-01-15 09:56:57Z johnnyw $")
00029
00030 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00031
00032 namespace TAO
00033 {
00034 namespace Portable_Server
00035 {
00036 ServantRetentionStrategyRetain::ServantRetentionStrategyRetain (void) :
00037 ServantRetentionStrategyNonRetain (),
00038 active_object_map_ (),
00039 waiting_servant_deactivation_ (0)
00040 {
00041 }
00042
00043 void
00044 ServantRetentionStrategyRetain::strategy_init (TAO_Root_POA *poa)
00045 {
00046 poa_ = poa;
00047
00048
00049 TAO_Active_Object_Map *active_object_map = 0;
00050 ACE_NEW_THROW_EX (active_object_map,
00051 TAO_Active_Object_Map (!poa->system_id (),
00052 !poa->allow_multiple_activations (),
00053 poa->is_persistent (),
00054 poa->orb_core().server_factory ()->active_object_map_creation_parameters ()
00055 ), CORBA::NO_MEMORY ());
00056
00057 ACE_auto_ptr_reset (this->active_object_map_, active_object_map);
00058
00059 #if defined (TAO_HAS_MONITOR_POINTS) && (TAO_HAS_MONITOR_POINTS == 1)
00060 ACE_CString name_str ("Active_Object_Map_");
00061 name_str += poa->orb_core ().orbid ();
00062 name_str += '_';
00063 name_str += poa->the_name ();
00064
00065 active_object_map->monitor_->name (name_str.c_str ());
00066 active_object_map->monitor_->add_to_registry ();
00067 #endif
00068 }
00069
00070 void
00071 ServantRetentionStrategyRetain::strategy_cleanup (void)
00072 {
00073 }
00074
00075 void
00076 ServantRetentionStrategyRetain::deactivate_object (
00077 const PortableServer::ObjectId &id)
00078 {
00079 TAO_Active_Object_Map_Entry *active_object_map_entry = 0;
00080 int const result = this->active_object_map_->
00081 find_entry_using_user_id (id, active_object_map_entry);
00082
00083
00084
00085 if (result != 0)
00086 {
00087 throw PortableServer::POA::ObjectNotActive ();
00088 }
00089
00090 this->deactivate_map_entry (active_object_map_entry);
00091 }
00092
00093 void
00094 ServantRetentionStrategyRetain::deactivate_map_entry (
00095 TAO_Active_Object_Map_Entry *active_object_map_entry)
00096 {
00097
00098 CORBA::UShort const new_count = --active_object_map_entry->reference_count_;
00099
00100
00101
00102
00103 if (active_object_map_entry->deactivated_ == 0)
00104 {
00105 this->poa_->servant_deactivated_hook (
00106 active_object_map_entry->servant_,
00107 active_object_map_entry->user_id_);
00108 }
00109
00110 if (new_count == 0)
00111 {
00112 this->poa_->cleanup_servant (active_object_map_entry->servant_,
00113 active_object_map_entry->user_id_);
00114 }
00115 else
00116 {
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 active_object_map_entry->deactivated_ = 1;
00129 }
00130 }
00131
00132 int
00133 ServantRetentionStrategyRetain::unbind_using_user_id (
00134 const PortableServer::ObjectId &user_id)
00135 {
00136 return this->active_object_map_->unbind_using_user_id (user_id);
00137 }
00138
00139 PortableServer::Servant
00140 ServantRetentionStrategyRetain::find_servant (
00141 const PortableServer::ObjectId &system_id)
00142 {
00143
00144 PortableServer::ObjectId_var user_id;
00145 if (active_object_map_->
00146 find_user_id_using_system_id (system_id, user_id.out()) != 0)
00147 {
00148 throw ::CORBA::OBJ_ADAPTER ();
00149 }
00150
00151
00152
00153
00154
00155 TAO_Active_Object_Map_Entry *entry = 0;
00156 PortableServer::Servant servant = 0;
00157
00158 int const result =
00159 active_object_map_->
00160 find_servant_using_system_id_and_user_id (system_id,
00161 user_id.in(),
00162 servant,
00163 entry);
00164
00165 if (result == -1)
00166 {
00167 throw PortableServer::POA::ObjectNotActive ();
00168 }
00169
00170 return servant;
00171 }
00172
00173 PortableServer::ObjectId *
00174 ServantRetentionStrategyRetain::system_id_to_object_id (
00175 const PortableServer::ObjectId &system_id)
00176 {
00177
00178
00179 PortableServer::ObjectId_var user_id;
00180 if (this->active_object_map_->
00181 find_user_id_using_system_id (system_id,
00182 user_id.out ()) != 0)
00183 {
00184 throw ::CORBA::OBJ_ADAPTER ();
00185 }
00186
00187 return user_id._retn ();
00188 }
00189
00190 PortableServer::Servant
00191 ServantRetentionStrategyRetain::user_id_to_servant (
00192 const PortableServer::ObjectId &id)
00193 {
00194
00195
00196
00197 PortableServer::Servant servant = 0;
00198
00199 if (this->active_object_map_->find_servant_using_user_id (id, servant) == -1)
00200 {
00201 throw PortableServer::POA::ObjectNotActive ();
00202 }
00203
00204 return servant;
00205 }
00206
00207 CORBA::Object_ptr
00208 ServantRetentionStrategyRetain::id_to_reference (
00209 const PortableServer::ObjectId &id,
00210 bool indirect)
00211 {
00212
00213
00214
00215 PortableServer::ObjectId_var system_id;
00216 PortableServer::Servant servant;
00217 CORBA::Short priority;
00218
00219 if (this->active_object_map_->
00220 find_servant_and_system_id_using_user_id (id,
00221 servant,
00222 system_id.out (),
00223 priority) == 0)
00224 {
00225
00226 this->poa_->key_to_object_params_.set (system_id,
00227 servant->_interface_repository_id (),
00228 servant,
00229 1,
00230 priority,
00231 indirect);
00232
00233 return this->poa_->invoke_key_to_object_helper_i (servant->_interface_repository_id (),
00234 id);
00235 }
00236 else
00237 {
00238
00239
00240 throw PortableServer::POA::ObjectNotActive ();
00241 }
00242 }
00243
00244 TAO_SERVANT_LOCATION
00245 ServantRetentionStrategyRetain::servant_present (
00246 const PortableServer::ObjectId &system_id,
00247 PortableServer::Servant &servant)
00248 {
00249
00250 PortableServer::ObjectId_var user_id;
00251 if (this->active_object_map_->
00252 find_user_id_using_system_id (system_id, user_id.out()) != 0)
00253 {
00254 throw ::CORBA::OBJ_ADAPTER ();
00255 }
00256
00257 TAO_Active_Object_Map_Entry *entry = 0;
00258 int const result = this->active_object_map_->
00259 find_servant_using_system_id_and_user_id (system_id,
00260 user_id.in(),
00261 servant,
00262 entry);
00263 if (result == 0)
00264 {
00265
00266 return TAO_SERVANT_FOUND;
00267 }
00268 else
00269 {
00270 return TAO_SERVANT_NOT_FOUND;
00271 }
00272 }
00273
00274 PortableServer::Servant
00275 ServantRetentionStrategyRetain::find_servant (
00276 const PortableServer::ObjectId &system_id,
00277 TAO::Portable_Server::Servant_Upcall &servant_upcall,
00278 TAO::Portable_Server::POA_Current_Impl &poa_current_impl)
00279 {
00280 PortableServer::ObjectId user_id;
00281
00282
00283 if (this->active_object_map_->
00284 find_user_id_using_system_id (system_id,
00285 user_id) != 0)
00286 {
00287 throw ::CORBA::OBJ_ADAPTER ();
00288 }
00289
00290 poa_current_impl.object_id(user_id);
00291 servant_upcall.user_id (&poa_current_impl.object_id());
00292
00293
00294
00295
00296
00297 PortableServer::Servant servant = 0;
00298 TAO_Active_Object_Map_Entry *active_object_map_entry = 0;
00299 int const result = this->active_object_map_->
00300 find_servant_using_system_id_and_user_id (system_id,
00301 user_id,
00302 servant,
00303 active_object_map_entry);
00304
00305
00306 if (result == 0)
00307 {
00308 servant_upcall.active_object_map_entry (active_object_map_entry);
00309
00310
00311 servant_upcall.increment_servant_refcount ();
00312 }
00313
00314 return servant;
00315 }
00316
00317 int
00318 ServantRetentionStrategyRetain::find_servant_priority (
00319 const PortableServer::ObjectId &system_id,
00320 CORBA::Short &priority)
00321 {
00322 PortableServer::ObjectId user_id;
00323
00324
00325 if (this->active_object_map_->
00326 find_user_id_using_system_id (system_id,
00327 user_id) != 0)
00328 {
00329 throw ::CORBA::OBJ_ADAPTER ();
00330 }
00331
00332
00333
00334
00335
00336 PortableServer::Servant servant = 0;
00337 TAO_Active_Object_Map_Entry *active_object_map_entry = 0;
00338 int const result = this->active_object_map_->
00339 find_servant_using_system_id_and_user_id (system_id,
00340 user_id,
00341 servant,
00342 active_object_map_entry);
00343
00344 if (result == 0)
00345 {
00346 priority = active_object_map_entry->priority_;
00347 return 0;
00348 }
00349
00350 return -1;
00351 }
00352
00353 int
00354 ServantRetentionStrategyRetain::is_servant_in_map (
00355 PortableServer::Servant servant,
00356 bool &wait_occurred_restart_call)
00357 {
00358 bool deactivated = false;
00359 int servant_in_map =
00360 this->active_object_map_->is_servant_in_map (servant, deactivated);
00361
00362 if (!servant_in_map)
00363 {
00364 return 0;
00365 }
00366 else
00367 {
00368 if (deactivated)
00369 {
00370 if (TAO_debug_level > 0)
00371 ACE_DEBUG ((LM_DEBUG,
00372 ACE_TEXT ("(%t) TAO_Root_POA::is_servant_in_map: waiting for servant to deactivate\n")));
00373
00374
00375
00376
00377
00378 wait_occurred_restart_call = true;
00379
00380 ++this->waiting_servant_deactivation_;
00381
00382 if (this->poa_->object_adapter ().enable_locking ())
00383 this->poa_->servant_deactivation_condition ().wait ();
00384
00385 --this->waiting_servant_deactivation_;
00386
00387 return 0;
00388 }
00389 else
00390 {
00391 return 1;
00392 }
00393 }
00394 }
00395
00396 int
00397 ServantRetentionStrategyRetain::is_user_id_in_map (
00398 const PortableServer::ObjectId &id,
00399 CORBA::Short priority,
00400 bool &priorities_match,
00401 bool &wait_occurred_restart_call)
00402 {
00403 bool deactivated = false;
00404 bool user_id_in_map =
00405 this->active_object_map_->is_user_id_in_map (id,
00406 priority,
00407 priorities_match,
00408 deactivated);
00409
00410 if (!user_id_in_map)
00411 {
00412 return 0;
00413 }
00414 else
00415 {
00416 if (deactivated)
00417 {
00418 if (TAO_debug_level > 0)
00419 ACE_DEBUG ((LM_DEBUG,
00420 ACE_TEXT ("(%t) TAO_Root_POA::is_user_id_in_map: waiting for servant to deactivate\n")));
00421
00422
00423
00424
00425
00426 wait_occurred_restart_call = 1;
00427
00428 ++this->waiting_servant_deactivation_;
00429
00430 if (this->poa_->object_adapter ().enable_locking ())
00431 this->poa_->servant_deactivation_condition ().wait ();
00432
00433 --this->waiting_servant_deactivation_;
00434
00435 return 0;
00436 }
00437 else
00438 {
00439 return 1;
00440 }
00441 }
00442 }
00443
00444 CORBA::ULong
00445 ServantRetentionStrategyRetain::waiting_servant_deactivation (void) const
00446 {
00447 return waiting_servant_deactivation_;
00448 }
00449
00450 void
00451 ServantRetentionStrategyRetain::deactivate_all_objects (void)
00452 {
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464 ACE_Array_Base<TAO_Active_Object_Map_Entry *> map_entries
00465 (this->active_object_map_->current_size ());
00466
00467 size_t counter = 0;
00468 TAO_Active_Object_Map::user_id_map::iterator end
00469 = this->active_object_map_->user_id_map_->end ();
00470
00471 for (TAO_Active_Object_Map::user_id_map::iterator iter
00472 = this->active_object_map_->user_id_map_->begin ();
00473 iter != end;
00474 ++iter)
00475 {
00476 TAO_Active_Object_Map::user_id_map::value_type map_pair = *iter;
00477 TAO_Active_Object_Map_Entry *active_object_map_entry = map_pair.second ();
00478
00479 if (!active_object_map_entry->deactivated_)
00480 {
00481 map_entries[counter] = active_object_map_entry;
00482 ++counter;
00483 }
00484 }
00485
00486 for (size_t i = 0;
00487 i < counter;
00488 ++i)
00489 {
00490 this->deactivate_map_entry (map_entries[i]);
00491 }
00492 }
00493
00494 PortableServer::ObjectId *
00495 ServantRetentionStrategyRetain::servant_to_user_id (
00496 PortableServer::Servant servant)
00497 {
00498
00499
00500
00501 if (!((!this->poa_->allow_multiple_activations ()
00502 || this->poa_->allow_implicit_activation ())))
00503 {
00504 throw PortableServer::POA::WrongPolicy ();
00505 }
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522 PortableServer::ObjectId_var user_id;
00523 if (!this->poa_->allow_multiple_activations () &&
00524 this->active_object_map_->
00525 find_user_id_using_servant (servant, user_id.out ()) != -1)
00526 {
00527 return user_id._retn ();
00528 }
00529
00530
00531
00532
00533
00534
00535 if (this->poa_->allow_implicit_activation ())
00536 {
00537
00538
00539
00540 PortableServer::ObjectId_var user_id;
00541 if (this->active_object_map_->
00542 bind_using_system_id_returning_user_id (servant,
00543 this->poa_->server_priority (),
00544 user_id.out ()) != 0)
00545 {
00546 throw ::CORBA::OBJ_ADAPTER ();
00547 }
00548
00549
00550
00551
00552
00553
00554
00555 this->poa_->servant_activated_hook (servant, user_id.in ());
00556
00557
00558 Non_Servant_Upcall non_servant_upcall (*this->poa_);
00559 ACE_UNUSED_ARG (non_servant_upcall);
00560
00561
00562
00563
00564
00565 servant->_add_ref ();
00566
00567 return user_id._retn ();
00568 }
00569
00570
00571
00572
00573 throw PortableServer::POA::ServantNotActive ();
00574 }
00575
00576 PortableServer::ObjectId *
00577 ServantRetentionStrategyRetain::servant_to_system_id_i (
00578 PortableServer::Servant servant,
00579 CORBA::Short &priority)
00580 {
00581
00582
00583
00584 if (!((!this->poa_->allow_multiple_activations ()
00585 || this->poa_->allow_implicit_activation ())))
00586 {
00587 throw PortableServer::POA::WrongPolicy ();
00588 }
00589
00590
00591
00592
00593
00594 PortableServer::ObjectId_var system_id;
00595 if (!this->poa_->allow_multiple_activations () &&
00596 this->active_object_map_->
00597 find_system_id_using_servant (servant,
00598 system_id.out (),
00599 priority) != -1)
00600 {
00601 return system_id._retn ();
00602 }
00603
00604 #if defined (CORBA_E_COMPACT) || defined (CORBA_E_MICRO)
00605
00606
00607 throw PortableServer::POA::WrongPolicy ();
00608 #endif
00609
00610
00611
00612
00613
00614
00615 if (this->poa_->allow_implicit_activation ())
00616 {
00617
00618
00619
00620 PortableServer::ObjectId_var system_id;
00621 if (this->active_object_map_->
00622 bind_using_system_id_returning_system_id (servant,
00623 priority,
00624 system_id.out ()) != 0)
00625 {
00626 throw ::CORBA::OBJ_ADAPTER ();
00627 }
00628
00629
00630
00631
00632
00633
00634
00635 this->poa_->servant_activated_hook (servant, system_id.in ());
00636
00637
00638 Non_Servant_Upcall non_servant_upcall (*this->poa_);
00639 ACE_UNUSED_ARG (non_servant_upcall);
00640
00641
00642
00643
00644
00645 servant->_add_ref ();
00646
00647 return system_id._retn ();
00648 }
00649
00650
00651 throw PortableServer::POA::ServantNotActive ();
00652 }
00653
00654 CORBA::Object_ptr
00655 ServantRetentionStrategyRetain::servant_to_reference (
00656 PortableServer::Servant servant)
00657 {
00658
00659
00660
00661
00662
00663
00664 CORBA::Short priority = this->poa_->server_priority ();
00665
00666 PortableServer::ObjectId_var system_id =
00667 this->servant_to_system_id_i (servant, priority);
00668
00669 PortableServer::ObjectId user_id;
00670
00671
00672
00673 if (this->active_object_map_->
00674 find_user_id_using_system_id (system_id.in (), user_id) != 0)
00675 {
00676 throw ::CORBA::OBJ_ADAPTER ();
00677 }
00678
00679
00680 this->poa_->key_to_object_params_.set (
00681 system_id,
00682 servant->_interface_repository_id (),
00683 servant,
00684 1,
00685 priority,
00686 true);
00687
00688
00689
00690
00691
00692
00693 return this->poa_->invoke_key_to_object_helper_i (
00694 servant->_interface_repository_id (), user_id);
00695 }
00696
00697 PortableServer::ObjectId *
00698 ServantRetentionStrategyRetain::activate_object (
00699 PortableServer::Servant servant,
00700 CORBA::Short priority,
00701 bool &wait_occurred_restart_call)
00702 {
00703 if (!this->poa_->has_system_id ())
00704 {
00705 throw PortableServer::POA::WrongPolicy ();
00706 }
00707
00708 bool may_activate =
00709 this->poa_->is_servant_activation_allowed (servant, wait_occurred_restart_call);
00710
00711 if (!may_activate)
00712 {
00713 if (wait_occurred_restart_call)
00714 {
00715 return 0;
00716 }
00717 else
00718 {
00719 throw PortableServer::POA::ServantAlreadyActive ();
00720 }
00721 }
00722
00723
00724
00725
00726 PortableServer::ObjectId_var user_id;
00727 if (this->active_object_map_->
00728 bind_using_system_id_returning_user_id (servant,
00729 priority,
00730 user_id.out ()) != 0)
00731 {
00732 throw ::CORBA::OBJ_ADAPTER ();
00733 }
00734
00735
00736
00737
00738
00739
00740
00741 this->poa_->servant_activated_hook (servant, user_id.in ());
00742
00743
00744 Non_Servant_Upcall non_servant_upcall (*this->poa_);
00745 ACE_UNUSED_ARG (non_servant_upcall);
00746
00747
00748
00749
00750
00751 servant->_add_ref ();
00752
00753 return user_id._retn ();
00754 }
00755
00756 void
00757 ServantRetentionStrategyRetain::activate_object_with_id (
00758 const PortableServer::ObjectId &id,
00759 PortableServer::Servant servant,
00760 CORBA::Short priority,
00761 bool &wait_occurred_restart_call)
00762 {
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772 if (this->poa_->has_system_id () &&
00773 !this->poa_->is_poa_generated_id (id))
00774 {
00775 throw ::CORBA::BAD_PARAM ();
00776 }
00777
00778
00779
00780
00781 bool priorities_match = true;
00782 bool result =
00783 this->is_user_id_in_map (id,
00784 priority,
00785 priorities_match,
00786 wait_occurred_restart_call);
00787
00788
00789
00790
00791 if (result)
00792 {
00793 throw PortableServer::POA::ObjectAlreadyActive ();
00794 }
00795 else if (wait_occurred_restart_call)
00796 {
00797
00798
00799
00800 return;
00801 }
00802
00803
00804
00805
00806
00807
00808
00809 if (!priorities_match)
00810 {
00811 throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 1,
00812 CORBA::COMPLETED_NO);
00813 }
00814
00815 bool const may_activate =
00816 this->poa_->is_servant_activation_allowed (servant, wait_occurred_restart_call);
00817
00818 if (!may_activate)
00819 {
00820 if (wait_occurred_restart_call)
00821 {
00822 return;
00823 }
00824 else
00825 {
00826 throw PortableServer::POA::ServantAlreadyActive ();
00827 }
00828 }
00829
00830
00831
00832
00833 if (this->active_object_map_->bind_using_user_id (servant,
00834 id,
00835 priority) != 0)
00836 {
00837 throw ::CORBA::OBJ_ADAPTER ();
00838 }
00839
00840
00841
00842
00843
00844
00845
00846 this->poa_->servant_activated_hook (servant, id);
00847
00848
00849 Non_Servant_Upcall non_servant_upcall (*this->poa_);
00850 ACE_UNUSED_ARG (non_servant_upcall);
00851
00852
00853
00854
00855
00856 servant->_add_ref ();
00857 }
00858
00859 CORBA::Object_ptr
00860 ServantRetentionStrategyRetain::create_reference (
00861 const char *intf,
00862 CORBA::Short priority)
00863 {
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873 PortableServer::ObjectId_var system_id;
00874 PortableServer::ObjectId user_id;
00875
00876 if (this->active_object_map_->
00877 bind_using_system_id_returning_system_id (0,
00878 priority,
00879 system_id.out ()) != 0)
00880 {
00881 throw ::CORBA::OBJ_ADAPTER ();
00882 }
00883
00884
00885 if (this->active_object_map_->
00886 find_user_id_using_system_id (system_id.in (),
00887 user_id) != 0)
00888 {
00889 throw ::CORBA::OBJ_ADAPTER ();
00890 }
00891
00892
00893 this->poa_->key_to_object_params_.set (system_id,
00894 intf,
00895 0,
00896 1,
00897 priority,
00898 true);
00899
00900 return this->poa_->invoke_key_to_object_helper_i (intf,
00901 user_id);
00902 }
00903
00904 #if !defined (CORBA_E_MICRO)
00905 CORBA::Object_ptr
00906 ServantRetentionStrategyRetain::create_reference_with_id (
00907 const PortableServer::ObjectId &oid,
00908 const char *intf,
00909 CORBA::Short priority)
00910 {
00911
00912
00913
00914
00915
00916
00917
00918
00919 PortableServer::Servant servant = 0;
00920 PortableServer::ObjectId_var system_id;
00921
00922
00923
00924
00925
00926
00927
00928 if (this->active_object_map_->
00929 find_system_id_using_user_id (oid,
00930 priority,
00931 system_id.out ()) != 0)
00932 {
00933 throw ::CORBA::OBJ_ADAPTER ();
00934 }
00935
00936
00937 this->poa_->key_to_object_params_.set (system_id,
00938 intf,
00939 servant,
00940 1,
00941 priority,
00942 true);
00943
00944 return this->poa_->invoke_key_to_object_helper_i (intf, oid);
00945 }
00946 #endif
00947
00948 int
00949 ServantRetentionStrategyRetain::rebind_using_user_id_and_system_id (
00950 PortableServer::Servant servant,
00951 const PortableServer::ObjectId &user_id,
00952 const PortableServer::ObjectId &system_id,
00953 TAO::Portable_Server::Servant_Upcall &servant_upcall)
00954 {
00955 TAO_Active_Object_Map_Entry *entry = 0;
00956 int result = this->active_object_map_->
00957 rebind_using_user_id_and_system_id (servant,
00958 user_id,
00959 system_id,
00960 entry);
00961 servant_upcall.active_object_map_entry(entry);
00962
00963 return result;
00964 }
00965
00966 CORBA::Boolean
00967 ServantRetentionStrategyRetain::servant_has_remaining_activations (
00968 PortableServer::Servant servant)
00969 {
00970 return this->active_object_map_->remaining_activations (servant);
00971 }
00972
00973
00974 ::PortableServer::ServantRetentionPolicyValue
00975 ServantRetentionStrategyRetain::type(void) const
00976 {
00977 return ::PortableServer::RETAIN;
00978 }
00979
00980 }
00981 }
00982
00983 TAO_END_VERSIONED_NAMESPACE_DECL