----------------------------------------------------------

Pedro del Gallego's Weblog

Main | Next day (ago 14, 2003) »

20030813 miércoles agosto 13, 2003

Revisado : El patron Front Controller 1ª parte Bueno siguiendo el consejo de Al, he decidido cambiar la implementacion del ActionFactory para que solo se instancie una vez cada accion y luego se reutilice esta instancia el resto de las veces.

public class AccionFactory {
// tabla para guardar las acciones
private static Hashtable mapaAcciones = new Hashtable();

public static Accion getAccion(String accion){
Accion action = (Accion) mapaAcciones.get(accion); if (action==null){
try { action = (Accion)Class.forName(accion).newInstance();
mapaAcciones.put(accion, action);
} catch (InstantiationException e) { System.out.println("Error al instanciar la clase"); e.printStackTrace(); } catch (IllegalAccessException e) { System.out.println("Acceso Ilegal a no se que ¿?"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("Tas tonto esa clase no existe"); e.printStackTrace(); }
}
return action;
} }


Bueno en principio cada clase que implemente accion se instancia una unica vez y es almacenada en una Hashtable. Pero no daria esto problemas de concurrencia si se solicitan a la vez dos instancias de esa accion? no termino de verlo del todo claro... voy a darle un par de vueltas a ver si veo donde me he perdido. + criticas please...

Bueno a parte de esto he hecho una pequeña modificacion para que el fichero de configuracion quedase tal que asi:

comprar=comprarAccion
elegir=elegirAccion
devolver=devolveAccion
buscar=buscarAccion
inicio=inicioAccion

Que siempre queda algo mas fino. Para extraer la accion de la URI he añadido el metodo

private String getClassName(String nombre){ int barra = nombre.lastIndexOf("/");
int punto = nombre.lastIndexOf(".");
if ((barra<=0)&&(punto<=0)) return nombre;
return nombre.substring(barra+1,punto);
}

PD Al, de esta semana no pasa que no me baje el codigo y la documentacion de Cañamo. No se si sabre implementar algo o sugerir alguna mejora del diseño, pero por lo menos que no se diga que no lo intento (Que despues hablamos de sensacion de comunidad y de implicacion, y yo soy el primero en dar mal ejemplo). Ademas que ya has tirado unas cuantas indirectas y muchos nos hacemos lo locos, ya va siendo hora. ( ago 13 2003, 05:35:22 PM CEST ) Permalink Comentarios [5]