Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ejemplo Echo3 + Hibernate
demian Sin conexión
Administrator
*******

Mensajes: 1.808
Registro en: Jun 2010
Reputación: 0
Mensaje: #1
Ejemplo Echo3 + Hibernate
Hola a Todos,

Quería comentarles que la preparadora (Anna Lezama) preparó un ejemplo de una "aplicación" usando echo3 e hibernate. Estoy seguro que pueden sacar información importante de allí. El ejemplo está en el SVN y se llama EjemploLogin.

La idea con este ejemplo es mostrar como se puede usar hibernate con echo3, ya que aunque parezca tonto, es muy fácil cometer errores fatales en este sentido. El ejemplo está implementado con algunas buenas prácticas que es más fácil mostrar con código que describir.

Creo que el problema/error más común al que se enfrentan los estudiantes en este sentido es que cuando guardan una referencia a un "bean" de hibernate esta no se "actualiza" mágicamente cuando otro cliente cambia la información en la Base de Datos. No está mal guardar una referencia en memoria, por ejemplo, que un panel o un content pane o algún otro objeto tengan una referencia a un objeto tipo "User" de hibernate. El problema es que cada vez que el usuario hace click en un botón o genera un evento y necesitamos la información de ese objeto deberíamos recargarlo, solo para asegurarnos de que tenemos la última información disponible de la base de datos.

Por ejemplo, imaginen que tienen una referencia a un objeto "user", antes de usarlo pueden hacer:

Código:
session = SessionHibernate.getInstance().getSession();
      session.beginTransaction();

// En este punto user es la referencia completa a un usuario.
// La siguiente instrucción recarga de la BD el objeto user.

      // ----------------------------------------
      // always reload the object before use it!
      // ----------------------------------------

      user = (User) session.load(User.class, user.getId());

// De aquí en adelante ya tengo el objeto user correspondiente.

Otra buena práctica es abrir una sola sesión de hibernate por evento, es decir, en el actionListener o en cualquier otro manejador de eventos, cuando necesiten hacer operaciones con la BD, acostumbrense a 1) abrir la sesión, 2) si llaman a funciones propagan (pasan como parámetro) la sesión, 3) al final, siempre cierran la transacción y la sesión. Lo que trato de decir, es que si llaman a una función, no abran dentro de esa función otra nueva sesión, eso les puede generar muchos problemas. La sesión es un objeto delicado que deben tratar con cuidado.

Por cierto que el ejemplo tiene un singleton (SessionHibernate) que pueden usar para obtener fácilmente una sesión inicializando sólo una vez el session factory (esto lo comenté con algunos de ustedes en clase).

Lo otro que les aconsejo es que traten de manejar escenarios similares siempre de la misma forma (independientemente de cual sea la forma), es decir, siempre que usen una sesión de hibernate la usan de la misma forma y siguen las mismas reglas, eso ayuda a mantener la consistencia (y la salud mental).

@Anna, no se si tienes algún comentario o algunas lecciones de sabiduría aprendidas del semestre pasado que quieras compartir Smile

[Imagen: dmi-1.jpg]
14-06-2011 07:41 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)