summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp254
1 files changed, 254 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp b/TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp
new file mode 100644
index 00000000000..8db55311bd5
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Log/LogMgr_i.cpp
@@ -0,0 +1,254 @@
+#include "orbsvcs/Log/LogMgr_i.h"
+#include "orbsvcs/Log/LogActivator.h"
+#include "ace/Dynamic_Service.h"
+#include "tao/Utils/PolicyList_Destroyer.h"
+#include "orbsvcs/Log/Hash_Persistence_Strategy.h"
+#include "orbsvcs/Log/LogStore.h"
+#include "ace/OS_NS_stdio.h"
+
+ACE_RCSID (Log,
+ LogMgr_i,
+ "$Id$")
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_LogMgr_i::TAO_LogMgr_i ()
+ : logstore_ (0)
+{
+}
+
+
+TAO_LogMgr_i::~TAO_LogMgr_i ()
+{
+ delete logstore_;
+}
+
+
+void
+TAO_LogMgr_i::init (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa)
+{
+ this->orb_ = CORBA::ORB::_duplicate (orb);
+ this->poa_ = PortableServer::POA::_duplicate (poa);
+
+ PortableServer::POAManager_var poa_manager =
+ this->poa_->the_POAManager ();
+
+ {
+ TAO::Utils::PolicyList_Destroyer policies(1);
+
+ // Create Factory POA
+ policies.length (1);
+ policies[0] =
+ this->poa_->create_lifespan_policy (PortableServer::PERSISTENT);
+
+ this->factory_poa_ = this->poa_->create_POA ("factory_POA",
+ poa_manager.in (),
+ policies);
+ }
+
+
+ {
+ TAO::Utils::PolicyList_Destroyer policies(2);
+
+ // Create Log POA
+ policies.length (2);
+ policies[0] =
+ this->poa_->create_lifespan_policy (PortableServer::PERSISTENT);
+
+ policies[1] =
+ this->poa_->create_id_assignment_policy (PortableServer::USER_ID);
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT)
+ policies.length(4);
+ policies[2] =
+ this->poa_->create_servant_retention_policy (PortableServer::RETAIN);
+
+ policies[3] =
+ this->poa_->create_request_processing_policy (PortableServer::USE_SERVANT_MANAGER);
+#endif
+
+ this->log_poa_ = this->factory_poa_->create_POA ("log_POA",
+ poa_manager.in (),
+ policies);
+ }
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT)
+ PortableServer::ServantActivator* servant_activator = 0;
+
+ ACE_NEW_THROW_EX (servant_activator,
+ TAO_LogActivator (*this),
+ CORBA::NO_MEMORY ());
+
+ this->log_poa_->set_servant_manager(servant_activator);
+#endif
+
+ // Load Log Strategy
+ TAO_Log_Persistence_Strategy* strategy_ = 0;
+
+ strategy_ =
+ ACE_Dynamic_Service<TAO_Log_Persistence_Strategy>::instance ("Log_Persistence");
+ if (strategy_ == 0)
+ {
+ strategy_ = new TAO_Hash_Persistence_Strategy;
+ }
+
+ logstore_ = strategy_->create_log_store (this);
+}
+
+PortableServer::ObjectId*
+TAO_LogMgr_i::create_objectid (DsLogAdmin::LogId id)
+{
+ char buf[32];
+ ACE_OS::sprintf(buf, "%lu", static_cast<unsigned long>(id));
+
+ PortableServer::ObjectId_var oid =
+ PortableServer::string_to_ObjectId(buf);
+
+ return oid._retn ();
+}
+
+DsLogAdmin::Log_ptr
+TAO_LogMgr_i::create_log_reference (DsLogAdmin::LogId id)
+{
+ PortableServer::ObjectId_var oid =
+ this->create_objectid (id);
+ CORBA::RepositoryId_var intf =
+ this->create_repositoryid ();
+
+ CORBA::Object_var obj =
+ this->log_poa_->create_reference_with_id (oid.in (),
+ intf.in ());
+
+ // Use _unchecked_narrow() because this may be called from a servant
+ // activator's incarnate() method. A plain _narrow() will result in
+ // infinate recursion.
+ DsLogAdmin::Log_var log =
+ DsLogAdmin::Log::_unchecked_narrow (obj.in ());
+
+ return log._retn();
+}
+
+DsLogAdmin::Log_ptr
+TAO_LogMgr_i::create_log_object (DsLogAdmin::LogId id)
+{
+ PortableServer::ServantBase* servant = 0;
+
+ servant = create_log_servant (id);
+
+ PortableServer::ServantBase_var safe_servant = servant;
+ // Transfer ownership to the POA.
+
+ // Obtain ObjectId
+ PortableServer::ObjectId_var oid = this->create_objectid (id);
+
+ // Register with the poa
+ this->log_poa_->activate_object_with_id (oid.in (),
+ servant);
+
+ return create_log_reference (id);
+}
+
+DsLogAdmin::LogList*
+TAO_LogMgr_i::list_logs (void)
+{
+ return this->logstore_->list_logs ();
+}
+
+
+DsLogAdmin::LogIdList*
+TAO_LogMgr_i::list_logs_by_id (void)
+{
+ return this->logstore_->list_logs_by_id ();
+}
+
+
+DsLogAdmin::Log_ptr
+TAO_LogMgr_i::find_log (DsLogAdmin::LogId id)
+{
+ return this->logstore_->find_log (id);
+}
+
+
+TAO_LogRecordStore*
+TAO_LogMgr_i::get_log_record_store (DsLogAdmin::LogId id)
+{
+ return this->logstore_->get_log_record_store (id);
+}
+
+
+bool
+TAO_LogMgr_i::exists (DsLogAdmin::LogId id)
+{
+ return this->logstore_->exists (id);
+}
+
+
+int
+TAO_LogMgr_i::remove (DsLogAdmin::LogId id)
+{
+ return this->logstore_->remove (id);
+}
+
+void
+TAO_LogMgr_i::create_i (DsLogAdmin::LogFullActionType full_action,
+ CORBA::ULongLong max_size,
+ const DsLogAdmin::CapacityAlarmThresholdList* thresholds,
+ DsLogAdmin::LogId_out id_out)
+{
+ // Validate log_full_action before creating log
+ if (full_action != DsLogAdmin::wrap && full_action != DsLogAdmin::halt)
+ throw DsLogAdmin::InvalidLogFullAction ();
+
+ if (thresholds)
+ {
+ // @@ JTC - validate thresholds here
+ }
+
+ this->logstore_->create (full_action,
+ max_size,
+ thresholds,
+ id_out);
+}
+
+void
+TAO_LogMgr_i::create_with_id_i (DsLogAdmin::LogId id,
+ DsLogAdmin::LogFullActionType full_action,
+ CORBA::ULongLong max_size,
+ const DsLogAdmin::CapacityAlarmThresholdList* thresholds)
+{
+ // Validate log_full_action before creating log
+ if (full_action != DsLogAdmin::wrap && full_action != DsLogAdmin::halt)
+ throw DsLogAdmin::InvalidLogFullAction ();
+
+ if (thresholds)
+ {
+ // @@ JTC - validate thresholds here
+ }
+
+ this->logstore_->create_with_id (id,
+ full_action,
+ max_size,
+ thresholds);
+}
+
+CORBA::ORB_ptr
+TAO_LogMgr_i::orb ()
+{
+ return this->orb_.in ();
+}
+
+PortableServer::POA_ptr
+TAO_LogMgr_i::factory_poa ()
+{
+ return this->factory_poa_.in ();
+}
+
+PortableServer::POA_ptr
+TAO_LogMgr_i::log_poa ()
+{
+ return this->log_poa_.in ();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL