Archivo de Etiquetas de 'customers'

La carga perezosa: hibernate vs jdo

Tengo que mirar más en detalle JPA (Java Persistence Api), pero si los propios miembros de la especificación lo suponen un subconjunto de JDO (Java Data Object), es de suponer que sea parecido. De todos es conocido el problema de Hibernate (y cualquier ORM) con lazy loading, de hecho ya hemos hablado aquí sobre ello. Básicamente sucede cuando después de cerrar el la transacción en el controlador (una acción de struts por ejemplo, o una clase de servicio) queremos cargar objetos relacionados definidos como lazy en la vista. Ahí aparece el temido LazyInitializationException.


Hoy no voy a hablar de eso, ya hay soluciones como el OpenSessionInView (he olvidado el término patrón a propósito), o más inteligentes, como utilizar Spring, por mucho que a alguno le pese. Pero en lugar de eso, voy a hablar de un desconocido, y como lo resuelve él: JDO, por si alguien tiene que escoger un ORM y se niega al borreguismo (dicho esto sin acritud hacía Hibernate, sino simplemente quiere ver distintas opciones, que nunca es malo).


En JDO, al igual que la mayoría de los ORM, tenemos por una parte nuestros beans, por otra la base de datos, y en medio tenemos un fichero con metainformación que relaciona ambas cosas, normalmente un xml. Sin entrar en detalles de como se trabaja con JDO, casi todos podrán entender:

        
            
            
                
            
            
                
            
            
                
                
            
            
                
                
            
            

            
            
                

                
                
            

        



Esta es la definición de una clase Task, que tiene varias relaciones (los campos primitivos no hace falta definirlos si nos valen los valores por defecto). La parte interesante es la del final, la llamada fetch-group.


Y es que por defecto se cargan las relaciones de forma perezosa, como en casi todas partes (y por tanto tendríamos el mismo problema). En JDO podemos definir distintos fetch-groups, para distintos usos normales de la clase, definiendo que queremos que se cargue en esos casos. Por ejemplo, en este caso, cuando cargamos un grupo de Task para un listado, se cargará el grupo por defecto (primitivos + String + Date, pero no relaciones, salvo status porque así lo hemos definido), pero cuando queremos mostrar una página de detalle, nos interesa tener a mano información sobre el tipo de tarea que es (taskType), su estado (en este caso es un objeto, no un valor, status), o si tiene añadidos varios fallos (bugs). Dejamos sin cargar los partes de horas, historial de cambios, etc.

Simplemente a la hora de hacer la consulta haremos algo así como (escribo de memoria):

query.getFetchPlan().addFetchGroup("detailsPage");



Limpíto, ¿no?.

Parece que es oficial.

Pues si, a lo largo de los primeros meses del 2007 Linking Paths desembarcará en Madrid por varias razones. O parte de él. La intención es dejar la oficina de Bilbao en buenas manos, pero como eso no depende sólo de mi, de momento me lo callo. Como Martín suele decir, el índice de los post en el weblog es inversamente proporcional a la carga de trabajo, y no puedo hacer más que darle la razón. En este mes que ha pasado casi desde el último post, he viajado (profesionalmente, claro), he conocido a gente o puesto cara a gente que conocía virtualmente, he impartido clases, he programado, y he hecho muchas cosas más, pero sobre todo he pensado y hablado con gente sobre el futuro de Linking.


La verdad es que las posibilidades que ofrece Madrid son grandes, cercanas a infinitas. De hecho no he ido aún y ya hay dos empresas con ganas de colaborar en temas de formación. Que curioso, porque nunca nos hubiera definido como una empresa de formación, aunque sea parte de lo que hacemos (de momento <20% de la facturación). Aunque tengo que reconocer que a día de hoy eso me encaja con otras ideas, y los pasos que damos son coherentes con esta situación.

El caso es que durante los primeros seis meses del año estaré a caballo entre Bilbao y Madrid, eso no me lo quita nadie. Por eso al menos durante ese periodo no tengo intención de tener demasiada infraestructura allí (si alguien me hace un hueco en su oficina mejor que mejor :-D, algo podré aportar aunque sea en el café), después, ya veremos. A tanto no he llegado, y el caso es que tengo la posibilidad de dejar montado en Bilbao algo interesante, espero conseguirlo.


Un cambio importante.



Close
E-mail It