Antes de nada quiero daros las gracias por las respuestas.
@Marcelo Morales:
Si te soy sincero desconozco cuantos usuarios van a estar conectados a
la web. Me ha faltado decir que no es una aplicación para la intranet
de una empresa ni un sistema de gestión digamos corporativo. El
proyecto una vez en producción en internet vaya bien o mal debe ser
poco glotón de memoria porque al principio irá en un hosting con unas
prestaciones medias.
Por lo que he leido si se usa un objeto IModel en el método model del
IDataProvider pueden aparecer problemas debido a la serialización
(como tu apuntas), por eso había pensado en escribir el código
utilizando un LDM.
Me imagino que mi problema es que no utilizo hibernate ni ningun layer
que me haga de proxy entre mi aplicación y wicket. Siempre he sido
desarrollador de
ASP.NET y la idea era empezar con un framework
sencillo, y con las mínimas capas de abstracción posibles para hacer
todo algo más entendible.
Mi acceso a datos lo realizo yo con clases que directamente consumen
procedimientos almacenados de mysql , normalmente devuelven recordset
cacheados y cuando relleno el iterator libero todos los recursos que
he utilizado.
Por eso quizá me pareceron un poco locura los ejemplos oficiales de
wicket del componente DataView donde retornan un iterator con las
filas de la BBDD y luego por cada fila creaba un LDM cual
aparentemente almacenan la primary key del objeto para después cuando
se invoca automáticamente al método load del LDM recuperar ese objeto
de la BBDD. Digo de la BBDD aunque imagino que hibernate cuando
devolvió datos para el iterator cacheó esos objetos que ahora el
método load del LDM va a recuperar de esa misma caché y no de la BBDD
como ocurriría en mi aplicación en la que el DAO es escrito por mí con
la máxima simplicidad posible (realmente escrito como lo hubiera
escrito en ASP.NET... supongo que cualquier programador me entenderá,
tiramos hacia lo conocido!!)
Al final y disculpa por enrollarme, pienso que esta puede ser una
buena implementación de LDM para un IDataProvider que se utilizará en
un DataView que únicamente mostrará filas, es decir, no hay acciones
de fila ni de celda por lo tanto no habrá que recuperar el model a
posteriori.
public class DetachableContactModel extends LoadableDetachableModel
{
public DetachableContactModel(Contact c)
{
/*Internamente "c" se almacena en private transient T
transientModelObject; con lo cual al finalizar el render de la página
todos estos recursos son liberados de manera implícita*/
super(c);
}
protected Object load()
{
// recuperamos el objeto para que el dataview pueda
"alimentar" los distintos label que muestran los datos de la fila
return this.getObject();
// Esto es lo que se suele ver en ejemplos: return
getContactsDB().get(id); Me imagino que muy util cuando se utiliza
hibernate...
}
Creo que esta implementación de LDM no serviría para un dataview que
tenga un botón que por ejemplo haga un sumatorio en una determinada
fila ya que no podría recuperar el modelo al haber sido eliminado en
el método detach de el LDM de manera automática.
Me imagino que por eso en el evento load , ayudándose de un ID (no
transient) almacenado en el LDM recuperan el objeto de la capa DAO.
(return getContactsDB().get(id);)
Muchas gracias por tu ayuda.
On 28 feb, 18:43, Juan I Felice <
jeik...@gmail.com> wrote:
> hola yo uso dataprovider y la consulta se ejecuta una sola vez
> y lo hago invocando a un webservice
>
> El 28 de febrero de 2011 06:05, Juansoft
> <
juanandrescallejago...@gmail.com>escribió: