Skip to content
Snippets Groups Projects
Commit b23ea96c authored by kolo1984's avatar kolo1984
Browse files

ejercicio8

parent fa2c6659
No related branches found
No related tags found
No related merge requests found
Showing
with 309 additions and 304 deletions
......@@ -5,6 +5,9 @@
<dependent-module archiveName="practico-ejb.jar" deploy-path="/" handle="module:/resource/practico-ejb/practico-ejb">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="postgresql.jar" deploy-path="/lib" handle="module:/classpath/var/M2_REPO/org/postgresql/postgresql/42.2.12/postgresql-42.2.12.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="practico-web.war" deploy-path="/" handle="module:/resource/practico-web/practico-web">
<dependency-type>uses</dependency-type>
</dependent-module>
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
JBoss, Home of Professional Open Source
Copyright 2015, Red Hat, Inc. and/or its affiliates, and individual
contributors by the @authors tag. See the copyright.txt in the
distribution for a full listing of individual contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<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/maven-v4_0_0.xsd">
<!-- JBoss, Home of Professional Open Source Copyright 2015, Red Hat, Inc.
and/or its affiliates, and individual contributors by the @authors tag. See
the copyright.txt in the distribution for a full listing of individual contributors.
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License. -->
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
......@@ -30,7 +26,8 @@
<dependencies>
<!-- Import the CDI API, we use provided scope as the API is included in JBoss EAP -->
<!-- Import the CDI API, we use provided scope as the API is included in
JBoss EAP -->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
......@@ -44,16 +41,16 @@
<scope>test</scope>
</dependency>
<!-- Bean Validation Implementation
Provides portable constraints such as @Email
Hibernate Validator is shipped in JBoss EAP -->
<!-- Bean Validation Implementation Provides portable constraints such
as @Email Hibernate Validator is shipped in JBoss EAP -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
</dependency>
<!-- Import the JPA API, we use provided scope as the API is included in JBoss EAP -->
<!-- Import the JPA API, we use provided scope as the API is included in
JBoss EAP -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
......@@ -61,8 +58,8 @@
</dependency>
<!-- Optional, but highly recommended -->
<!-- Arquillian allows you to test enterprise code such as EJBs and
Transactional(JTA) JPA from JUnit/TestNG -->
<!-- Arquillian allows you to test enterprise code such as EJBs and Transactional(JTA)
JPA from JUnit/TestNG -->
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
......@@ -75,10 +72,11 @@
<scope>test</scope>
</dependency>
<!-- Declare the APIs we depend on and need for compilation. All of
them are provided by JBoss EAP -->
<!-- Declare the APIs we depend on and need for compilation. All of them
are provided by JBoss EAP -->
<!-- Import the EJB API, we use provided scope as the API is included in JBoss EAP -->
<!-- Import the EJB API, we use provided scope as the API is included in
JBoss EAP -->
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
......@@ -94,15 +92,34 @@
<artifactId>jboss-annotations-api_1.3_spec</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.12</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-agroal</artifactId>
<version>5.4.2.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<!-- Tell Maven that the resulting file should not have a file name containing the version -
a non versioned name is required e.g. when building a deployable artifact using the ShrinkWrap API -->
<!-- Tell Maven that the resulting file should not have a file name containing
the version - a non versioned name is required e.g. when building a deployable
artifact using the ShrinkWrap API -->
<finalName>${project.artifactId}</finalName>
<plugins>
<!--Configure the EJB plugin: we create EJB 3.2. If not specified, an error will arise because the plugin expects an Ejb-jar by default. -->
<!--Configure the EJB plugin: we create EJB 3.2. If not specified, an
error will arise because the plugin expects an Ejb-jar by default. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
......
package ejercicio.practico.datos;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Singleton
@Startup
@Remote(IDatosABMRemoto.class)
@Local(IDatosABMLocal.class)
public class DatosABM implements IDatosABMRemoto, IDatosABMLocal {
private Map<String, Recurso> recursos = new HashMap<>();
private Map<String, TipoRecurso> tipoRecursos = new HashMap<>();
public DatosABM() {
}
@PostConstruct
public void precargaDatos() {
Recurso recurso1 = new Recurso("codigo1", BigDecimal.valueOf(101), 11);
Recurso recurso2 = new Recurso("codigo2", BigDecimal.valueOf(202), 22);
Recurso recurso3 = new Recurso("codigo3", BigDecimal.valueOf(303), 33);
recursos.put("codigo1", recurso1);
recursos.put("codigo2", recurso2);
recursos.put("codigo3", recurso3);
List<String> recursos1 = new ArrayList<>();
List<String> recursos2 = new ArrayList<>();
List<String> recursos3 = new ArrayList<>();
recursos1.add("codigo1");
recursos2.add("codigo2");
recursos3.add("codigo3");
TipoRecurso tipoRecurso1 = new TipoRecurso("nombre1", "descripcion1", BigDecimal.valueOf(100), recursos1);
TipoRecurso tipoRecurso2 = new TipoRecurso("nombre2", "descripcion2", BigDecimal.valueOf(200), recursos2);
TipoRecurso tipoRecurso3 = new TipoRecurso("nombre3", "descripcion3", BigDecimal.valueOf(300), recursos3);
tipoRecursos.put("nombre1", tipoRecurso1);
tipoRecursos.put("nombre2", tipoRecurso2);
tipoRecursos.put("nombre3", tipoRecurso3);
}
@Override
public void altaRecurso(String codigo, BigDecimal precioUnitario, int cantidad, String nombreTipoRecurso) {
Recurso recurso = new Recurso(codigo, precioUnitario, cantidad);
recursos.put(codigo, recurso);
tipoRecursos.get(nombreTipoRecurso).getRecursos().add(codigo);
}
@Override
public void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos) {
if (recursos == null) {
recursos = new ArrayList<String>();
}
TipoRecurso tipoRecurso = new TipoRecurso(nombre, descripcion, precioReferencia, recursos);
tipoRecursos.put(nombre, tipoRecurso);
}
@Override
public List<TipoRecurso> listarTipoRecursos() {
return new ArrayList<TipoRecurso>(tipoRecursos.values());
}
@Override
public List<Recurso> listarRecursos() {
return new ArrayList<Recurso>(recursos.values());
}
@Override
public List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso) {
TipoRecurso tipoRecurso = tipoRecursos.get(nombreTipoRecurso);
if (tipoRecurso != null && tipoRecurso.getRecursos() != null && !tipoRecurso.getRecursos().isEmpty()) {
return recursos.values().stream().filter(r -> tipoRecurso.getRecursos().contains(r.getCodigo()))
.collect(Collectors.toList());
}
return new ArrayList<Recurso>();
}
@Override
public TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso) {
return this.tipoRecursos.get(nombreTipoRecurso);
}
@Override
public Recurso obtenerRecurso(String codigo) {
return this.recursos.get(codigo);
}
}
package ejercicio.practico.datos;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Local;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Local
public interface IDatosABMLocal {
void altaRecurso(String codigo, BigDecimal precioUnitario, int cantidad, String nombreTipoRecurso);
List<TipoRecurso> listarTipoRecursos();
List<Recurso> listarRecursos();
List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos);
TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso);
Recurso obtenerRecurso(String codigo);
}
package ejercicio.practico.datos;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Remote;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Remote
public interface IDatosABMRemoto {
void altaRecurso(String codigo, BigDecimal precioUnitario, int cantidad, String nombreTipoRecurso);
List<TipoRecurso> listarTipoRecursos();
List<Recurso> listarRecursos();
List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos);
TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso);
}
package ejercicio.practico.entitidades;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "Recurso")
@NamedQueries(@NamedQuery(name = "Recurso.all", query = "from Recurso"))
public class Recurso implements Serializable {
private static final long serialVersionUID = -4602769721744167983L;
@Id
private String codigo;
private BigDecimal precioUnitario;
private int cantidad;
......
......@@ -4,19 +4,32 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "TipoRecurso")
@NamedQueries(@NamedQuery(name = "TipoRecurso.all", query = "from TipoRecurso"))
public class TipoRecurso implements Serializable {
private static final long serialVersionUID = 2910894547266883761L;
@Id
private String nombre;
private String descripcion;
private BigDecimal precioReferencia;
private List<String> recursos;
@OneToMany
private List<Recurso> recursos;
public TipoRecurso() {
};
public TipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos) {
public TipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<Recurso> recursos) {
this.nombre = nombre;
this.descripcion = descripcion;
this.precioReferencia = precioReferencia;
......@@ -47,11 +60,11 @@ public class TipoRecurso implements Serializable {
this.precioReferencia = precioReferencia;
}
public List<String> getRecursos() {
public List<Recurso> getRecursos() {
return recursos;
}
public void setRecursos(List<String> recursos) {
public void setRecursos(List<Recurso> recursos) {
this.recursos = recursos;
}
......
......@@ -19,7 +19,7 @@ public interface IServicioRecursoLocal {
List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<Recurso> recursos);
TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso);
......
......@@ -19,7 +19,7 @@ public interface IServicioRecursoRemoto {
List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos);
void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<Recurso> recursos);
TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso);
......
......@@ -8,9 +8,9 @@ import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import ejercicio.practico.datos.IDatosABMLocal;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
import ejercicio.practico.persistencia.IPersistenciaABMLocal;
@Stateless
@Remote(IServicioRecursoRemoto.class)
......@@ -18,13 +18,13 @@ import ejercicio.practico.entitidades.TipoRecurso;
public class ServicioRecursoLocal implements IServicioRecursoLocal, IServicioRecursoRemoto {
@EJB
private IDatosABMLocal local;
private IPersistenciaABMLocal local;
@Override
public boolean altaRecurso(String codigo, BigDecimal precioUnitario, int cantidad, String nombreTipoRecurso) {
try {
TipoRecurso tipoRecurso = this.local.obtenerTipoRecursos(nombreTipoRecurso);
TipoRecurso tipoRecurso = this.obtenerTipoRecursos(nombreTipoRecurso);
BigDecimal factor = BigDecimal.valueOf(1.1);
BigDecimal precioMaximo = tipoRecurso.getPrecioReferencia().multiply(factor);
......@@ -32,7 +32,12 @@ public class ServicioRecursoLocal implements IServicioRecursoLocal, IServicioRec
if (precioMaximo.compareTo(precioUnitario) == -1) {
return false;
}
this.local.altaRecurso(codigo, precioUnitario, cantidad, nombreTipoRecurso);
Recurso recurso = new Recurso(codigo, precioUnitario, cantidad);
this.local.insertRecurso(recurso);
//TODO: agregar la relacion TipoRecurso - Recurso
return true;
} catch (Exception e) {
......@@ -42,31 +47,33 @@ public class ServicioRecursoLocal implements IServicioRecursoLocal, IServicioRec
@Override
public List<TipoRecurso> listarTipoRecursos() {
return this.local.listarTipoRecursos();
return this.local.selectTipoRecurso();
}
@Override
public List<Recurso> listarRecursos() {
return this.local.listarRecursos();
return this.local.selectRecurso();
}
@Override
public List<Recurso> listarRecursosPorTipo(String nombreTipoRecurso) {
return this.local.listarRecursosPorTipo(nombreTipoRecurso);
TipoRecurso tipoRecurso = this.local.selectTipoRecursoWhereNombre(nombreTipoRecurso);
return tipoRecurso.getRecursos();
}
@Override
public void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<String> recursos) {
this.local.altaTipoRecurso(nombre, descripcion, precioReferencia, recursos);
public void altaTipoRecurso(String nombre, String descripcion, BigDecimal precioReferencia, List<Recurso> recursos) {
TipoRecurso tipoRecurso = new TipoRecurso(nombre, descripcion, precioReferencia, recursos);
this.local.insertTipoRecurso(tipoRecurso);
}
@Override
public TipoRecurso obtenerTipoRecursos(String nombreTipoRecurso) {
return this.local.obtenerTipoRecursos(nombreTipoRecurso);
return this.local.selectTipoRecursoWhereNombre(nombreTipoRecurso);
}
@Override
public Recurso obtenerRecurso(String codigo) {
return this.local.obtenerRecurso(codigo);
return this.local.selectRecursoWhereCodigo(codigo);
}
}
package ejercicio.practico.persistencia;
import java.util.List;
import javax.ejb.Local;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Local
public interface IPersistenciaABMLocal {
void insertRecurso(Recurso recurso);
void insertTipoRecurso(TipoRecurso tipoRecurso);
List<Recurso> selectRecurso();
Recurso selectRecursoWhereCodigo(String codigo);
List<TipoRecurso> selectTipoRecurso();
TipoRecurso selectTipoRecursoWhereNombre(String nombre);
}
package ejercicio.practico.persistencia;
import java.util.List;
import javax.ejb.Remote;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Remote
public interface IPersistenciaABMRemoto {
void insertRecurso(Recurso recurso);
void insertTipoRecurso(TipoRecurso tipoRecurso);
List<Recurso> selectRecurso();
Recurso selectRecursoWhereCodigo(String codigo);
List<TipoRecurso> selectTipoRecurso();
TipoRecurso selectTipoRecursoWhereNombre(String nombre);
}
package ejercicio.practico.persistencia;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import ejercicio.practico.entitidades.Recurso;
import ejercicio.practico.entitidades.TipoRecurso;
@Stateless
//@Transactional
public class PersistenciaABM implements IPersistenciaABMLocal, IPersistenciaABMRemoto {
@PersistenceContext//(unitName = "Recursos")
private EntityManager entityManager;
/*
*
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("Recursos");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.close();
entityManagerFactory.close();
*/
// Persistence.createEntityManagerFactory("my-app");
public void insertRecurso(Recurso recurso) {
this.entityManager.persist(recurso);
}
public void insertTipoRecurso(TipoRecurso tipoRecurso) {
this.entityManager.persist(tipoRecurso);
}
public List<Recurso> selectRecurso() {
return this.entityManager.createNamedQuery("Recurso.all", Recurso.class).getResultList();
}
public Recurso selectRecursoWhereCodigo(String codigo) {
return this.entityManager.find(Recurso.class, codigo);
}
public List<TipoRecurso> selectTipoRecurso() {
return this.entityManager.createNamedQuery("TipoRecurso.all", TipoRecurso.class).getResultList();
}
public TipoRecurso selectTipoRecursoWhereNombre(String nombre) {
return this.entityManager.find(TipoRecurso.class, nombre);
}
}
......@@ -20,22 +20,40 @@
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="practicoPersistenceUnit">
<!-- If you are running in a production environment, add a managed
data source, this configuration uses the JakartaEE default data source is just for development and testing! -->
<jta-data-source>java:comp/DefaultDataSource</jta-data-source>
<!--persistence-unit name="Recursos">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>ejercicio.practico.entitidades.Recurso</class>
<class>ejercicio.practico.entitidades.TipoRecurso</class>
<properties>
<!--The database schema ist auto created on deployment and dropped before redeploy.
Note: the following configuration does not drop the tables on undeploy. If you prefer this, use this
Hibernate property instead:
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/schema.practicoEj8"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="TSE1234!"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-->
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
<!-- Properties for Hibernate -->
<property name="hibernate.show_sql" value="false" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/schema.practicoEj8" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="TSE1234!" />
</properties>
</persistence-unit> -->
<persistence-unit name="Recursos" transaction-type="RESOURCE_LOCAL">
<class>ejercicio.practico.entitidades.Recurso</class>
<class>ejercicio.practico.entitidades.TipoRecurso</class>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.ProgressDialect" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.username" value="postgres" />
<property name="hibernate.connection.password" value="TSE1234!" />
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/schema.practicoEj8" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment