summaryrefslogtreecommitdiff
path: root/TAO/examples/POA/DSI/Database_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/POA/DSI/Database_i.cpp')
-rw-r--r--TAO/examples/POA/DSI/Database_i.cpp414
1 files changed, 0 insertions, 414 deletions
diff --git a/TAO/examples/POA/DSI/Database_i.cpp b/TAO/examples/POA/DSI/Database_i.cpp
deleted file mode 100644
index abe914f82e4..00000000000
--- a/TAO/examples/POA/DSI/Database_i.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-// $Id$
-
-#include "Database_i.h"
-
-ACE_RCSID(DSI, Database_i, "$Id$")
-
-DatabaseImpl::Simpler_Malloc::Simpler_Malloc (void)
- : MALLOC (ACE_DEFAULT_BACKING_STORE)
-{
-}
-
-DatabaseImpl::Simpler_Malloc::~Simpler_Malloc (void)
-{
- this->remove ();
-}
-
-DatabaseImpl::Entry::Entry (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- CORBA::Environment &ACE_TRY_ENV)
- : orb_ (CORBA::ORB::_duplicate (orb)),
- poa_ (PortableServer::POA::_duplicate (poa))
-{
- // Get the POA Current object reference
- CORBA::Object_var obj =
- this->orb_->resolve_initial_references ("POACurrent",
- ACE_TRY_ENV);
- ACE_CHECK;
-
- // Narrow the object reference to a POA Current reference
- this->poa_current_ =
- PortableServer::Current::_narrow (obj.in (),
- ACE_TRY_ENV);
- ACE_CHECK;
-}
-
-DatabaseImpl::Entry::~Entry (void)
-{
-}
-
-void
-DatabaseImpl::Entry::invoke (CORBA::ServerRequest_ptr request,
- CORBA::Environment &ACE_TRY_ENV)
-{
- // The servant determines the key associated with thex database
- // entry represented by self.
- PortableServer::ObjectId_var oid =
- this->poa_current_->get_object_id (ACE_TRY_ENV);
- ACE_CHECK;
-
- // Now convert the id into a string
- CORBA::String_var key =
- PortableServer::ObjectId_to_string (oid.in ());
-
- // Get the operation name for this request
- const char *operation =
- request->operation ();
-
- if (ACE_OS::strcmp (operation,
- "_is_a") == 0)
- {
- this->is_a (request, ACE_TRY_ENV);
- ACE_CHECK;
- }
- else
- ACE_THROW (CORBA::NO_IMPLEMENT ());
-}
-
-void
-DatabaseImpl::Entry::is_a (CORBA::ServerRequest_ptr request,
- CORBA::Environment &ACE_TRY_ENV)
-{
- CORBA::NVList_ptr list;
- this->orb_->create_list (0, list);
-
- CORBA::Any any_1 (CORBA::_tc_string);
-
- list->add_value ("value",
- any_1,
- CORBA::ARG_IN,
- ACE_TRY_ENV);
- ACE_CHECK;
-
- request->arguments (list,
- ACE_TRY_ENV);
- ACE_CHECK;
-
- CORBA_NamedValue_ptr nv = list->item (0,
- ACE_TRY_ENV);
- ACE_CHECK;
-
- CORBA::Any_ptr ap = nv->value ();
- char *value;
- *ap >>= value;
-
- const char *object_id =
- CORBA::_tc_Object->id (ACE_TRY_ENV);
- ACE_CHECK;
-
- CORBA::Boolean result;
- if (ACE_OS::strcmp (value, "IDL:Database/Employee:1.0") == 0
- || ACE_OS::strcmp (value, "IDL:Database/Entry:1.0") == 0
- || ACE_OS::strcmp (value, object_id) == 0)
- result = 1;
- else
- result = 0;
-
- CORBA::Any result_any;
- CORBA::Any::from_boolean from_boolean (result);
- result_any <<= from_boolean;
-
- request->set_result (result_any, ACE_TRY_ENV);
- ACE_CHECK;
-}
-
-CORBA::RepositoryId
-DatabaseImpl::Entry::_primary_interface (const PortableServer::ObjectId &/*oid*/,
- PortableServer::POA_ptr,
- CORBA::Environment &)
-{
- return 0;
-}
-
-PortableServer::POA_ptr
-DatabaseImpl::Entry::_default_POA (CORBA::Environment &)
-{
- return PortableServer::POA::_duplicate (this->poa_.in ());
-}
-
-DatabaseImpl::Agent::Agent (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- CORBA::Environment &ACE_TRY_ENV)
- : orb_ (CORBA::ORB::_duplicate (orb)),
- poa_ (PortableServer::POA::_duplicate (poa)),
- common_servant_ (orb,
- poa,
- ACE_TRY_ENV)
-{
- ACE_CHECK;
-
- this->poa_->set_servant (&this->common_servant_,
- ACE_TRY_ENV);
- ACE_CHECK;
-}
-
-DatabaseImpl::Agent::~Agent (void)
-{
-}
-
-Database::Entry_ptr
-DatabaseImpl::Agent::create_entry (const char *key,
- const char *entry_type,
- const Database::NVPairSequence &initial_attributes,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Database::Unknown_Type,
- Database::Duplicate_Key))
-{
- // Create a new entry in the database:
- if (ACE_OS::strcmp (entry_type, "Employee") != 0
- || initial_attributes.length () != 2)
- ACE_THROW_RETURN (Database::Unknown_Type (),
- Database::Entry::_nil ());
-
- char *name = 0;
- CORBA::Long id = 0;
-
- const Database::NamedValue &first =
- initial_attributes[0];
- const Database::NamedValue &second =
- initial_attributes[1];
-
- if (ACE_OS::strcmp (first.name.in (), "name") != 0
- || ACE_OS::strcmp (second.name.in (), "id") != 0)
- ACE_THROW_RETURN (Database::Unknown_Type (),
- Database::Entry::_nil ());
-
- first.value >>= name;
- second.value >>= id;
-
- Employee *new_employee;
- // This attempts to create a new Employee and throws an exception
- // and returns a null value if it fails
- ACE_NEW_THROW_EX (new_employee,
- Employee (name, id),
- CORBA::NO_MEMORY ());
- ACE_CHECK_RETURN (Database::Entry::_nil ());
-
- // @@ Should check the return value here and throw an exception if
- // it fails.
- DATABASE::instance ()->bind (key,
- new_employee);
-
- ACE_DEBUG ((LM_DEBUG,
- "New employee created with name = %s and id = %d\n",
- name,
- id));
-
- // Creates a reference to the CORBA object used to encapsulate
- // access to the new entry in the database. There is an interface
- // for each entry type:
- PortableServer::ObjectId_var obj_id =
- PortableServer::string_to_ObjectId (key);
- CORBA::String_var repository_id =
- DatabaseImpl::entry_type_to_repository_id ("Entry");
-
- CORBA::Object_var obj =
- this->poa_->create_reference_with_id (obj_id.in (),
- repository_id.in (),
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (Database::Entry::_nil ());
-
- Database::Entry_var entry = Database::Entry::_narrow (obj.in (),
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (Database::Entry::_nil ());
-
- return entry._retn ();
-}
-
-Database::Entry_ptr
-DatabaseImpl::Agent::find_entry (const char *key,
- const char *entry_type,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Database::Unknown_Type,
- Database::Not_Found))
-{
- if (ACE_OS::strcmp (entry_type,
- "Employee") != 0)
- ACE_THROW_RETURN (Database::Unknown_Type (),
- Database::Entry::_nil ());
-
- void *temp;
- Database::Entry_var entry;
- if (DATABASE::instance ()->find (key, temp) == 0)
- {
- Employee *employee =
- ACE_reinterpret_cast (Employee *,
- temp);
- ACE_DEBUG ((LM_DEBUG,
- "Employee with key = %s found: name = %s and id = %d\n",
- key,
- employee->name (),
- employee->id ()));
-
- // Creates a reference to the CORBA object used to encapsulate
- // access to the new entry in the database. There is an
- // interface for each entry type:
- PortableServer::ObjectId_var obj_id =
- PortableServer::string_to_ObjectId (key);
- CORBA::String_var repository_id =
- DatabaseImpl::entry_type_to_repository_id ("Entry");
- CORBA::Object_var obj =
- this->poa_->create_reference_with_id (obj_id.in (),
- repository_id.in (),
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (Database::Entry::_nil ());
-
- entry = Database::Entry::_narrow (obj.in (),
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (Database::Entry::_nil ());
- }
- else
- {
- ACE_DEBUG ((LM_DEBUG,
- "Employee with key = %s not found\n",
- key));
-
- ACE_THROW_RETURN (Database::Not_Found (),
- Database::Entry::_nil ());
- }
-
- return entry._retn ();
-}
-
-void
-DatabaseImpl::Agent::destroy_entry (const char *key,
- const char *entry_type,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Database::Unknown_Type,
- Database::Unknown_Key))
-{
- if (ACE_OS::strcmp (entry_type, "Employee") != 0)
- ACE_THROW (Database::Unknown_Type ());
-
- void *temp;
- if (DATABASE::instance ()->unbind (key, temp) == 0)
- {
- Employee *employee =
- ACE_reinterpret_cast (Employee *,
- temp);
- ACE_DEBUG ((LM_DEBUG,
- "Employee with key = %s will be removed from the database: "
- "name = %s and id = %d \n",
- key,
- employee->name (),
- employee->id ()));
-
- delete employee;
- }
- else
- {
- ACE_DEBUG ((LM_DEBUG,
- "Employee with key = %s not found\n",
- key));
-
- ACE_THROW (Database::Unknown_Key ());
- }
-}
-
-void
-DatabaseImpl::Agent::shutdown (CORBA::Environment &)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown ();
-}
-
-PortableServer::POA_ptr
-DatabaseImpl::Agent::_default_POA (CORBA::Environment &)
-{
- return PortableServer::POA::_duplicate (this->poa_.in ());
-}
-
-char *
-DatabaseImpl::entry_type_to_repository_id (const char *entry_type)
-{
- static const char *prefix = "IDL:Database/";
- static int prefix_length = ACE_OS::strlen (prefix);
- static const char *suffix = ":1.0";
- static int suffix_length = ACE_OS::strlen (prefix);
-
- int len =
- prefix_length +
- ACE_OS::strlen (entry_type) +
- suffix_length +
- 1;
-
- char *result = CORBA::string_alloc (len);
- ACE_OS::sprintf (result,
- "%s%s%s",
- prefix,
- entry_type,
- suffix);
- return result;
-}
-
-DatabaseImpl::Employee::Employee (const char* name,
- CORBA::Long id)
- : id_ (id),
- name_ (0)
-{
- this->name (name);
-}
-
-DatabaseImpl::Employee::~Employee (void)
-{
- DATABASE::instance ()->free (this->name_);
-}
-
-const char *
-DatabaseImpl::Employee::name (void) const
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return this->name_;
-}
-
-void
-DatabaseImpl::Employee::name (const char* name)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- DATABASE::instance ()->free (this->name_);
-
- this->name_ =
- (char *) DATABASE::instance ()->malloc (ACE_OS::strlen (name) + 1);
-
- ACE_OS::strcpy (this->name_,
- name);
-}
-
-CORBA::Long
-DatabaseImpl::Employee::id (void) const
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return this->id_;
-}
-
-void
-DatabaseImpl::Employee::id (CORBA::Long id)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->id_ = id;
-}
-
-void *
-DatabaseImpl::Employee::operator new (size_t size)
-{
- return DATABASE::instance ()->malloc (size);
-}
-
-void
-DatabaseImpl::Employee::operator delete (void *pointer)
-{
- DATABASE::instance ()->free (pointer);
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Malloc<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex>;
-template class ACE_Malloc_Iterator<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex>;
-template class ACE_Singleton<DatabaseImpl::Simpler_Malloc, ACE_Null_Mutex>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Malloc<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex>
-#pragma instantiate ACE_Malloc_Iterator<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex>
-#pragma instantiate ACE_Singleton<DatabaseImpl::Simpler_Malloc, ACE_Null_Mutex>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */