Hola Mundo con JPA usando un ResourceLocal
Objetivo: crear un hola mundo con JPA. con un test y clase java normal.
Se crea el archivo persistence.xml
en la carpeta src\main\resources\META-INF\
En este ejemplo agregamos el api para hacer logueo de la app con log4j2 al nivel src\main\resources
Como previo se debe tener la base de datos ya lista.
Estructura del proyecto
-----------------------
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="PersonaPU" transaction-type="RESOURCE_LOCAL">
<class>beans.dominio.Persona</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/recursos_humanos?useSSL=false"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="admin"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
</properties>
</persistence-unit>
</persistence>
-----------------------
Persona.java
package beans.dominio;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Persona implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_persona")
private Integer idPersona;
@Column(nullable = false, length = 45)
private String nombre;
@Column(name = "apellido_paterno", nullable = false, length = 45)
private String apePaterno;
@Column(name = "apellido_materno", length = 45)
private String apeMaterno;
@Column(nullable = false, length = 45)
private String email;
@Column(length = 45)
private String telefono;
public Persona() {
}
public Persona(int idPersona) {
this.idPersona = idPersona;
}
public Persona(String nombre, String apePaterno,
String apeMaterno, String email, String telefono) {
this.nombre = nombre;
this.apePaterno = apePaterno;
this.apeMaterno = apeMaterno;
this.email = email;
this.telefono = telefono;
}
public Integer getIdPersona() {
return idPersona;
}
public void setIdPersona(Integer idPersona) {
this.idPersona = idPersona;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApePaterno() {
return apePaterno;
}
public void setApePaterno(String apePaterno) {
this.apePaterno = apePaterno;
}
public String getApeMaterno() {
return apeMaterno;
}
public void setApeMaterno(String apeMaterno) {
this.apeMaterno = apeMaterno;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
@Override
public String toString() {
return "Persona [idPersona=" + idPersona + ", nombre=" + nombre
+ ", apePaterno=" + apePaterno + ", apeMaterno=" + apeMaterno
+ ", email=" + email + ", telefono=" + telefono + "]";
}
}
-----------------------
TestEntidadPersona .java
package test;
import static org.junit.Assert.assertTrue;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import beans.dominio.Persona;
public class TestEntidadPersona {
static EntityManager em = null;
static EntityTransaction tx = null;
static EntityManagerFactory emf = null;
Logger log = LogManager.getRootLogger();
@BeforeClass
public static void init() throws Exception {
emf = Persistence.createEntityManagerFactory("PersonaPU");
}
@Before
public void setup() {
try {
em = emf.createEntityManager();
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Test
public void testPersonaEntity() {
log.debug("Iniciando test Persona Entity con JPA");
assertTrue(em != null);
EntityTransaction tx = em.getTransaction();
tx.begin();
//No se debe especificar el ID, ya que se genera en automático
Persona persona1 = new Persona("Oscar", "Gomez", "Larios", "ogomez@mail.com.mx34567", "55780109");
log.debug("Objeto a persistir:" + persona1);
em.persist(persona1);
tx.commit();
assertTrue(persona1.getIdPersona() != null);
log.debug("Objeto persistido:" + persona1);
log.debug("Fin test Persona Entity con JPA");
}
@After
public void tearDown() throws Exception {
if (em != null) {
em.close();
}
}
}
-----------------------
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
-----------------------
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mx.com.gm.sga</groupId>
<artifactId>holamundo-jpa</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<glassfish.embedded-static-shell.jar>
C:\appservers\glassfish\glassfish4\glassfish\lib\embedded\glassfish-embedded-static-shell.jar
</glassfish.embedded-static-shell.jar>
</properties>
<dependencies>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-static-shell</artifactId>
<version>4.1.2</version>
<scope>system</scope>
<systemPath>${glassfish.embedded-static-shell.jar}</systemPath>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.glassfish.main.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
</dependencies>
</project>
-----------------------
ClienteEntidadPersona.java
package beans.test;
import beans.dominio.Persona;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
*
* @author ci
*/
public class ClienteEntidadPersona {
static Logger log = LogManager.getRootLogger();
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersonaPU");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Persona p = new Persona("Ana", "Mota", "Diaz", "mailmota@mail.com", "445566778");
log.debug("objeto a persistir: "+p);
em.persist(p);
tx.commit();
log.debug("objeto persistido: "+p);
em.close();
}
}
No hay comentarios.