lunes, 13 de junio de 2011

Métodos Callback para EJBs de Entidad

Para este ejemplo estoy usando Netbeans 6.9, Ubuntu 10.04, Glassfish V3 y Derby

Primeramente vamos a crear un Enterprise Project llamado CallBackEntity.


Creamos una unidad de persistencia que la llamaremos como:pucb. Seleccionamos TopLink como la libreria de persistencia. Como Conexión a la Base de Datos seleccionamos la conexión a la base de datos de sample de Derby y como la estrategia de generación de las tablas seleccionamos None.


Luego de esto, tenemos que crear un Entity Bean en base a las tablas del schema de la base de datos.Para lograr esto creamos un EntityBean usando "Entity Classes from DataBase". Al abrirse la ventana seleccionamos y pasamos al lado derecho la tabla Manufacturer.

Luego damos click en Next y colocamos el paquete com.ejemplo.entity.

Damos click en Next y la siguiente ventana en la opción collection list, seleccionamos java.util.List y damos click en Finish.


Hecho esto se nos genera el Entity Bean llamado Manufacturer.

En esta clase vamos a agregar las anotaciones relacionadas a las operaciones con la base de datos.

Tambien cambiamos el método toString(), para poder imprimir las variable miembro.

Con lo que el código nos queda como:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ejemplo.entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PostLoad;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;
import javax.persistence.Table;

/**
*
* @author santiago
*/
@Entity
@Table(name = "MANUFACTURER")
@NamedQueries({
@NamedQuery(name = "Manufacturer.findAll", query = "SELECT m FROM Manufacturer m"),
@NamedQuery(name = "Manufacturer.findByManufacturerId", query = "SELECT m FROM Manufacturer m WHERE m.manufacturerId = :manufacturerId"),
@NamedQuery(name = "Manufacturer.findByName", query = "SELECT m FROM Manufacturer m WHERE m.name = :name"),
@NamedQuery(name = "Manufacturer.findByAddressline1", query = "SELECT m FROM Manufacturer m WHERE m.addressline1 = :addressline1"),
@NamedQuery(name = "Manufacturer.findByAddressline2", query = "SELECT m FROM Manufacturer m WHERE m.addressline2 = :addressline2"),
@NamedQuery(name = "Manufacturer.findByCity", query = "SELECT m FROM Manufacturer m WHERE m.city = :city"),
@NamedQuery(name = "Manufacturer.findByState", query = "SELECT m FROM Manufacturer m WHERE m.state = :state"),
@NamedQuery(name = "Manufacturer.findByZip", query = "SELECT m FROM Manufacturer m WHERE m.zip = :zip"),
@NamedQuery(name = "Manufacturer.findByPhone", query = "SELECT m FROM Manufacturer m WHERE m.phone = :phone"),
@NamedQuery(name = "Manufacturer.findByFax", query = "SELECT m FROM Manufacturer m WHERE m.fax = :fax"),
@NamedQuery(name = "Manufacturer.findByEmail", query = "SELECT m FROM Manufacturer m WHERE m.email = :email"),
@NamedQuery(name = "Manufacturer.findByRep", query = "SELECT m FROM Manufacturer m WHERE m.rep = :rep")})
public class Manufacturer implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "MANUFACTURER_ID")
private Integer manufacturerId;
@Column(name = "NAME")
private String name;
@Column(name = "ADDRESSLINE1")
private String addressline1;
@Column(name = "ADDRESSLINE2")
private String addressline2;
@Column(name = "CITY")
private String city;
@Column(name = "STATE")
private String state;
@Column(name = "ZIP")
private String zip;
@Column(name = "PHONE")
private String phone;
@Column(name = "FAX")
private String fax;
@Column(name = "EMAIL")
private String email;
@Column(name = "REP")
private String rep;

public Manufacturer() {
}

public Manufacturer(Integer manufacturerId) {
this.manufacturerId = manufacturerId;
}

public Integer getManufacturerId() {
return manufacturerId;
}

public void setManufacturerId(Integer manufacturerId) {
this.manufacturerId = manufacturerId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddressline1() {
return addressline1;
}

public void setAddressline1(String addressline1) {
this.addressline1 = addressline1;
}

public String getAddressline2() {
return addressline2;
}

public void setAddressline2(String addressline2) {
this.addressline2 = addressline2;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

public String getZip() {
return zip;
}

public void setZip(String zip) {
this.zip = zip;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public String getFax() {
return fax;
}

public void setFax(String fax) {
this.fax = fax;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getRep() {
return rep;
}

public void setRep(String rep) {
this.rep = rep;
}

@Override
public int hashCode() {
int hash = 0;
hash += (manufacturerId != null ? manufacturerId.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Manufacturer)) {
return false;
}
Manufacturer other = (Manufacturer) object;
if ((this.manufacturerId == null && other.manufacturerId != null) || (this.manufacturerId != null && !this.manufacturerId.equals(other.manufacturerId))) {
return false;
}
return true;
}

@Override
public String toString() {
return " Manufacturer id:" + this.manufacturerId
+ " Name :" + this.name
+ " Address Line 1:" + this.addressline1
+ " Address Line 2:" + this.addressline2
+ " City:" + this.city
+ " State:" + this.state
+ " Zip:" + this.zip
+ " Phone:" + this.phone
+ " Fax:" + this.fax
+ " Email:" + this.email
+ " Rep:" + this.rep;
}

@PrePersist
public void antesGuardar() {
System.out.println("Antes de Guardar");
}

@PostPersist
public void luegoGuardar() {
System.out.println("Luego de Guardar");
}

@PreRemove
public void antesEliminar() {
System.out.println("Antes de Eliminar");
}

@PostRemove
public void luegoEliminar() {
System.out.println("Luego de Eliminar");
}

@PreUpdate
public void antesActualizar() {
System.out.println("Antes de Actualizar");
}

@PostUpdate
public void luegoActualizar() {
System.out.println("Luego de Actualizar");
}

@PostLoad
public void alCargar() {
System.out.println("Cargando el objeto en el contexto");
}
}

Después de esto creamos un EJB de Session Stateless con interface remota, llamado Utilitario, dentro de com.ejemplo.session. Que tenga funciones que se encarguen de llamar a rutinas para guardar, eliminar y actualizar la tabla Manufacturer en la base de datos.
Es decir:
package com.ejemplo.session;

import com.ejemplo.entity.Manufacturer;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class Utilitario implements UtilitarioRemote {

@PersistenceContext EntityManager em;

public void guardar(Manufacturer m) {
em.persist(m);
}

public void eliminar(Manufacturer m) {
em.remove(em.find(com.ejemplo.entity.Manufacturer.class, m.getManufacturerId()));
}

public void actualizar(Manufacturer m) {
em.merge(m);
}
}

Luego, hacemos clean and build sobre el Enterprise Project

Finalmente hacemos una inyección de EJB en la clase Main donde crearemos,actualizaremos y eliminaremos objetos del tipo Manufacturer. De esta manera:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package callbackentity;

import com.ejemplo.entity.Manufacturer;
import com.ejemplo.session.UtilitarioRemote;
import javax.ejb.EJB;

public class Main {
@EJB private static UtilitarioRemote util;
public static void main(String[] args) {
//Creando uno nuevo
Manufacturer m = new Manufacturer();
m.setManufacturerId(987);
m.setName("Santiago");
m.setAddressline1("Amazonas");
m.setAddressline2("NNUU");
m.setCity("Quito");
m.setState("Pi");
m.setZip("123");
m.setPhone("123456789");
m.setFax("987654321");
m.setEmail("ejemplo@gmail.com");
m.setRep("cualquiera");
util.guardar(m);
System.out.println(m.toString());
//Actualizando
m.setRep("cualquier12345");
util.actualizar(m);
System.out.println(m.toString());
//Eliminando
util.eliminar(m);
}
}

En el log de la aplicación tenemos:

y en el log de Glassfish tenemos:

No hay comentarios:

Publicar un comentario