SlideShare uma empresa Scribd logo
Produtividade e Maturidade em suas mãos
Thiago Soares
Presented by
Thiago.soares.jr@gmail.com
JHipster
Agenda
1. Nosso Objetivo
2. O Desafio
3. JHipster
4. Spring
5. Deploy
Objetivos de Hoje
•Conhecer o JHipster
•Conhecer o Heroku
•Conhecer o Spring
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 .
Nosso Desafio
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
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
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)
Tempo: 1 Hora.
Opções
( ) Pedir demissão
( ) Sair correndo
( ) Fingir dor de barriga
( ) Usar uma boa ferramenta!
Opções
( ) Pedir demissão
( ) Sair correndo
( ) Fingir dor de barriga
( X ) Usar uma boa ferramenta!
JHipster
Mais um scaffolding !?
www.jhipster.tech
O que é o Jhipster
JHipster is a development platform
to generate, develop and deploy
Spring Boot + Angular + Bootstrap
Web applications and Spring
microservices.
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
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
Client Side Options
First Topic
Hands On
Getting Started
•mkdir javaday
•cd javaday
•code . ( Visual Studio)
Getting Started
•Instalar Java 8
•Instalar Maven
• https://maven.apache.org/
•Instalar Node.js
• https://nodejs.org/
•Instalar Yarn
• https://yarnpkg.com/lang/en/docs/install/
•Instalar Jhipster
•yarn global add generator-jhipster
yarn global add
generator-jhipster
jhipster
Waiting build……..
JHipster Registry
Não curte o Shell? Sério ?
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!
Vamos ver
Funcionando
então!
./mvnw
yarn start
E as User Stories ?
Vou ter que fazer
na mão ?
CRUDs e a JDL
Mãos à Obra.
Vamos criar esses
Cruds
Customizando o Modelo
•Vamos ajustar alguns relacionamentos
•Remover
•Adicionar
jhipster import-jdl jhipster-jdl.jh
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
Como está nossa
app agora?
Social Login
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
Deploy
Deploy ServerLess
•A aplicação funcionando sem um servidor
•Como:
•mvn package
•./target/java-day-0.0.1-SNAPSHOT.war
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
Spring Boot
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)
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";
}
}
}
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>
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.
Dependency Injection
•@Inject ou @Autowired
@Inject private AlgumServicoComplexo servico;
@Autowired private OutroObjetoQualquer objInjetado;
•Construtores
public class RegionResource {
public RegionResource(RegionService regionService) {
this.regionService = regionService;
}
}
Customizando o
Código Gerado
Repository - Spring Data
•Exemplo: Filtrar pelo usuário logado
•Alteração do Modelo
jhipster import-jdl jhipster-jdl.jh
Repository - Spring Data
•Mecanismo:
• find…By
• read…By (Stream<T> Java 8)
• query…By
• count…By
• get…By
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();
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);
Services
•@Service
•@Transactional
•@Transactional(readOnly = true)
•Dependency Injection
Rest - Resources
•@RestController
•@RequestMapping("/api")
•@GetMapping("/employees")
•@PostMapping("/employees")
•@PutMapping("/employees")
•@DeleteMapping("/employees/{id}")
Interface
O Banco de Dados
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.
Thanks!
No License Statements
@thiagosoaresjr /thiagosoares Thiago.soares.jr@gmail.com
Referências
•JHipster ( http://www.jhipster.tech )
•Spring ( https://spring.io/ )
•API RESTful avançada com Spring Boot e
Java 8 ( https://www.udemy.com/api-
restful-avancada-spring-boot-java-8 )

Mais conteúdo relacionado

Mais procurados

Monitoring Java Applications with Prometheus and Grafana
Monitoring Java Applications with Prometheus and GrafanaMonitoring Java Applications with Prometheus and Grafana
Monitoring Java Applications with Prometheus and Grafana
Justin Reock
 
AI & Machine Learning Pipelines with Knative
AI & Machine Learning Pipelines with KnativeAI & Machine Learning Pipelines with Knative
AI & Machine Learning Pipelines with Knative
Animesh Singh
 
LIRIK NASYID - SOLLA ALAIKA ALLAH.docx
LIRIK NASYID - SOLLA ALAIKA ALLAH.docxLIRIK NASYID - SOLLA ALAIKA ALLAH.docx
LIRIK NASYID - SOLLA ALAIKA ALLAH.docx
zulizabest
 
Editores de texto
Editores de textoEditores de texto
Editores de texto
Guilherme Teixeira
 
ReportPortal use cases presentation
 ReportPortal use cases presentation ReportPortal use cases presentation
ReportPortal use cases presentation
Dmitriy Gumeniuk
 
Jitsi: state-of-the-art video conferencing you can self-host
Jitsi: state-of-the-art video conferencing you can self-hostJitsi: state-of-the-art video conferencing you can self-host
Jitsi: state-of-the-art video conferencing you can self-host
Saúl Ibarra Corretgé
 
Virtualização - O Futuro é na NUVEM
Virtualização - O Futuro é na NUVEMVirtualização - O Futuro é na NUVEM
Virtualização - O Futuro é na NUVEM
Rodrigo Felipe Betussi
 
História da computação
História da computaçãoHistória da computação
História da computação
Bruno Ramalho
 
Control-with-Ansible-Tower
Control-with-Ansible-TowerControl-with-Ansible-Tower
Control-with-Ansible-Tower
Mark Costin
 
01 - Microsoft Office Excel Básico
01 - Microsoft Office Excel Básico01 - Microsoft Office Excel Básico
01 - Microsoft Office Excel Básico
Roney Sousa
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
Guiherme Alarcão
 
Modulo pnae conteudo
Modulo pnae conteudoModulo pnae conteudo
Modulo pnae conteudo
tecampinasoeste
 
Agile의 본질과 실천
Agile의 본질과 실천 Agile의 본질과 실천
Agile의 본질과 실천
Hyungseok Shim
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
Elaine Cecília Gatto
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheet
Masayuki Ozawa
 
Informática aplicada à administração 1
Informática aplicada à administração 1Informática aplicada à administração 1
Informática aplicada à administração 1
Andrey Martins
 
Trabalho do sistemas operativos
Trabalho do sistemas operativosTrabalho do sistemas operativos
Trabalho do sistemas operativos
David Pereira
 
Windows x Linux
Windows  x LinuxWindows  x Linux
Windows x Linux
Bianca Silva
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
Ivan Ricarte
 
Kubernetes Architecture with Components
 Kubernetes Architecture with Components Kubernetes Architecture with Components
Kubernetes Architecture with Components
Ajeet Singh
 

Mais procurados (20)

Monitoring Java Applications with Prometheus and Grafana
Monitoring Java Applications with Prometheus and GrafanaMonitoring Java Applications with Prometheus and Grafana
Monitoring Java Applications with Prometheus and Grafana
 
AI & Machine Learning Pipelines with Knative
AI & Machine Learning Pipelines with KnativeAI & Machine Learning Pipelines with Knative
AI & Machine Learning Pipelines with Knative
 
LIRIK NASYID - SOLLA ALAIKA ALLAH.docx
LIRIK NASYID - SOLLA ALAIKA ALLAH.docxLIRIK NASYID - SOLLA ALAIKA ALLAH.docx
LIRIK NASYID - SOLLA ALAIKA ALLAH.docx
 
Editores de texto
Editores de textoEditores de texto
Editores de texto
 
ReportPortal use cases presentation
 ReportPortal use cases presentation ReportPortal use cases presentation
ReportPortal use cases presentation
 
Jitsi: state-of-the-art video conferencing you can self-host
Jitsi: state-of-the-art video conferencing you can self-hostJitsi: state-of-the-art video conferencing you can self-host
Jitsi: state-of-the-art video conferencing you can self-host
 
Virtualização - O Futuro é na NUVEM
Virtualização - O Futuro é na NUVEMVirtualização - O Futuro é na NUVEM
Virtualização - O Futuro é na NUVEM
 
História da computação
História da computaçãoHistória da computação
História da computação
 
Control-with-Ansible-Tower
Control-with-Ansible-TowerControl-with-Ansible-Tower
Control-with-Ansible-Tower
 
01 - Microsoft Office Excel Básico
01 - Microsoft Office Excel Básico01 - Microsoft Office Excel Básico
01 - Microsoft Office Excel Básico
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Modulo pnae conteudo
Modulo pnae conteudoModulo pnae conteudo
Modulo pnae conteudo
 
Agile의 본질과 실천
Agile의 본질과 실천 Agile의 본질과 실천
Agile의 본질과 실천
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheet
 
Informática aplicada à administração 1
Informática aplicada à administração 1Informática aplicada à administração 1
Informática aplicada à administração 1
 
Trabalho do sistemas operativos
Trabalho do sistemas operativosTrabalho do sistemas operativos
Trabalho do sistemas operativos
 
Windows x Linux
Windows  x LinuxWindows  x Linux
Windows x Linux
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Kubernetes Architecture with Components
 Kubernetes Architecture with Components Kubernetes Architecture with Components
Kubernetes Architecture with Components
 

Semelhante a JHipster - Produtividade e Maturidade em suas mãos

Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
Alvaro Viebrantz
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
Felipe J. R. Vieira
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Amazon Web Services LATAM
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
Amazon Web Services LATAM
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
Amazon Web Services
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
Andre Baltieri
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
Alvaro Viebrantz
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWS
Amazon Web Services LATAM
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
José Alexandre Macedo
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap
Raniere de Lima
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Thiago Sinésio
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Marcelo Marques Gonçalves
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
J0071
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
Valmir Justo
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
Reinaldo Junior
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
Eric Silva
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure Functions
CDS
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
Ryan Padilha
 

Semelhante a JHipster - Produtividade e Maturidade em suas mãos (20)

Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWS
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure Functions
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 

Último

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 

Último (8)

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 

JHipster - Produtividade e Maturidade em suas mãos

  • 1. Produtividade e Maturidade em suas mãos Thiago Soares Presented by Thiago.soares.jr@gmail.com JHipster
  • 2. Agenda 1. Nosso Objetivo 2. O Desafio 3. JHipster 4. Spring 5. Deploy
  • 3. Objetivos de Hoje •Conhecer o JHipster •Conhecer o Heroku •Conhecer o Spring
  • 4.
  • 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)
  • 10.
  • 12. Opções ( ) Pedir demissão ( ) Sair correndo ( ) Fingir dor de barriga ( ) Usar uma boa ferramenta!
  • 13. Opções ( ) Pedir demissão ( ) Sair correndo ( ) Fingir dor de barriga ( X ) Usar uma boa ferramenta!
  • 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
  • 21.
  • 22.
  • 25. Getting Started •mkdir javaday •cd javaday •code . ( Visual Studio)
  • 26. Getting Started •Instalar Java 8 •Instalar Maven • https://maven.apache.org/ •Instalar Node.js • https://nodejs.org/ •Instalar Yarn • https://yarnpkg.com/lang/en/docs/install/ •Instalar Jhipster •yarn global add generator-jhipster
  • 29.
  • 32. Não curte o Shell? Sério ?
  • 33.
  • 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!
  • 35.
  • 39. E as User Stories ? Vou ter que fazer na mão ?
  • 40.
  • 41. CRUDs e a JDL
  • 42. Mãos à Obra. Vamos criar esses Cruds
  • 43. Customizando o Modelo •Vamos ajustar alguns relacionamentos •Remover •Adicionar
  • 45.
  • 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
  • 51. Deploy ServerLess •A aplicação funcionando sem um servidor •Como: •mvn package •./target/java-day-0.0.1-SNAPSHOT.war
  • 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
  • 53.
  • 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; } }
  • 61. Repository - Spring Data •Exemplo: Filtrar pelo usuário logado •Alteração do Modelo
  • 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);
  • 69.
  • 70. O Banco de Dados
  • 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.
  • 72.
  • 73. Thanks! No License Statements @thiagosoaresjr /thiagosoares Thiago.soares.jr@gmail.com
  • 74.
  • 75. Referências •JHipster ( http://www.jhipster.tech ) •Spring ( https://spring.io/ ) •API RESTful avançada com Spring Boot e Java 8 ( https://www.udemy.com/api- restful-avancada-spring-boot-java-8 )