template<typename T>
class anna::dbos::AutoObject< T >
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.
- Parameters
-
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 instantiate debe ser liberada.
void Application::getServerSocketsData (vector <SocketData>& serverSocketsData) const
noexcept(false)
{
Facility* facility (NULL);
FacilityLoader facilityLoader;
try {
facility = Facility::instantiate (facilityLoader.setKey (a_thisFacility));
getSocketsData (getThisHostName (), facility->getName (), a_thisCell, a_thisInstance, serverSocketsData);
Facility::release (facility);
}
catch (dbos::DatabaseException& edbos) {
Facility::release (facility);
}
catch (RuntimeException&) {
Facility::release (facility);
throw;
}
}
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.
void Application::getServerSocketsData (vector <SocketData>& serverSocketsData) const
noexcept(false)
{
AutoObject <Facility> facility;
FacilityLoader facilityLoader;
try {
facility = Facility::instantiate (facilityLoader.setKey (a_thisFacility));
getSocketsData (getThisHostName (), facility->getName (), a_thisCell, a_thisInstance, serverSocketsData);
}
catch (dbos::DatabaseException& edbos) {
}
}