--- /dev/null
+// 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_dbms_Delivery_hpp
+#define anna_dbms_Delivery_hpp
+
+#include <anna/comm/Delivery.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+class Connection;
+
+/**
+ Agrupacion logica de conexiones con la base de datos. Reparte la carga de las transacciones contra
+ la base de datos entre las distintas conexiones que contenga esta instancia. Ademas en caso de estar
+ en una ejecucion con soporte para multithread (ver anna::functions::supportMultithread) asegura
+ que cada uno de los threads siempre utiliza la misma conexion lo cual asegura el mantinimiento de la
+ integridad de cada una de las transacciones de los threads.
+*/
+class Delivery : comm::Delivery {
+public:
+ /**
+ Constructor.
+ @param name Nombre logico de este grupo de conexiones.
+ */
+ Delivery(const char *name) : comm::Delivery(name) {;}
+
+ /**
+ Crea automaticamente las conexiones a la base de datos recibida como parametro con el usuario/password
+ indicado.
+ \param database Instancia de la base de datos contra la que realizamos la conexion.
+ \param prefixName Prefijo del nombre logico de la conexiones que vamos a crear. El resto del nombre vendra
+ dado por el numero secuencial de la conexion.
+ \param user Nombre del usuario con el que realizamos la conexion.
+ \param password Codigo de acceso del usuario.
+ \param n Numero de conexion a crear.
+ \warning Recordar que el numero maximo de conexiones a una base de datos esta limitado por Database::maxConnection.
+ */
+ void createConnections(Database& database, const char* prefixName, const char* user, const char* password, const int n)
+ throw(RuntimeException, DatabaseException);
+
+ /**
+ Incorpora al conexion recibida como parametro a la agrupacion logica.
+ \param connection Conexion que vamos a incorporar a la agrupacion logica.
+ */
+ void addConnection(Connection* connection) throw(RuntimeException) {
+ this->add(connection);
+ a_iiConnection = this->begin();
+ }
+
+ /**
+ Devuelve la instancia de la conexion a base de datos con la que debemos trabajar.
+ @return la instancia de la conexion a base de datos con la que debemos trabajar.
+ \warning La conexion debe ser bloqueada por el Thread que la recibe (ver anna::Guard) para asegurar que
+ cualquier otro thread que intente acceder a ella queda bloqueado a la espera de que terminemos de
+ trabajar sobre ella.
+ */
+ Connection& getConnection() throw(RuntimeException);
+
+private:
+ iterator a_iiConnection;
+
+ void do_initialize() throw() { a_iiConnection = begin(); }
+ comm::Resource* do_apply() throw(RuntimeException);
+ static Connection* connection(iterator& ii) { return (Connection*) comm::Delivery::resource(ii); }
+
+};
+
+}
+}
+
+#endif