Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Simplificando la persistencia de datos con Apache DeltaSpike Data

Daniel Dias
October 05, 2019

Simplificando la persistencia de datos con Apache DeltaSpike Data

JUG Nicaragua en colaboracion con SOUJava, la comunidad de desarrolladores Java de Brasil, los invita al webnair acerca de #Apache #DeltaSpike un proyecto de apache que provee una colección de herramientas de CDI y persistencia de Datos.

===
Apache DeltaSpike es una colección de extensiones CDI portátiles que proporcionan funciones útiles para los desarrolladores de Java.

DeltaSpike consta de un módulo CORE y varios módulos OPCIONALES que proporcionan funcionalidad adicional para nuestras aplicaciones.

En este webnair veremos el módulo de datos, que es el más conocido y muy útil, y porque se convirtió en mi favorito como alternativa a "Spring Data" para Jakarta EE.

Codigo:

https://github.com/Daniel-Dos/danieldiasjava-palestras/tree/master/JUGNicaragua

Video :
https://www.youtube.com/watch?v=djM51tlJuLs&feature=youtu.be

Daniel Dias

October 05, 2019
Tweet

More Decks by Daniel Dias

Other Decks in Technology

Transcript

  1. Daniel Dias Jakarta EE Developer - SouJava daniel.dias@soujava.org.br - @danieldiasjava

    Simplificando la persistencia de datos con Apache
  2. 2 / 26 Agenda Apache DeltaSpike - Visión general DeltaSpike

    Data
  3. 3 / 26 Apache DeltaSpike https://deltaspike.apache.org/

  4. 4 / 26 • Una colección de extensiones CDI portátiles

    que proporcionan funciones útiles para desarrolladores de Java. Apache DeltaSpike
  5. 5 / 26 • Una colección de extensiones CDI portátiles

    que proporcionan funciones útiles para desarrolladores de Java. • Consiste en un módulo CORE y varios módulos OPCIONALES que proporcionan funcionalidad adicional para nuestras aplicaciones. Apache DeltaSpike
  6. 6 / 26 • Una colección de extensiones CDI portátiles

    que proporcionan funciones útiles para desarrolladores de Java. • Consiste en un módulo CORE y varios módulos OPCIONALES que proporcionan funcionalidad adicional para nuestras aplicaciones. • Estas incluyen características para una seguridad mejorada con control de tipo seguro sobre invocaciones de métodos, integración con programaciones, inyección de objetos CDI en validadores, un alcance y contexto transaccional, y más. Apache DeltaSpike
  7. 7 / 26 Apache DeltaSpike • Una colección de extensiones

    CDI portátiles que proporcionan funciones útiles para desarrolladores de Java. • Consiste en un módulo CORE y varios módulos OPCIONALES que proporcionan funcionalidad adicional para nuestras aplicaciones. • Estas incluyen características para una seguridad mejorada con control de tipo seguro sobre invocaciones de métodos, integración con programaciones, inyección de objetos CDI en validadores, un alcance y contexto transaccional, y más. • Como una extensión CDI, DeltaSpike debe usarse junto con una implementación CDI y es compatible tanto con JBoss Weld como con Apache OpenWebBeans. Probado en una variedad de servidores y contenedores de aplicaciones habilitados para CDI, incluidos TomEE, WildFly, GlassFish y Jetty.
  8. 8 / 26 Apache DeltaSpike Ganador de Duke’s Choice 2014

  9. 9 / 26 Apache DeltaSpike Que esta incluido?

  10. 10 / 26

  11. 11 / 26 DeltaSpike Data https://deltaspike.apache.org/documentation/data.html

  12. 12 / 26 DeltaSpike Data • El módulo de datos

    es una implementación del estándar de repositorio. • Solo es compatible con RDBMS a través de JPA. • Pero podría extenderse para admitir otros servicios de datos. • Utiliza el módulo “bean parcial” para crear dinámicamente la implementación en tiempo de ejecución. • Los estándares de repositorio son ideales para consultas simples que requieren código cliché, permitiendo la centralización de la lógica de consulta, reduciendo así la duplicación de código y mejorando la capacidad de prueba.
  13. 13 / 26 Repositorios

  14. 14 / 26 @Repository(forEntity=Event.class) public interface EventRepository {} @Repository(forEntity=Event.class) public

    abstract class EventRepository {} DeltaSpike Data • La anotación no tiene que definir la clase de entidad, pero si solo hay clases o interfaces simples, esta es la única forma de decirle a la estructura con qué entidad de depósito está relacionada.
  15. 15 / 26 Tipos básicos de repositorios

  16. 16 / 26 La Interface Base EntityRepository @Repository public interface

    EventRepository extends EntityRepository<Event, Long>{}
  17. 17 / 26 La Clase AbstractEntityRepository @Repository public abstract class

    EventRepository extends AbstractEntityRepository<Event, Long> { public List<Event> findBySpeaker(String speaker) { return typedQuery("select e from Event e where e.speaker = ?1") .setParameter(1, speaker).getResultList(); } }
  18. 18 / 26 La Interface FullEntityRepository @Repository public interface EventRepository

    extends FullEntityRepository<Event, Long>{}
  19. 19 / 26 La Clase AbstractFullEntityRepository @Repository public abstract class

    EventRepository extends AbstractFullEntityRepository<Event, Long> { public List<Event> findBySpeaker(String speaker) { return criteria() .like(Event_.speaker, "%" + speaker + "%") .getResultList(); } }
  20. 20 / 26 Query Method Expression y Query Annotations

  21. 21 / 26 Query Method Expression @Repository public interface EventRepository

    extends EntityRepository<Event, Long>{ Optional<Event> findBySpeaker(String speaker); } • El método de consulta debe devolver una entidad, una opción de entidad, una lista de entidades o un flujo de entidad. • Debe comenzar con el prefijo findBy (o findOptionalBy, findAnyBy, findAll, findFirst o findTop relacionados). • Puede agregar más bloques comparadores de propiedades que deben ser concatenados por un operador booleano. Este es un AND o OR. • Podemos usar el mismo método para eliminar una entidad: Debe comenzar con la palabra clave removeBy (o relacionada con deleteBy). • También puede ordenar las consultas con la palabra clave OrderBy, seguido del nombre y la dirección del atributo (Asc o Desc): List<Person> findByLastNameLikeOrderByAgeAscLastNameDesc(String lastName);
  22. 22 / 26 Query Annotations @Repository public interface EventRepository extends

    EntityRepository<Event, Long>{ @Query(“select e Event e where e.speaker = ?1”) Event findBySpeaker(String speaker); } • Puede usar una consulta SQL nativa simplemente agregando el argumento:isNative = true. • apoyo @NamedQueries . • consulta de soporte en tiempo de ejecución usando QueryResult : @Query("select p from Person p where p.age between ?1 and ?2") QueryResult<Person> findAllByAge(int minAge, int maxAge); List<Person> result = personRepository.findAllByAge(18, 65) .orderAsc("p.lastName", false) .orderDesc("p.age", false) .lockMode(LockModeType.WRITE) .hint("org.hibernate.timeout", Integer.valueOf(10)) .getResultList();
  23. 23 / 26 - Código ( https://github.com/apache/deltaspike ) - Issues

    :( https://issues.apache.org/jira/projects/DELTASPIKE/issues) - Site ( https://deltaspike.apache.org) - Git-Workflows (https://deltaspike.apache.org/suggested-git-workflows.html) Listas : - subscribe = users-subscribe@deltaspike.apache.org - User List = users@deltaspike.apache.org - Dev-subscribe = dev-subscribe@deltaspike.apache.org - Dev List = dev@deltaspike.apache.org Contribuyendo
  24. 24 / 26 Referencias - https://deltaspike.apache.org/ - https://deltaspike.apache.org/documentation/ - http://www.slideshare.net/antoinesd/apache-deltaspike-the-cdi-toolbox

    - https://www.slideshare.net/os890/apache-deltaspike - https://www.baeldung.com/deltaspike-data-module - https://deltaspike.apache.org/documentation/data.html#QueryMethodExpressions - https://deltaspike.apache.org/documentation/data.html#QueryAnnotations - https://deltaspike.apache.org/documentation/data.html#AnnotationOptions - https://medium.com/danieldiasjava/simplificando-persistencia-de-dados-com-apache-deltaspike -data-6fd27bb2d821 - https://www.javaindeed.com/implementing-repositories-in-java-se-using-deltaspike/
  25. Gracias Daniel Dias Jakarta EE Developer - SouJava daniel.dias@soujava.org.br -

    @danieldiasjava