16 March 2009 (Posted in category Java)

Performance hacking: materialized views con Oracle

El otro día me puse a tratar de bajar los tiempos de la bandeja de entrada del workflow de jurisprudencia que tenemos acá en La Ley. Veníamos arrastrando el tuning de performance hace bastante y además le prometí a Marta [1] que le iba a solucionar sus problemas.

Si bien Hibernate nos da una serie de herramientas para mejorar la performance controlando la manera en que se va a buscar la información, me encontré con que este caso requería algo más. Desde el punto de vista nuestro, apuntamos a bajar la cantidad de queries que ejecutamos en el DBMS y, especialmente, que esa cantidad de queries no sea proporcional a los elementos que vamos a buscar (n+1) sino que se mantenga, en lo posible, en un número fijo.

Okay, el problema venía por lo siguiente. Vean este snippet en la clase AreaGeografica: Leer más »


Juan Isern

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Juan Isern    



13 March 2009 (Posted in category Java)

Compartiendo datos por toda la aplicación

Muchas veces necesitamos acceder a datos desde diferentes lugares de una aplicación, esto incluye diferentes módulos, diferentes paquetes o jars, y sobre todo diferentes métodos. Muchas veces, el costo de pasar algo por parámetro desde un lugar a otro (incluyendo todos los métodos que se invocan en el medio) es demasiado alto y complicado como para elegir esta opción.

El patrón creacional Singleton, parece ser una excelente alternativa para estas situaciones, sin embargo al usarlo en aplicaciones web o multiusuario surgen problemas de concurrencia, y de accesos desde diferentes hilos que modifican la información que en realidad queríamos guardar.

Es en estos casos cuando podemos utilizar el viejo truco del Singleton ThreadLocal.

Leer más »


Sebastian Rosenbolt

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Sebastian Rosenbolt    



12 March 2009 (Posted in category Java)

Websphere con Intellij IDEA – Debugger hangs

Buenas,

Si bien este post está orientado a los usuarios del mejor IDE de desarrollo (je), los que usen Eclipse también pueden leerlo ya que el problema se les puede presentar.

- Entorno:

  1. IBM Websphere 6.1
  2. Intellij IDEA 7/8
  3. IBM J9 VM (build 2.3, J2RE 1.5.0)

- Problemática:

Leer más »


Matias Baldini

2 votes, average: 4.50 out of 52 votes, average: 4.50 out of 52 votes, average: 4.50 out of 52 votes, average: 4.50 out of 52 votes, average: 4.50 out of 5 (2 votes, average: 4.50 out of 5, rated)
Loading ... Loading ...


Posted by Matias Baldini    



8 March 2009 (Posted in category Java)

Hibernate vs. JPA, part one

El otro día Sebi Kaiser tuvo la grosa idea de proponerme que escribiera un post para clarificar el uso de algunas annotations al mapear modelos en una aplicación basada en Hibernate. O sea, cuándo usar annotations definidas en el estándar (JPA) y cuándo usar las propias del ORM.

Como me encontré que la tenía menos clara que el agua del riachuelo, armé una aplicación de juguete para probar qué pasaba en cada uno de los casos que me acordaba que había problemas

1 – @Entity
Quién no perdió un rato de su vida con un error parecido a esto:

Leer más »


Juan Isern

2 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 5 (2 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Juan Isern    



3 March 2009 (Posted in category Java)

Levantando un archivo dentro de un Application Server usando una ruta relativa

Quizas alguna vez les paso de querer levantar un xml, un archivo properties o cierta configuración desde dentro de un Web AS y se encontraron con problemas a la hora de especificar bien la ruta del archivo. Dependiendo donde se encuentre deployada la aplicación (en nuestro caso era un SAP Netweaver) la ruta del mismo es un poco mas que poner solo el nombre del archivo o colocar un una barra invertida adelante.

Luego de varios intentos no lograbamos la forma de cargar un XML para ser usado por XStream ni tampoco la forma de que JFig ubicara su archivo de configuración. Pero a todo eso, Hibernate funcionaba correctamente, de alguna forma estaba encontrando su “hibernate.cgf” con solo especificarle el nombre. Eso me llevo a investigar un poco como era que lo lograba y de esta forma encontrar la solución al problema.

Todo el trabajo recae sobre una clase llamada ConfigHelper ( métodos como findAsResource(String) ), la cual posee algunos métodos para obtener la ruta o cargar archivos, independientemente del sitio donde se este corriendo la aplicación. Si observamos el código fuente (que adjunto mas abajo) podemos ver que intenta buscar el archivo utilizando la ruta del class loader, por lo que es bastante dificil que no lo encuentre.

Leer más »


Sebastian Celestino

0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5, rated)
Loading ... Loading ...


Posted by Sebastian Celestino    



19 January 2009 (Posted in category Java, Web Services)

XFire: baja performance clientes de webservices

Cuando empezamos a deployar las aplicaciones que utilizan los servicios del motor de workflow a través de webservices, notamos que en producción las aplicaciones se arrastraban y no sabíamos bien por qué. Mirando descubrimos que por cada pedido al webservice había un “read timeout” y que finalmente al segundo o tercer intento respondía.

Por esta cuestión, un pedido al motor de workflow no demoraba menos de 5 segundos y lo peor es que en ese lapso había cero procesamiento.

Sniffeando las conexiones HTTP saltó que el cliente de XFire envía en todos los pedidos un extraño “Expected: HTTP 100″ en el header HTTP de los posts. Lo cual, según pude leer, indica al server que debe entregar la respuesta en un pedido subsiguiente. La solución es eliminar este elemento del encabezado y de esa forma está todo bien.

Leer más »


Juan Isern

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Juan Isern    



30 December 2008 (Posted in category RIA)

Ancho de columnas automático en grillas Flex

Una vez más, vimos la oportunidad de mejorar un poco más las grillas que nos brinda Flex y le agregamos la facilidad de que el ancho de las columnas del componente DataGrid tengan el tamaño necesario para que la información contenida en las mismas sea visible y no quede cortado.

Para esto hay que utilizar un nuevo componente creado por Sebastián Kaiser, cuyo nombre es AutoSizeDataGrid que incluye la funcionalidad de setear automáticamente el ancho de cada columna según el contenido de la misma, tanto de la información de las filas como también del título la columna.

Un ejemplo del código a utilizar sería así: Leer más »


Fernando Fasanelli

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Fernando Fasanelli    



1 December 2008 (Posted in category RIA)

Componente de búsqueda genérica en grillas Flex

Hola de nuevo!

Hace ya un tiempo que Guille Salazar viene desarrollando una suite de componentes genéricos para agregar de forma simple funcionalidades complejas a las grillas de Flex. La idea es poder crear grillas que mejoren mucho la experiencia del usuario, tirando dos o tres componentes en un form.

Vamos a tratar de a poco de ir comentando cada uno, hoy presnetamos la siguiente problemática:

Muchas veces nos pasó que los usuarios quieren filtrar las grillas por el contenido que hay en algún campo. Cuando ven la primer iteración del producto, se dan cuenta que también quieren filtrar por la columna de al lado, y por 2 criterios más… una semana después terminamos teniendo media pantalla de filtros, que abarcan el 90% de los campos de la grilla y un usuario insatisfecho diciendo que la interfaz está demasiado “cargada” y que no encuentra lo que quiere.

Leer más »


Sebastian Rosenbolt

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5, rated)
Loading ... Loading ...


Posted by Sebastian Rosenbolt