Sie sind auf Seite 1von 14

TRABAJO DE INVESTIGACIN SEGUNDO CORTE

DANIEL PENAGOS CALVETE

UNIVERSIDAD SAN BUENAVENTURA


FACULTAD DE INGENIERA
INGENIERA MULTIMEDIA
SANTIAGO DE CALI
2015
TRABAJO DE INVESTIGACIN SEGUNDO CORTE

DANIEL PENAGOS CALVETE

INVESTIGACIN

HANSELD ALEXIS ESCALLON ORTIZ

UNIVERSIDAD SAN BUENAVENTURA


FACULTAD DE INGENIERA
INGENIERA MULTIMEDIA
SANTIAGO DE CALI
2015

CONTENIDO

Pg
2

1. INTRODUCCIN...........................................................................................................4
2. OBJETIVOS.................................................................................................................... 5
2.1 OBJETIVO GENERAL...............................................................................................5
2.2 OBJETIVOS ESPECFICOS.....................................................................................5
3 DESARROLLO DEL PROYECTO....................................................................................6
CONCLUSIONES.............................................................................................................. 12
BIBLIOGRAFA................................................................................................................. 13

1. INTRODUCCIN

A la hora de desarrollar un proyecto en java para la web, es ideal tener en cuenta


todas esas buenas prcticas como lo son los patrones de diseo, estndares y
dems tecnologas que nos brinda esta plataforma, ya que esto har de nuestro
proyecto ms eficiente y perdurable ante posibles modificaciones. Una de estas
soluciones es la inyeccin de dependencias la cual nos permite tener un mejor
performance en nuestra aplicacin en base a la comunicacin entre los objetos y
sus atributos en relacin a los datos almacenados en una base de datos, sin la
necesidad de establecer una comunicacin directa sino basado en una
arquitectura orientada a objetos que es mucho ms ptimo y le brinda al software
mayor escalabilidad.

2. OBJETIVOS
2.1 OBJETIVO GENERAL

Entender las herramientas que brinda java para los proyectos realizados en JPA

2.2 OBJETIVOS ESPECFICOS

Investigar sobre la API Criteria, en base a la consulta de los datos y su


relacin con las entidades y el metamodelo

Entender el patrn de diseo llamado Inyeccin de dependencias y como


se pueden manejar los datos

Hacer una relacin entre los lenguajes SQL y JPQL, ya que el ltimo est
orientado a objetos y permite optimizar la trada de los datos en java.

3 DESARROLLO
Inyeccin de dependencias
Es un patrn de diseo orientado a objetos que deriva de un patrn ms genrico
llamado Inversin de Control. DI hace uso de la modularidad y la reutilizacin [1],
ya que suministra objetos a una clase en lugar de ser la propia clase quien cree el
objeto, en pocas palabras consiste en inyectar comportamientos a componentes,
hacindolos independientes unos de otros, comunicndose generalmente por
medio de una interface, esto permite obtener un cdigo ms flexible, limpio y
modular. El trmino fue acuado por primera vez por Martin Fowler [2].

La inyeccin de dependencia implica cuatro funciones


El objeto de servicio que se utilizar
El objeto cliente que est en funcin de los servicios que utiliza
Las interfaces que definen cmo el cliente puede utilizar los servicios
El inyector, que es responsable de la construccin de los servicios e inyectarlos
en el cliente

Ejemplo
Supongamos que se tiene un almacn de televisores y se desea hacer el
inventario, el problema est en que algunos televisores tienen pantallas LCD y
otros de tipo LED, por lo tanto se decide hacer una clase Televisor, la cual tendr
como propiedad la interface de pantalla, permitindonos asegurar que mtodos
debe de tener esta clase
public class Televisor {
private PantallaInterface pantalla;
public Televisor(PantallaInterface pantallaGenerica){
pantalla = pantallaGenerica;
}
public void usar(){
pantalla.encender();
}
}
La interface de la pantalla, la cual deben de implementar todos los tipos de
pantalla

public interface PantallaInterface {


void encender();
}
Se procede a crear los 2 objetos segn los tipos de pantalla que hallan en la
tienda, en este caso LCD y LED
public class ObjetoPantallaLcd implements PantallaInterface {
@Override
public void encender() {
System.out.println("Pantalla de tipo LCD");
}
}
public class ObjetoPantallaLed implements PantallaInterface {
@Override
public void encender() {
System.out.println("Pantalla de tipo LED");
}
}
Al final para poder hacer uso de las anteriores clases se ejecuta el programa como
lo muestra el siguiente cdigo
public class Start {
public static void main(String[] args) {
ObjetoPantallaLcd lcd =new ObjetoPantallaLcd ();
Televisor tv = new Televisor (lcd);
tv.encender();
ObjetoPantallaLed led =new ObjetoPantallaLed();
tv = new Televisor (led);
tv.encender();
}
}

Inyeccin de recursos
Es usada para declarar una referencia a un recurso el cual est disponible en el
JNDI namespace y que puede ser ya sea una fuentes de datos, un conector, o
cualquier otro recurso deseado, permitiendo as decorar una clase, un archivo o un
mtodo, como por ejemplo un servlet un enterprise bean, o un managed bean.
Java realiza esta funcionalidad por medio de javax.annotation.Resource. El
contenedor inyectara el recurso referencia a travs de la anotacin @Resource, ya
sea en tiempo de ejecucin o cuando se inicializa el componente [3].
La anotacin @Resource tiene los siguientes elementos:

name: El nombre JNDI del recurso.

type: el tipo de lenguaje Java del recurso.

authenticationType: El tipo de autentificacin para usar el recurso

shareable: indica si el recurso puede ser compartido

mappedName: una aplicacin especfica nonportable, donde el recurso


debe ser mapeado
description: La descripcin del recurso

Java Persistence Query Language (JPQL)


Es un lenguaje de consulta orientado a objetos independiente de la plataforma
definido como parte de la especificacin Java Persistence API (JPA). Define las
consultas de las entidades y su estado persistente [4], adems permite escribir
consultas porttiles que funcionan independientemente del almacn de datos
subyacente. Utiliza los esquemas de persistencia abstractas de entidades [5]
JPQL est desarrollado en base a la sintaxis SQL, pero no afectar directamente a
la base de datos que generalmente es relacional, ya que de esto se encargar
SQL el cual traba directamente con las tablas, registros y campos, mientras que
JPQL trabaja con objetos (clases de java), atributos y relaciones. Por ejemplo, una
consulta JPQL puede recuperar y devolver objetos entidad y no slo los valores de
los campos segn la tabla de la base de datos, como pasa con SQL. [6]. Por todo

lo anterior JPQL se puede considerar como una versin orientada a objetos de


SQL [7].
JPQL puede ser utilizado para seleccionar (SELECT), as como para
actualizaciones masivas (UPDATE) y eliminaciones (DELETE). JPQL se puede
utilizar en un NamedQuery (a travs de anotaciones o XML) o en consultas
dinmicas utilizando el API EntityManager CreateQuery(). JPQL est basado en
Hibernate Query Language (HQL), un lenguaje de consulta anterior no estndar
incluido en la biblioteca de mapeo objeto-relacional Hibernate. Hibernate y HQL se
crearon antes de la especificacin JPA. Hasta la versin Hibernate 3, JPQL es un
subconjunto de HQL [8].
Ejemplo
Se necesita sacar la lista de empleados que sean del tipo administrativo, que tienen como
id 2 en la tabla tipo de empleados, para despus imprimirlos por consola a travs de un
for
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class ScalarandAggregateFunctions{
public static void main( String[ ] args ){
EntityManagerFactory
Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager();

emfactory

Query query = entitymanager.createQuery("Select UPPER(e.nombre) FROM


Empleado e WHERE e.tipo = :tipo");
query.setParameter("tipo", 2);
List< Empleado> resultado = query.getResultList();
for(String e:resultado){
System.out.println("Nombre del Empleado :"+e);
}

}
}

Criteria API

Se utiliza para definir consultas dinmicas a travs de la construccin de objetos


de definicin de consulta basados en objetos, en lugar de utilizar el enfoque
basado en la serie de JPQL. La Criteria API permite consultas dinmicas que se
construirn mediante programacin, ofreciendo una mejor integracin con el
lenguaje Java. Son de tipo seguro en cuanto al uso de interfaces y clases para
representar a varias partes estructurales de una consulta como la consulta en s
[9].
La API Criteria opera en este esquema abstracto para permitir a los
desarrolladores a encontrar, modificar y eliminar entidades persistentes invocando
operaciones de entidades Java Persistence API. Los criterios se incluyen en todas
las versiones de JPA. Por lo tanto, cada paso de los criterios es notificado de las
especificaciones de JPA. La API Criteria se aadi en JPA 2.0 y 2.0 EclipseLink
[10].
Criteria API es esencialmente un grfico de objetos, donde cada parte de la grfica
representa una creciente. El primer paso en la realizacin de una consulta de la
API
criteria,
es
la
construccin
del
grfico.
La
interfaz
javax.persistence.criteria.CriteriaBuilder es la primera cosa con la que se debe
comenzar a utilizar para las consultas de criterios. Su papel es el de una fbrica
para todas las piezas individuales de los criterios. Se puede obtener una instancia
javax.persistence.criteria.CriteriaBuilder llamando al mtodo getCriteriaBuilder del
javax.persistence.EntityManagerFactory [11]
Ejemplo
Como se hizo en el ejemplo anterior, nos vamos en una entidad empleado y de
acuerdo a ella, sacaremos todos los registros de la base de datos de esos
empleados, con lo cual se podr ver una gran comparativa entre usar la API
Criteria y JPQL

10

public class CriteriaApi


{
public static void main(String[] args)
{
EntityManagerFactory emfactory =
Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
CriteriaBuilder criteriaBuilder = entitymanager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root< Empleado > from = criteriaQuery.from(Empleado.class);
//select all records
System.out.println(Select all records);
CriteriaQuery<Object> select =criteriaQuery.select(from);
TypedQuery<Object> typedQuery = entitymanager.createQuery(select);
List<Object> listaEmpleados= typedQuery.getResultList();
for(Object o: listaEmpleados)
{
Empleado e = (Empleado);
System.out.println("ID : " + e.getEid() + " Nombre : " + e.getEname());
}
entitymanager.close( );
emfactory.close( );
}
}

11

CONCLUSIONES

Java permite realizar una mejor manipulacin de los valores de la base de


datos, ya que hay un mayor orden y comunicacin de estos datos, con las
clases que van a interferir en el desarrollo del proyecto.

El poder hacer uso de JPQL, permite una mejor la seleccin y actualizacin


de las tablas de la base de datos, ya que los campos que las componen
estn directamente relacionados con los atributos de los objetos que al final
va a devolver la consulta o accin en la base de datos.

Con la API Criteria no es necesario usar directamente sentencias SQL en


java, si no que ya permite un manejo de estos valores de la base de datos,
a nivel de objetos o ms especficamente entidades, logrando as un cdigo
ms limpio y con un mejor mantenimiento

12

BIBLIOGRAFA
[1] KANIBALCRITICON. Inyeccin de dependencias. Qu es y para qu sirve?
[En
lnea],
5
de
octubre
de
2012.
Disponible
en
Internet:
http://codecriticon.com/inyeccion-de-dependencias/
[2] Fundacin wikipedia. Inyeccin de dependencia [En lnea], 16 de junio de
2015.
Disponible
en
Internet:
https://es.wikipedia.org/wiki/Inyecci
%C3%B3n_de_dependencias
[3] Oracle. Resource Injection. [En lnea], junio del 2010. Disponible en Internet:
http://docs.oracle.com/javaee/5/tutorial/doc/bncjk.html
[4] Fundacin wikipedia. Java Persistence Query Language [En lnea], 7 de junio
de
2013.
Disponible
en
Internet:
https://es.wikipedia.org/wiki/Java_Persistence_Query_Language
[5] Oracle. The Java Persistence Query Language. [En lnea], enero del 2013.
Disponible en Internet: http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html
[6] TutorialsPoint. JPA - JPQL. [En lnea].
http://www.tutorialspoint.com/es/jpa/jpa_jpql.html

Disponible

en

Internet:

[7] ObjectDB. Chapter 4 - JPA Queries (JPQL / Criteria). [En lnea]. Disponible en
Internet: http://www.objectdb.com/java/jpa/query
[8] WikiBooks. Java Persistence/JPQL [En lnea], 3 de octubre de 2015. Disponible
en Internet: https://en.wikibooks.org/wiki/Java_Persistence/JPQL
[9] Ben Gelernter y Rick Sapir. Criteria API [En lnea], 18 de junio de 2012.
Disponible
en
Internet:

13

https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query
ing/Criteria
[10] TutorialsPoint. JPA - API Criterios [En lnea]. Disponible en Internet:
http://www.tutorialspoint.com/es/jpa/jpa_criteria_api.htm
[11] HIBERNATE. Chapter 9. Criteria Queries [En lnea], Copyright 2005 Red
Hat
Inc.
Disponible
en
Internet:
https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.
html

14

Das könnte Ihnen auch gefallen