estou passando aqui pra anunciar meu 3º livro pela Casa do Código.
Assim como nos outros livros, boa parte do que eu aprendi veio da comunidade, Javaneiros, e fóruns. Então fico muito feliz em poder compartilhar isso com vocês.
Conteúdo
Seja no modelo tradicional ou de microsserviços, separar nossa aplicação em partes menores facilita a escalabilidade, a manutenção, dentre outras qualidades que buscamos nos nossos projetos. Para desenvolver um bom back-end, não basta seguir uma receita pronta. É preciso realmente entender as ferramentas para tirar o máximo delas sem comprometer o desempenho. Em java, dentre as tecnologias para atingir esse objetivo, temos CDI, JPA e principalmente EJBs e JAX-RS.
Neste livro, Gilliard Cordeiro ensina como escalar uma aplicação sem aumentar sua complexidade. Você verá como sair do básico, seja com microsserviços, seja em uma arquitetura mais tradicional. A primeira parte do livro é dedicada ao Thorntail, pensada principalmente em quem precisa rapidamente aprender como fazer um back-end, construindo uma API Rest com as tecnologias do Java EE (Jakarta EE). Já a segunda parte é focada em mostrar realmente como os EJBs funcionam por dentro. Ao fim do livro, você saberá como melhorar a performance de operações pesadas através de paralelismo, incluindo entre as técnicas a programação reativa.
Sumário
Parte 1: Início rápido
- 1 Microsserviços e Java EE
- 1.1 Por que microsserviços?
- 1.2 Thorntail ou Spring Boot?
- 1.3 Criando primeiro serviço com JAX-RS
- 1.4 Adicionando persistência de dados
- 1.5 EJBs e Java EE no geral não são muito complexos para microsserviços?
- 2 Serviços REST com JAX-RS
- 2.1 Escalando serviços REST através do uso de Cache
- 2.2 Revalidando o cache com GETs condicionais
- 2.3 Cliente usando GET condicional
- 2.4 Server-Sent Events (SSE) como alternativa ao cache
- 2.5 Enviando dados (POST) através do cliente REST
- 2.6 Criando uma interface Java do lado cliente para servir de proxy
- 2.7 Enviando dados através de um POST condicional
- 2.8 Como o desenvolvimento de microsserviços se relaciona com o restante do livro
Parte 2: Conhecendo de forma mais profunda
- 3 Sendo reapresentados aos EJBs
- 3.1 Por que usar EJB hoje em dia?
- 3.2 O que vamos usar para criar nossa aplicação?
- 3.3 Fazer o código na mão, utilizar Wizards, ou o JBoss Forge?
- 3.4 Baixando o servidor e criando o projeto
- 3.5 Criando um EJB simples
- 4 Os Sessions Beans por estado
- 4.1 EJB Stateless
- 4.2 EJB Stateful
- 4.3 Removendo um EJB Stateful
- 4.4 Removendo um bean Stateful via timeout
- 4.5 Lidando com Stateful Session Beans removidos e NoSuchEJBException
- 4.6 Remoção automática de beans Stateful associados a um contexto CDI
- 4.7 EJB Singleton
- 5 Os Sessions Beans por interface
- 5.1 EJBs Remotos
- 5.2 Desenvolvendo um EJB remoto
- 5.3 Criando um cliente de EJB remoto
- 5.4 EJBs Locais
- 5.5 EJBs sem interface
- 5.6 Revisão geral sobre exposição de interfaces dos EJBs
- 6 Integrando EJB e JPA
- 6.1 Iniciando com a JPA
- 6.2 Primeiras diferenças entre JPA puro e seu uso com EJBs
- 6.3 Usar o padrão DAO, Service Bean + Controller, ou tudo junto?
- 6.4 Usando JSF para construir as telas
- 6.5 Lidando com LazyInitializationException ou equivalente
- 6.6 Evitando LazyInitializationException com EJB Stateful
- 7 Gerenciando transações com EJBs
- 7.1 Executando commit em uma transação
- 7.2 Executando rollback em uma transação
- 7.3 Exceções de sistema e exceções de aplicação
- 7.4 EJB Stateful e o rollback de transações
- 8 Lidando com mais de uma transação
- 8.1 As opções de transações com @TransactionAttribute
- 9 Testando nossos serviços
- 9.1 Criando testes de integração com Mockito
- 9.2 Criando testes de integração com o contêiner
- 9.3 Utilizando o Arquillian para testes de integração
- 9.4 Configurando o Arquillian na nossa aplicação
- 9.5 Criando um teste "hello world"
- 9.6 Criando um teste real
- 9.7 Usando mocks nos testes com Arquillian
- 10 Criando WebServices com JAX-RS
- 10.1 JAX-RS: Transformando um EJB em um serviço REST que devolve JSON
- 10.2 Retornando um XML através do serviço REST
- 10.3 Retornando diferentes formatos com o mesmo serviço REST
- 10.4 Criando um cliente de serviço REST
- 10.5 Criando um cliente JS para um serviço REST
- 10.6 Acessar diretamente a camada de negócios a partir da visualização é uma boa?
- 11 Server-Sent Events ou SSE (JAX-RS 2.1, Java EE 8)
- 11.1 Reactive Client API (JAX-RS 2.1, Java EE 8)
- 11.2 A diferença entre Future e CompletionStage
- 11.3 Como usar o CompletionStage?
- 12 Métodos assíncronos e paralelismo para aumento de performance
- 12.1 O uso de @Asynchronous para não bloquear o usuário
- 12.2 Recuperando o retorno de uma execução em segundo plano
- 12.3 Executando código em paralelo com @Asynchronous
- 12.4 Paralelizando a persistência no banco de dados
- 12.5 Pós-créditos
- 13 Utilizando a Concurrency Utilities for Java EE
- 13.1 Criando um novo Managed Executor Service
- 13.2 Criando um Executor Service programaticamente