X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbos%2FAutoObject.hpp;fp=include%2Fanna%2Fdbos%2FAutoObject.hpp;h=0000000000000000000000000000000000000000;hb=851ff2962362fd5bad874e8ed91445b296eaca24;hp=6c3992ecb253a87a9691e52b103604c54be7aa3e;hpb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;p=anna.git diff --git a/include/anna/dbos/AutoObject.hpp b/include/anna/dbos/AutoObject.hpp deleted file mode 100644 index 6c3992e..0000000 --- a/include/anna/dbos/AutoObject.hpp +++ /dev/null @@ -1,152 +0,0 @@ -// ANNA - Anna is Not Nothingness Anymore // -// // -// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // -// // -// See project site at http://redmine.teslayout.com/projects/anna-suite // -// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // - - -#ifndef anna_dbos_AutoObject_hpp -#define anna_dbos_AutoObject_hpp - -#include - -namespace anna { - -namespace dbos { - - -/** - Facilita el uso de los punteros a objectos obtenidos a partir de los datos guardados en un medio fisico. - - La idea de esta clase es que el constructor y el destructor de esta clase cooperan para reservar y/o - liberar correctamente la instancia de T asociada a esta instancia. - - \param T Clase que vamos a gestionar. - - En el siguiente ejemplo podemos ver la forma habitual de trabajar con un objeto persistente tiene - el incoveniente de que tenemos que tener en cuenta cada una de las situaciones en las que la - referencia obtenida mediante el metodo \em instantiate debe ser liberada. - - \code - void Application::getServerSocketsData (vector & serverSocketsData) const - throw (RuntimeException) - { - LOGMETHOD (TraceMethod ("anna::Application", "getServerSocketsData", ANNA_FILE_LOCATION)); - - Facility* facility (NULL); - FacilityLoader facilityLoader; - - try { - facility = Facility::instantiate (facilityLoader.setKey (a_thisFacility)); // (1) - LOGDEBUG (Logger::write (Logger::Debug, facility->asString (), ANNA_FILE_LOCATION)); - - getSocketsData (getThisHostName (), facility->getName (), a_thisCell, a_thisInstance, serverSocketsData); - - Facility::release (facility); - } - catch (dbos::DatabaseException& edbos) { - Facility::release (facility); - throw RuntimeException (edbos.getText (), ANNA_FILE_LOCATION); - } - catch (RuntimeException&) { // Tenemos que capturar esta excepcion para liberar el recurso. - Facility::release (facility); - throw; - } - } - \endcode - - Como podemos ver a continuacion el siguiente metodo es mucho mas sencillo y aporta la gran ventaja de que - el sistema trabaja por nosotros para liberar correctamente los recursos. - - \code - void Application::getServerSocketsData (vector & serverSocketsData) const - throw (RuntimeException) - { - LOGMETHOD (TraceMethod ("anna::Application", "getServerSocketsData", ANNA_FILE_LOCATION)); - - AutoObject facility; - FacilityLoader facilityLoader; - - try { - facility = Facility::instantiate (facilityLoader.setKey (a_thisFacility)); // (1) - - LOGDEBUG (Logger::write (Logger::Debug, facility->asString (), ANNA_FILE_LOCATION)); - - getSocketsData (getThisHostName (), facility->getName (), a_thisCell, a_thisInstance, serverSocketsData); - } - catch (dbos::DatabaseException& edbos) { - throw RuntimeException (edbos.getText (), ANNA_FILE_LOCATION); - } - } - \endcode -*/ -template class AutoObject { -public: - /** - Constructor. - \param t Instancia del objeto asociado a esta instancia. - \warning La instancia deberia haber sido obtenida mediate la invocacion a \em T::instantiate de la - clase persistente. - */ - explicit AutoObject(T* t) : a_t(t) {;} - - /** - Constructor. - */ - AutoObject() : a_t(NULL) {;} - - /** - Destructor. Invoca al metodo \em T::release - */ - ~AutoObject() { if(a_t != NULL) T::release(a_t); } - - /** - Operador -> - Permite invocar a metodos de la clase T. - \return La instancia de la clase T asociada a esta instancia. - */ - T* operator -> () const throw() { return a_t; } - - /** - Operador copia. - \param t Referencia al objeto que vamos a tratar. - \return La instancia de la clase T asociada a esta instancia. - */ - T* operator = (T* t) throw() { - if(a_t != t) { - T::release(a_t); - a_t = t; - } - - return a_t; - } - - /** - Operador copia. - \param other Referencia al objeto que vamos a tratar. - \return La instancia de la clase T asociada a esta instancia. - */ - T* operator = (const AutoObject & other) throw(RuntimeException) { - return (this != &other) ? (*this = T::duplicate(other.a_t)) : a_t; - } - - /** - Operador de conversion. - \return La instancia de la clase T asociada a esta instancia. - */ - operator T*() const throw() { return a_t; } - -private: - T* a_t; -}; - - -} -} - - - -#endif - -