1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_comm_IndexedDelivery_hpp
10 #define anna_comm_IndexedDelivery_hpp
12 #include <anna/comm/Service.hpp>
23 Servicio de reparto de peticiones. Selecciona el destino de la proxima peticion en base una clave numerica de forma
24 que el recurso usado sera el que ocupe la posicicion i-esima. Donde i = key % N, donde key es la clave recibida
25 y N es el numero total de recursos definidos en este reparto.
27 class IndexedDelivery : public comm::Service {
30 Define las formas de actuar de comm::IndexedDelivery en caso de error.
34 Strict, /**< Si el servicio seleccionado no esta disponible aborta el envio del mensaje */
35 Flexible /**< Si el servicio seleccionado no esta disponible pasa al siguiente disponible */
41 \param name Nombre logico del servicio de reparto de carga.
42 \param isCritical Indica las caracteristicas del reparto de carga. Debe valor \em true si el
43 reparto de carga a crear es critico o \em false en otro caso.
44 \param mode Modo de actuar en caso de que el recurso seleccionado no este disponible.
46 IndexedDelivery(const char* name, const bool isCritical, const Mode::_v mode) :
47 comm::Service(name, isCritical),
53 Establece la clave que se usara para decidir el comm::Server al que se va a enviar el mensaje.
54 \param key Clave usada para calcular el servidor destino.
55 \warning Este metodo debe invocarse siempre antes de enviar un mensaje.
57 void prepare(const int key) throw(RuntimeException);
59 std::string asString() const throw();
61 xml::Node* asXML(xml::Node* parent) const throw();
64 Metodo que devuelve el nombre completo de este selector de recursos.
65 Para evitar ambiguedades este nombre incluye la lista completa de \em namespaces
66 a los que pertenece la clase.
67 \return Una cadena con el nombre de este selector.
69 static const char* className() throw() { return "anna::comm::IndexedDelivery"; }
72 //------------------------------------------------------------------------------------
73 // - a_iiserver: iterador que apunta al servidor que debemos usar.
74 //------------------------------------------------------------------------------------
75 const Mode::_v a_mode;
78 virtual void do_initialize() throw(RuntimeException) {;}
79 comm::Resource* do_apply() throw(RuntimeException);