sábado, 1 de agosto de 2009

Conectando extjs con el server side usando spring framewok

Una de las ventajas de extjs es que permite fácilmente poder prototipar sin tener que construir ninguna pieza server side. Con este tipo de frameworks es posbile definir como origen de datos de un combo un archivo json:

// Armo filtros
var comboFilter = new Ext.form.ComboBox({
store: new Ext.data.JsonStore({
autoLoad: true,
url: 'services/sales/filter/brands.json',
root: 'data',
fields: ['id', 'name']
}),
valueField: 'id',
displayField: 'name',
triggerAction: 'all',
forceSelection: true,
mode: 'remote',
loadingText: 'Loading...'
})

Para mayor claridad estoy usando url amigables. La url services/sales/filter/brand.json me dice que quiero obtener del dashboard de ventas, el filtro de marcas, en formato json.

Spring, ademas de ser un IoC/DI container, provee una buena forma de manejar friendly urls. Vamos a explicar paso a paso como usar spring como un pegamento entre client side y server side.

1ro Configurar spring web para escuchar los request en /services:

2do Configurar spring mvc para que la url services/sales/filter sea resuelta con el controller OlapServiceController:

3ero Implementar OlapServiceController. Este es quien realiza la ejecucion del servicio (service layer) que devuelve el filtro y selecciona la vista filter2json.jsp para renderizar el filtro en formato json:

Algo interesante de esta implementación es el bajo acople que hay entre el front end (extjs) y backend (jsp, spring, java, mondrian, etc.). Trabajar con simples urls permite definir un punto de entrada y abstraer totalmente su implementación. Sería posible tener fácilmente más de un server resolviendo peticiones (si los servicios son stateless) o acceder al servicio en la nube y escalar ondemand.

Otra posibilidad interesante es al tener un front end estático, es posible aplicar técnicas de caché en el browser para disminuir la cantidad de request, o distribuirlo a través de una cdn.

Y por último sería "no tan difícil" darle features offiline a la aplicación usando google gears (http://gears.google.com/). Aunque sobre esto me gustaría profundizar un poco más en otro post.

No hay comentarios.: