Slide 1

Slide 1 text

Daniel Dias Java EE Developer - SouJava [email protected] - @danieldiasjava Simplificando persistência de Dados com Apache

Slide 2

Slide 2 text

2 / 26

Slide 3

Slide 3 text

3 / 26 https://deltaspike.apache.org/

Slide 4

Slide 4 text

4 / 26 ● Uma coleção de extensões CDI portáveis que fornecem recursos úteis para desenvolvedores Java.

Slide 5

Slide 5 text

5 / 26 ● Uma coleção de extensões CDI portáveis que fornecem recursos úteis para desenvolvedores Java. ● Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações.

Slide 6

Slide 6 text

6 / 26 ● Uma coleção de extensões CDI portáveis que fornecem recursos úteis para desenvolvedores Java. ● Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações. ● incluem recursos para segurança aprimorada com controle de tipo seguro sobre invocações de método, integração com agendamentos, injeção de objetos CDI em validadores, um contexto e escopo transacional e muito mais.

Slide 7

Slide 7 text

7 / 26 ● Uma coleção de extensões CDI portáveis que fornecem recursos úteis para desenvolvedores Java. ● Consiste de um módulo CORE e vários módulos OPCIONAIS provendo funcionalidades adicionais para nossas aplicações. ● incluem recursos para segurança aprimorada com controle de tipo seguro sobre invocações de método, integração com agendamentos, injeção de objetos CDI em validadores, um contexto e escopo transacional e muito mais. ● Como uma extensão CDI, o DeltaSpike deve ser usado em conjunto com uma implementação de CDI e suporta tanto o JBoss Weld quanto o Apache OpenWebBeans. Testado em uma variedade de servidores de aplicativos e contêineres habilitados para CDI, incluindo o TomEE, WildFly, GlassFish e Jetty .

Slide 8

Slide 8 text

8 / 26

Slide 9

Slide 9 text

9 / 26

Slide 10

Slide 10 text

10 / 26

Slide 11

Slide 11 text

11 / 26 Fonte: https://www.slideshare.net/antoinesd/apache-deltaspike-the-cdi-toolbox

Slide 12

Slide 12 text

12 / 26 https://deltaspike.apache.org/documentation/data.html

Slide 13

Slide 13 text

13 / 26 ● Módulo de dados é uma implementação do padrão de repositório . ● Só suporta RDBMS através de JPA . ● Mas poderia ser estendido para suportar outros serviços de dados . ● Ele usa o módulo de “parcial bean” para criar dinamicamente a implementação no tempo de execução . ● Os padrões de repositório são ideais para consultas simples que exigem código clichê, permitindo a centralização da lógica de consulta e, consequentemente, reduzindo a duplicação de código e melhorando a testabilidade.

Slide 14

Slide 14 text

14 / 26

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

16 / 26

Slide 17

Slide 17 text

17 / 26 @Repository public interface EventRepository extends EntityRepository< >{}

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19 / 26 @Repository public interface EventRepository extends FullEntityRepository< >{}

Slide 20

Slide 20 text

20 / 26 @Repository public abstract class EventRepository extends AbstractFullEntityRepository< > { public List findBySpeaker { return criteria() .like(Event_.speaker, "%" + speaker + "%") .getResultList(); } }

Slide 21

Slide 21 text

21 / 26

Slide 22

Slide 22 text

22 / 26 @Repository public interface EventRepository extends EntityRepository< >{ Optional findBySpeaker(String speaker); } ● O método de consulta deve retornar uma entidade, uma Opcional de uma entidade, uma lista de entidades ou um fluxo de entidades. ● Ele deve começar com o prefixo findBy (ou relacionado findOptionalBy, findAnyBy, findAll, findFirst ou findTop). ● Você pode adicionar mais blocos de propriedade-comparador que precisam ser concatenados por um operador booleano. Isso é um AND ou OR. ● Podemos usar o mesmo método para excluir uma entidade: * Deve começar com a palavra-chave removeBy (ou deleteBy relacionado). ● também é possível classificar consultas usando a palavra-chave OrderBy, seguida do nome do atributo e da direção (Asc ou Desc) : List findByLastNameLikeOrderByAgeAscLastNameDesc(String lastName);

Slide 23

Slide 23 text

23 / 26 @Repository public interface EventRepository extends EntityRepository< >{ @Query(“select e Event e where e.speaker = ?1”) Event findBySpeaker(String speaker); } ● é possível usar consulta SQL nativa, bastando adicionar o argumento : isNative = true . ● suporte a @NamedQueries . ● suporte a consulta em tempo de execução usando QueryResult : @Query("select p from Person p where p.age between ?1 and ?2") QueryResult findAllByAge(int minAge, int maxAge); List result = personRepository.findAllByAge(18, 65) .orderAsc("p.lastName", false) .orderDesc("p.age", false) .lockMode(LockModeType.WRITE) .hint("org.hibernate.timeout", Integer.valueOf(10)) .getResultList();

Slide 24

Slide 24 text

24 / 26 Contribuindo

Slide 25

Slide 25 text

25 / 26 Referências

Slide 26

Slide 26 text

Daniel Dias Java EE Developer - SouJava [email protected] - @danieldiasjava