GRupo3_Iteracion2

Correcciones:

1) Por los tests:

- Falta corregir el test: DAOsTest.consultarPedidoPorId()

- No hace falta correr la base manualmente para correr los tests. Depende de como configuren el SessionFactory a la hora de empezar a llamar a los metodos de los DAOs (que son en ultima instancia, quien llama al HibernateUtil/HibernateProxy). Aca tienen una muestra, donde para los tests lo configura de una forma y para cuando la app corre en produccion, lo levanta del archivo. http://www.theserverside.com/news/1365222/Unit-Testing-Hibernate-With-HSQLDB

Lo que les comento abajo como armarlo para poder correr estos tests de la base sin tener que levantarla a mano.

2) Luego, en cuanto al manejo de Hibernate.

El sessionFactory tiene que ser instanciado una sola vez. El es quien les maneja las sessiones que van necesitando y las conexiones a la base.

Tendrian que inicializarlo en el constructor de HibernateProxy o mejor aun, sigan el approach que hicieron al principio con HibernateUtil. Para este TP, les alcanza con que el SessionFactory sea un singleton. De tener que necesitar administrar mas instancias, ya tendriamos que ver modos mas complejos y meternos mas de lleno en Spring, por ejemplo.

2.a) Revisen y lean sobre el atributo de hibernate:

hibernate.connection.autocommit

Vean como lo pueden poner en el properties de hibernate y con eso no tienen que llamar a cada rato al beginTransaction().

2.b) Eliminen todos los metodos del HibernateUtil, ya no los van a necesitar, por lo dicho en 2.a).

3) Para la base, usen un path asi:

jdbc:hsqldb:file:/tacstestdb;shutdown=true

4) Para que quieren este archivo?

hibernate.properties

5) Fijense que otro patron con mas informacion pueden aplicar en log4j para que loguee el nombre de la clase, metodo y la linea, la fecha y hora, etc.

6) Saquen los singletons de los DAOs. En todo caso, lo que tendrian que haber simulado era la base, no los DAOs. Si quieren evitar inconsistencias con los multiples accesos a estas colecciones, pueden mantener en un solo lugar todas estas collecciones (base simulada) y los DAOs acceder a ellas. Por supuesto que tiene que ser un acceso sincronizado, pero lo mismo vale para los daos, al ser singleton y de acceso y escritura, cuando dentro tenian solo collecciones, tambien tenian que haber cuidado de eso.

Ahora que atras hay una base "real", no hace falta, ya que los DAOs no tienen mas estado propio del negocio.

Mejoras:

1) Pasen en archivo de configuracion de Log4j a un xml.

Es como hoy en dia se configura y asi pueden ver otras formas, desde mi punto de vista, mas completa y mejor, por todas las ventajas del xml en si.

2) Quieren tratar de meter spring? Lo conocen? Quieren leer de que se trata y ver que cosas traer que nos facilitan la vida, por ejemplo con Hibernate.

Les dejo un link para que vean como armarlo y otro para que se metan a leer de que se trata (no se queden con los que les paso, hay mucha de info en internet, busquen!).

Como aplicar Hibernate con un ejemplo en particular:

http://www.zabada.com/tutorials/spring-and-hibernate-integration.php

La posta para ver de que se trata:

http://static.springsource.org/spring/docs/2.5.x/reference/index.html

Como aplicar Hibernate bien extenso y completo: http://static.springsource.org/spring/docs/2.5.x/reference/orm.html