Resolución del 1er final

0 views
Skip to first unread message

Rodrigo Rodriguez

unread,
Dec 13, 2009, 7:40:16 PM12/13/09
to pw-fpu...@googlegroups.com
Hola a todos, estamos tratando de resolver el 1er final de este año y necesitamos ayuda... Si alguien puede aportar algo... les vamos agradecer!!!!!
 
 
Tema 1: Transacciones

a) Implementar el entity bean PagoCabecera

/* PagoCabecera.java */

package entities;

@Entity
@Table(name = "pagos_cabecera")
public class PagoCabecera implements Serializable {
    @Id
    @Basic(optional = false)
    @Column(name = "id_pago_cabecera")
    private Integer idPagoCabecera;

    @Column(name = "nro_cuenta")
    private String nroCuenta;

    @Column(name = "fecha")
    @Temporal(TemporalType.DATE)
    private Date fecha;
   
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idPagoCabecera")
    private Collection<PagoDetalle> pagoDetalleCollection;

    /*Aquí irían los Setters y Getters.*/
}

b) Implementar el entity bean PagoDetalle

/* PagoDetalle.java */

package entities;

@Entity
@Table(name = "pagos_detalle")
public class PagoDetalle implements Serializable {
    @Id
    @Basic(optional = false)
    @Column(name = "id_pago_detalle")
    private Integer idPagoDetalle;

    @Column(name = "monto")
    private Float monto;

    @Column(name = "arancel")
    private Integer arancel;

    @Column(name = "procentaje_impuesto")
    private Integer procentajeImpuesto;

    @JoinColumn(name = "id_pago_cabecera", referencedColumnName = "id_pago_cabecera")
    @ManyToOne(optional = false)
    private PagoCabecera idPagoCabecera;

    /*Aquí irían los Setters y Getters.*/
}

c) Implementar el entity bean RegistroPago

/* RegistroPago.java */

package entities;

@Entity
@Table(name = "registro_pagos")
public class RegistroPago implements Serializable {
    @Id
    @Basic(optional = false)
    @Column(name = "id_registro_pago")
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Integer idRegistroPago;

    @Column(name = "nro_cuenta")
    private String nroCuenta;

    @Column(name = "fecha")
    @Temporal(TemporalType.DATE)
    private Date fecha;

    @Column(name = "user_id")
    private String userId;

    @Column(name = "estado")
    private Integer estado;

    @Column(name = "mensaje")
    private String mensaje;

    @Column(name = "id_pago_cabecera")
    private Integer idPagoCabecera;

    /*Aquí irían los Setters y Getters.*/
}

d) Implementar el Session Bean PagosEAO

/* PagosEAO.java */

package beans;

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class PagosEAO {
   @Resource
   private SessionContext context;
...
   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public void guardarPago(PagoCabecera pagoCabecera) throws ServiceException {
      try {
         /* Lo que va aca es lo que nos esta faltando.*/
      } catch (Exception e) {
         throw new ServiceException(e);
      }
   }  
}

/* ServiceException.java */

@ApplicationException(rollback=true)
public class ServiceException extends Exception {
   public ServiceException(Exception cause) {
      super(cause);
   }
}

Brenda Díaz

unread,
Dec 13, 2009, 7:52:52 PM12/13/09
to pw-fpu...@googlegroups.com

d) Implementar el Session Bean PagosEAO

/* PagosEAO.java */

package beans;

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class PagosEAO {

   @PersistentContext
   private EntityManager em;

   @Resource
   private SessionContext context;
...
   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public void guardarPago(PagoCabecera pagoCabecera) throws ServiceException {
      try {

           this. em.persist(pagoCabecera);

           Iterator<PagoDetalle> it=pagoCabecera.getPagoDetalles().iterator();

           while (it.hasNext()) {

                 PagoDetalle pd=it.next();

                 this.em.persist(pd);

           }

      } catch (Exception e) {

          context.setRollbackOnly();

         throw new ServiceException(e);
      }
   }  
}


esta linea que agregaste a la excepcion es para el item f) nada mas cierto?

@ApplicationException(rollback=true)



2009/12/13 Rodrigo Rodriguez <jrodrigor...@gmail.com>

--

Has recibido este mensaje porque estás suscrito al grupo "pw-fpuna-2009" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a pw-fpu...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a pw-fpuna-200...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/pw-fpuna-2009?hl=es.



--
Saludos
Brenda

Juan Talavera

unread,
Dec 13, 2009, 8:14:24 PM12/13/09
to pw-fpu...@googlegroups.com
Buenas,

La implementación de Brenda es correcta, el único detalle es que el context.setRollbackOnly()
ya no es necesario si vamos a lanzar una exceción anotada con @ApplicationException(rollback=true).

Otro punto importante del método guardar pago es

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

Pueden ver en el libro la diferencia entre REQUIRES_NEW y REQUIRED


2009/12/13 Brenda Díaz <brendad...@gmail.com>

Rodrigo Rodriguez

unread,
Dec 13, 2009, 8:42:13 PM12/13/09
to pw-fpu...@googlegroups.com
Gracias por la ayuda!!

El día 13/12/09, Juan Talavera <jetal...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages