jueves, 16 de junio de 2011

Heredando de una clase no Entity

Para este ejemplo estoy utilizando Netbeans 6.9, Ubuntu 10.04, Glassfish V3 y DerbyDB

Primeramente creamos un Enterprise Project al que llamaremos Generico.


Luego vamos a crear un Session Bean del tipo Stateless, con interface remota llamado Utilitario en el paquete com.ejemplo.session.

Despues vamos a crear una unidad de persistencia, llamada puGenerico, con Toplink, datasource jdbc/sample y con la estrategia de generacion de tablas Drop and Create.

Después de esto creamos el paquete com.ejemplo.entity y tambien el paquete com.ejemplo.util

Dentro de com.ejemplo.util, creamos la clase llamada CuentaUsuarios
cuyo código es el siguiente.
package com.ejemplo.util;

public class CuentaUsuarios {

private Integer numeroUsuarios;

public CuentaUsuarios() {
numeroUsuarios = 0;
}

public Integer getNumeroUsuarios() {
return numeroUsuarios;
}

public void setNumeroUsuarios(Integer numeroUsuarios) {
this.numeroUsuarios = numeroUsuarios;
}

public void incrementarUsuariosConectados() {
numeroUsuarios++;
}
}
Luego dentro de com.ejemplo.entity creamos dos clases:
Usuario cuyo código es:
package com.ejemplo.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;


@Entity
public class Usuario implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "clave", nullable = false)
private String clave;
@ManyToOne
private Ciudad ciudad;

public Usuario() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public Ciudad getCiudad() {
return ciudad;
}

public void setCiudad(Ciudad ciudad) {
this.ciudad = ciudad;
}

public String getClave() {
return clave;
}

public void setClave(String clave) {
this.clave = clave;
}

public String getLogin() {
return login;
}

public void setLogin(String login) {
this.login = login;
}


}



y tambien Ciudad cuyo código es:
package com.ejemplo.entity;
import com.ejemplo.util.CuentaUsuarios;
import java.io.Serializable;
import java.util.Collection;
import java.util.Vector;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;


@Entity
public class Ciudad extends CuentaUsuarios implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "nombre", nullable = false)
private String nombre;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ciudad")
private Collection usuarioCollection = new Vector();

public Ciudad() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Collection getUsuarioCollection() {
return usuarioCollection;
}

public void setUsuarioCollection(Collection usuarioCollection) {
this.usuarioCollection = usuarioCollection;
}

public void agregarUsuarios(Usuario User){
usuarioCollection.add(User);
incrementarUsuariosConectados();
System.out.println("El numero de usuarios conectados es:"+getNumeroUsuarios());
}
}
Esta clase extiende funcionalidad de Cuenta Usuarios. Esta clase tiene una función local llamada agregarUsuarios que usa otra funcion de la clase(incrementarUsuariosConectados) para llevar un control del número de usuarios.

Como siguiente paso hacemos el siguiente cambio en el código de Utilitario:

package com.ejemplo.session;

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

@Stateless
public class Utilitario implements UtilitarioRemote {

@PersistenceContext EntityManager em;

public void crearUsuarioCuidad() {
Ciudad ciudad=new Ciudad();
ciudad.setId(12L);
ciudad.setNombre("Quito");
Usuario usuario1=new Usuario();
usuario1.setId(1L);
usuario1.setLogin("username1");
usuario1.setClave("abc123");
usuario1.setCiudad(ciudad);
Usuario usuario2=new Usuario();
usuario2.setId(2L);
usuario2.setLogin("username2");
usuario2.setClave("xyz123");
usuario2.setCiudad(ciudad);
ciudad.agregarUsuarios(usuario1);
ciudad.agregarUsuarios(usuario2);
em.persist(ciudad);
}

}


Cuya interface es:

package com.ejemplo.session;

import javax.ejb.Remote;
@Remote
public interface UtilitarioRemote {
public void crearUsuarioCuidad();
}



Finalmente cambiamos Main.java

package generico;

import com.ejemplo.session.UtilitarioRemote;
import javax.ejb.EJB;
public class Main {
@EJB private static UtilitarioRemote utilitario;
public static void main(String[] args) {
utilitario.crearUsuarioCuidad();
}
}

y ejecutamos el proyecto empresarial.


No hay comentarios:

Publicar un comentario