ANNA Suite  2020b
Multipurpose development suite for Telco applications
Static Public Member Functions | Protected Member Functions | Static Protected Attributes | List of all members
anna::dbos::ObjectFacade< T > Class Template Reference

#include <ObjectFacade.hpp>

Collaboration diagram for anna::dbos::ObjectFacade< T >:
Collaboration graph
[legend]

Static Public Member Functions

static StorageId getStorageAreaId ()
 
static StorageAreagetStorageArea ()
 
static void setStorageArea (StorageArea *storageArea)
 
static T * instance (dbms::Connection &connection, Loader &loader) noexcept(false)
 
static T * instance (Loader &loader) noexcept(false)
 
static T * instance (dbms::Connection &connection, CrossedLoader &crossedLoader, Loader &loader) noexcept(false)
 
static T * create (dbms::Connection &connection, Creator &creator) noexcept(false)
 
static T * find (Loader &loader) noexcept(false)
 
static void release (T *&t)
 
static void clear () noexcept(false)
 
static T * duplicate (const T *t) noexcept(false)
 
static bool isLoaded (const Loader &loader) noexcept(false)
 
static void apply (dbms::Connection &connection, Recorder &recorder) noexcept(false)
 
static void apply (dbms::Connection &connection, Eraser &eraser) noexcept(false)
 
static void erase (T *&t) noexcept(false)
 
static T * data (StorageArea::iterator &ii)
 
static const T * data (StorageArea::const_iterator &ii)
 
static Objectallocator ()
 

Protected Member Functions

 ObjectFacade ()
 

Static Protected Attributes

static StorageAreast_storageArea
 

Detailed Description

template<typename T>
class anna::dbos::ObjectFacade< T >

Clase que facilita el acceso y uso de las clases encargadas de la instanciacion de objetos a partir de los datos contenidos en un medio fisico, que normalmente seria la tabla de una base de datos.

Parameters
Tclase debe ser heredada de anna::dbos::Object.

Ejemplo de definicion de una clase usando esta interfaz:

Ejemplo de implementacion de la clase correspondiente a la definicion:

See also
dbos_declare_object
dbos_prepare_object

Constructor & Destructor Documentation

◆ ObjectFacade()

template<typename T>
anna::dbos::ObjectFacade< T >::ObjectFacade ( )
inlineprotected

Constructor.

381 {}

Member Function Documentation

◆ allocator()

template<typename T>
static Object* anna::dbos::ObjectFacade< T >::allocator ( )
inlinestatic

Metodo creador de nuevas instancias de la clase T.

Returns
Una nueva instancia del tipo de objeto T.
Warning
Solo deberia ser llamado desde anna::comm::StorageArea cuando sea preciso crear nuevas instancias de objetos.
373 { return new T; }

◆ apply() [1/2]

template<typename T>
static void anna::dbos::ObjectFacade< T >::apply ( dbms::Connection connection,
Recorder recorder 
)
inlinestaticnoexcept

Transfiere la informacion del objeto recibido como parametro al medio fisico usando el Recorder recibido como parametro.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
recorderGrabador usado para transferir los datos al medio fisico.
306  {
307  if(st_storageArea == NULL) {
308  std::string msg(recorder.asString());
309  msg += " | ObjectFacade uninitialized";
310  throw RuntimeException(msg, ANNA_FILE_LOCATION);
311  }
312 
313  st_storageArea->apply(connection, recorder);
314  }
void apply(dbms::Connection &connection, Recorder &recorder) noexcept(false)
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ apply() [2/2]

template<typename T>
static void anna::dbos::ObjectFacade< T >::apply ( dbms::Connection connection,
Eraser eraser 
)
inlinestaticnoexcept

Elimina la informacion del objeto recibido como parametro del medio fisico usando el Eraser recibido como parametro.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
eraserObjecto usado para eliminar los datos al medio fisico.
Warning
Si la cuanta de utilizacion de T es 1 se liberaria en otro caso se devolveria una excepcion.
326  {
327  if(st_storageArea == NULL) {
328  std::string msg(eraser.asString());
329  msg += " | ObjectFacade uninitialized";
330  throw RuntimeException(msg, ANNA_FILE_LOCATION);
331  }
332 
333  st_storageArea->apply(connection, eraser);
334  }
void apply(dbms::Connection &connection, Recorder &recorder) noexcept(false)
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ clear()

template<typename T>
static void anna::dbos::ObjectFacade< T >::clear ( )
inlinestaticnoexcept

Descarga todos los objetos contenidos en el area de almacenamiento.

256  {
257  if(st_storageArea == NULL)
258  throw RuntimeException("ObjectFacade uninitialized ", ANNA_FILE_LOCATION);
259 
261  }
void clear() noexcept(false)
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ create()

template<typename T>
static T* anna::dbos::ObjectFacade< T >::create ( dbms::Connection connection,
Creator creator 
)
inlinestaticnoexcept

Crea un objeto en el area de almacenamiento un y lo prepara para ser transferido al medio fisico si fuera necesario.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario acceder al medio fisico.
creatorCreador encargado de generar el objeto de forma que sea facil de localizar posteriormente en el area de almacenamiento.
Returns
La nueva instancia que cumple el patron establecido por el creador.
Warning
Cada llamada a este metodo deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
190  {
191  if(st_storageArea == NULL) {
192  std::string msg(creator.asString());
193  msg += " | ObjectFacade uninitialized ";
194  throw RuntimeException(msg, ANNA_FILE_LOCATION);
195  }
196 
197  return static_cast <T*>(st_storageArea->create(connection, creator));
198  }
Object * create(dbms::Connection &connection, Creator &creator) noexcept(false)
Definition: StorageArea.hpp:295
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ data() [1/2]

template<typename T>
static T* anna::dbos::ObjectFacade< T >::data ( StorageArea::iterator ii)
inlinestatic

Devuelve el puntero sobre el que estaria posicionado el iterador recibido como parametro.

Returns
El puntero sobre el que estaria posicionado el iterador recibido como parametro.
359 { return static_cast <T*>(StorageArea::data(ii)); }
static Object * data(iterator ii)
Definition: StorageArea.hpp:483

◆ data() [2/2]

template<typename T>
static const T* anna::dbos::ObjectFacade< T >::data ( StorageArea::const_iterator ii)
inlinestatic

Devuelve el puntero sobre el que estaria posicionado el iterador recibido como parametro.

Returns
El puntero sobre el que estaria posicionado el iterador recibido como parametro.
365 { return static_cast <const T*>(StorageArea::data(ii)); }
static Object * data(iterator ii)
Definition: StorageArea.hpp:483

◆ duplicate()

template<typename T>
static T* anna::dbos::ObjectFacade< T >::duplicate ( const T *  t)
inlinestaticnoexcept

Devuelve de una copia del objeto recibido como parametro e incrementa la cuenta de utilizacion asociada a la instancia.

Parameters
tInstancia del tipo T obtenida mediate el metodo instance.
Returns
Una copia del objeto recibido como parametro. Si el parametro recibido es NULL devolveria NULL.
Warning
Cada llamada a este metodo deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
275  {
276  if(st_storageArea == NULL)
277  throw RuntimeException("ObjectFacade uninitialized ", ANNA_FILE_LOCATION);
278 
279  return static_cast <T*>(st_storageArea->duplicate(t));
280  }
Object * duplicate(const Object *object) noexcept(false)
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ erase()

template<typename T>
static void anna::dbos::ObjectFacade< T >::erase ( T *&  t)
inlinestaticnoexcept

Elimina toda la informacion referente al objeto recibido como parametro, siempre y cuando solo tenga un unica referencia activa. Descarga el objeto de la memoria de almacenamiento,

Parameters
tInstancia del tipo T que vamos a descargar de la memoria de almacenamiento.
Warning
  • Si el objeto recibido como parametro no fue reservado mediate instance no tiene ningun efecto.
  • La instancia a liberar solo puede tener 1 en su cuenta de utilizacion.
  • La memoria asignada a la instancia recibida es liberada, por lo que podemos evitar la invocacion al metodo release para esta instancia.
348  {
349  if(st_storageArea == NULL)
350  return;
351 
352  st_storageArea->erase(reinterpret_cast <Object**>(&t));
353  }
void erase(Object **object) noexcept(false)
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ find()

template<typename T>
static T* anna::dbos::ObjectFacade< T >::find ( Loader loader)
inlinestaticnoexcept

Devuelve la informacion de un objeto cargado desde el medio fisico.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe buscar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
loaderCargador de clase encargado de localizar la informacion referente al objeto buscado.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL si el objeto no fue cargado en el area de almacenamiento.
Warning
Cada llamada a este metodo deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
217  {
218  if(st_storageArea == NULL) {
219  std::string msg(loader.asString());
220  msg += " | ObjectFacade uninitialized ";
221  throw RuntimeException(msg, ANNA_FILE_LOCATION);
222  }
223 
224  return static_cast <T*>(st_storageArea->find(loader));
225  }
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
Object * find(Loader &loader) noexcept(false)
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ getStorageArea()

template<typename T>
static StorageArea* anna::dbos::ObjectFacade< T >::getStorageArea ( )
inlinestatic

Devuelve el area de almacenamiento asociado a esta clase.

Returns
Devuelve el area de almacenamiento asociado a esta clase.
63 { return st_storageArea; }
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ getStorageAreaId()

template<typename T>
static StorageId anna::dbos::ObjectFacade< T >::getStorageAreaId ( )
inlinestatic

Devuelve un numerico que puede ser usado en la definicion del area de almacenamiento.

Returns
Un numerico que puede ser usado en la definicion del area de almacenamiento.
See also
Database::createStorageArea
#define anna_ptrnumber_cast(pointer)
Definition: defines.hpp:118
ptrnumber StorageId
Definition: defines.hpp:19
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ instance() [1/3]

template<typename T>
static T* anna::dbos::ObjectFacade< T >::instance ( dbms::Connection connection,
Loader loader 
)
inlinestaticnoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar el area de almacenamiento asociado a esta clase se halla indicado un errorCode igual a -1 en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion.
Warning
Cada llamada a este metodo deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
99  {
100  if(st_storageArea == NULL) {
101  std::string msg(loader.asString());
102  msg += " | ObjectFacade uninitialized ";
103  throw RuntimeException(msg, ANNA_FILE_LOCATION);
104  }
105 
106  return static_cast <T*>(st_storageArea->instance(connection, loader));
107  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ instance() [2/3]

template<typename T>
static T* anna::dbos::ObjectFacade< T >::instance ( Loader loader)
inlinestaticnoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar.

Parameters
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar el area de almacenamiento asociado a esta clase se halla indicado un errorCode igual a -1 en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion.
Warning
Cada llamada a este metodo deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
128  {
129  if(st_storageArea == NULL) {
130  std::string msg(loader.asString());
131  msg += " | ObjectFacade uninitialized ";
132  throw RuntimeException(msg, ANNA_FILE_LOCATION);
133  }
134 
135  return static_cast <T*>(st_storageArea->instance(loader));
136  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ instance() [3/3]

template<typename T>
static T* anna::dbos::ObjectFacade< T >::instance ( dbms::Connection connection,
CrossedLoader crossedLoader,
Loader loader 
)
inlinestaticnoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
crossedLoaderCargador encargado de encontrar la clave principal a aplicar con el #Loader recibido como parámetro en base a una clave alternativa contenida en el mismo.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un #NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
161  {
162  if(st_storageArea == NULL) {
163  std::string msg(loader.asString());
164  msg += " | ObjectFacade uninitialized ";
165  throw RuntimeException(msg, ANNA_FILE_LOCATION);
166  }
167 
168  return static_cast <T*>(st_storageArea->instance(connection, crossedLoader, loader));
169  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ isLoaded()

template<typename T>
static bool anna::dbos::ObjectFacade< T >::isLoaded ( const Loader loader)
inlinestaticnoexcept

Permite conocer si un determinado objeto esta alojado en el area de almacenamiento.

Parameters
loaderCargador de clase encargado de localizar la informacion referente al objeto buscado.
Returns
true Si el objeto identificado por el Loader esta en el area de almacenamiento o false en otro caso.
291  {
292  if(st_storageArea == NULL)
293  throw RuntimeException("ObjectFacade uninitialized ", ANNA_FILE_LOCATION);
294 
295  return st_storageArea->isLoaded(loader);
296  }
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
bool isLoaded(const Loader &loader) noexcept(false)
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ release()

template<typename T>
static void anna::dbos::ObjectFacade< T >::release ( T *&  t)
inlinestatic

Habilita la reutilizacion del espacio de memoria ocupado por un objeto alojado en el area de almacenamiento.

Este metodo no saca al objeto de la memoria de almacenamiento, sino que marca su espacio de memoria como subceptible de ser reutilizado. De esta forma, si el numero de objetos cargados en memoria se acerca al tamao maximo indicado en la inicializacion, se intentara reusar espacios libres en vez de continuar ampliando la memoria reservada.

Parameters
tInstancia del tipo T que vamos a liberar.
Warning
Si el objeto recibido como parametro no fue reservado mediate alguno de los metodos de reserva de objetos ofrecidos por esta clase no tendra ningun efecto.
241  {
242  if(st_storageArea == NULL)
243  return;
244 
245  try {
246  st_storageArea->release(reinterpret_cast <Object**>(&t));
247  } catch(RuntimeException& ex) {
248  ex.trace();
249  }
250  }
void release(Object **object) noexcept(false)
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

◆ setStorageArea()

template<typename T>
static void anna::dbos::ObjectFacade< T >::setStorageArea ( StorageArea storageArea)
inlinestatic

Establece el area de almacenamiento asociado a esta clase, que deberiaser creado mediante la invocacin al metodo Database::createStorageArea.

Parameters
storageAreaarea de almacenamiento asociada esta clase.
Warning
El area de almacenamiento debe establecerse antes de invocar a cualquier otro metodo de esta clase.
73  {
74  (st_storageArea = storageArea)->setSizeof(sizeof(T));
75  }
static StorageArea * st_storageArea
Definition: ObjectFacade.hpp:376

Member Data Documentation

◆ st_storageArea

template<typename T>
StorageArea* anna::dbos::ObjectFacade< T >::st_storageArea
staticprotected

The documentation for this class was generated from the following file: