O documento apresenta uma palestra sobre produtividade e maturidade usando a ferramenta JHipster. Apresenta os objetivos de gerar uma aplicação completa com JHipster em 1 hora para atender aos requisitos de um cliente. Explica o que é JHipster, Spring Boot e como eles automatizam a criação de código, permitindo focar na lógica de negócio. Demonstra o uso de JHipster para gerar CRUDs, deploy na nuvem e personalizar o código.
5. Ideia Principal
Criar uma aplicação funcional
com o JHipster e então observar
cada parte do código gerado e
entender como cada parte
funciona e como se relacionam
com as demais .
7. O Desafio
•Demonstração para o novo Cliente:
Criar uma aplicação funcional, seguindo
um modelo proposto, atendendo os
seguintes requisitos:
• Bonita
• Interface Responsiva
• Segura
• Escalável
• Internacionalização: Português, Inglês, Espanhol e
Francês.
• Login Próprio, Facebook, Twitter e Google
8. Desafio – Cont. Requisitos
•Client-Side Angular ( 4+ )
•Server-Side deve fornecer API REST
•Módulo Administrativo com:
• Gerenciamento de Usuário
• Auditoria
• Logs
• Métricas de Consumo e Utilização da aplicação
• Gerenciamento de Configurações
• Documentação da API
• etc
9. Desafio – Cont. Requisitos
•Testes Server-Side e Client-Side.
• Unitário, Integração, Funcional, Performance
•Q&A
• Código Limpo
• Aderente aos melhores padrões da comunidade
• Pronto para a Produção!!!
•Possibilidade de Implantar:
• Serverless
• Container Servlet 3.0
• Docker
• Cloud (Docker, Serverless e Container)
17. O que é o Jhipster
JHipster is a development platform
to generate, develop and deploy
Spring Boot + Angular + Bootstrap
Web applications and Spring
microservices.
18. Metas do Projeto JHipster
•Goal: Our goal is to generate for you a complete
and modern Web app or microservice architecture,
unifying:
• A high-performance and robust Java stack on the
server side with Spring Boot
• A sleek, modern, mobile-first front-end with
Angular and Bootstrap
• A robust microservice architecture with JHipster
Registry, Netflix OSS, ELK stack and Docker
• A powerful workflow to build your application
with Yarn, Webpack/Gulp and Maven/Gradle
19. O que é tão legal ?
•Automatiza muito do trabalho manual.
•Escola dos Frameworks.
•Produz Código de qualidade.
•Segue os padrões e boas práticas.
•Simplifica tarefas complexas.
•Várias opções de projeto
•Vasta Documentação e Comunidade ativa
34. O que o JHipster criou ?
•Estrutura inicial
•Layout inicial
•Gestão de Usuários
•Segurança
•Módulo Administrativo repleto de itens
•Gestão Métricas do Sistema
•Previsão para os casos de uso
•……..
•Tudo Funcionando!
46. O que Fizemos Agora?
•CRUDs (Client side e Server side)
•Alterações do Banco de Dados
•Alterações no Menu
•Alterações de configurações
•Alterações na Internacionalização
•Etc
49. Login com Goolge
•Orientações em application.yml
•Google API Console
•Authorized JavaScript origins
•http://localhost:8080
•http://localhost:9000
•Authorized redirect URIs
•http://localhost:8080/signin/google
•Habilite a Google+ API Library
•Configure o client-id e o client-secret
52. Deploy no Heroku
•Crie uma conta
•https://www.heroku.com/
•Instale o Heroku-Cli
• https://devcenter.heroku.com/articles/heroku-cli
•Faça o login em sua máquina
•heroku login
•Envie seu projeto para a nuvem
•jhipster heroku
•ReDeploys
•heroku deploy:jar --jar target/*.war
55. Spring Boot
O Spring Boot é um projeto da Spring que veio
para facilitar o processo de configuração e
publicação de nossas aplicações. A intenção é
ter o seu projeto rodando o mais rápido possível
e sem complicação.
Ele consegue isso favorecendo a convenção
sobre a configuração. Basta definir quais
módulos deseja utilizar (WEB, Template,
Persistência, Segurança, etc.) e ele irá
reconhecer e configurar.
(Alexandre Afonso - algaworks)
56. Spring Boot Annotations
@ComponentScan
@EnableAutoConfiguration(exclude = {MetricFilterAutoConfiguration.class,
MetricRepositoryAutoConfiguration.class})
@EnableConfigurationProperties({LiquibaseProperties.class})
public class JhipsterApp {
private final Environment env;
public JhipsterApp(Environment env) {
this.env = env;
}
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(JhipsterApp.class);
DefaultProfileUtil.addDefaultProfile(app);
Environment env = app.run(args).getEnvironment();
String protocol = "http";
if (env.getProperty("server.ssl.key-store") != null) {
protocol = "https";
}
}
}
57. Spring Boot - Dependencies
•Spring Data JPA Starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
•Spring ElasticSearch Starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
58. Dependency Injection
Injeção de dependência (Dependency Injection, em
inglês) é um padrão de desenvolvimento de programas
de computadores utilizado quando é necessário manter
baixo o nível de acoplamento entre diferentes módulos
de um sistema. Nesta solução as dependências entre os
módulos não são definidas programaticamente, mas sim
pela configuração de uma infraestrutura de software
(container) que é responsável por "injetar" em cada
componente suas dependências declaradas. A Injeção de
dependência se relaciona com o padrão Inversão de
controle mas não pode ser considerada um sinônimo
deste.
59. Dependency Injection
•@Inject ou @Autowired
@Inject private AlgumServicoComplexo servico;
@Autowired private OutroObjetoQualquer objInjetado;
•Construtores
public class RegionResource {
public RegionResource(RegionService regionService) {
this.regionService = regionService;
}
}
63. Repository - Spring Data
•Mecanismo:
• find…By
• read…By (Stream<T> Java 8)
• query…By
• count…By
• get…By
64. Repository - Spring Data
•Operadores:
• Distinct
•findDistinctPeopleByLastName(String lastName);
• And
•FindByEmailAddressAndLastName
(EmailAddress emailAddress, String lastName);
• Or
•FindByEmailAddressOrLastName
(EmailAddress emailAddress, String lastName);
• IgnoreCase
•findByLastNameIgnoreCase(String lastName);
• Order By
•findByOrderByFirstNameAsc();
65. Repository - Spring Data
•Exemplos
• List<Region> findByOrderByRegionNameAsc();
• List<Region> findByOrderByRegionNameDesc();
• List<Region> findByRegionName(String regionName);
• List<Region>
findByRegionNameIgnoreCaseOrderByRegionNameAsc
(String regionName);
• @Query("select r from Region r "
+ "where r.regionName LIKE ?1 ORDER BY id")
List<Region> buscar(String regionName);
71. Gestão do Banco de Dados
•Liquibase – Source Control For Your Databases
Liquibase é uma ferramenta open source que
permite rastrear, gerenciar e aplicar mudanças
no esquema do banco de dados.
•Reflete alterações do Modelo no banco de
dados mantendo o histórico de alterações
•Permite desfazer alterações
•Permite gerir alterações entre os
ambientes.