SlideShare una empresa de Scribd logo
1 de 75
Descargar para leer sin conexión
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 )

Más contenido relacionado

La actualidad más candente

Branching and merging strategy
Branching and merging strategyBranching and merging strategy
Branching and merging strategyRahul Janghel
 
CNIT 152: 6 Scoping & 7 Live Data Collection
CNIT 152: 6 Scoping & 7 Live Data CollectionCNIT 152: 6 Scoping & 7 Live Data Collection
CNIT 152: 6 Scoping & 7 Live Data CollectionSam Bowne
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうTomomitsuKusaba
 
淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdfBrian Chou 周家禾
 
送信ドメイン認証最新動向と ENMA の導入・活用・展望
送信ドメイン認証最新動向と ENMA の導入・活用・展望送信ドメイン認証最新動向と ENMA の導入・活用・展望
送信ドメイン認証最新動向と ENMA の導入・活用・展望Takahiko Suzuki
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetesJulien Maitrehenry
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기Changyol BAEK
 
節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。Kenji Tanaka
 
「DevOps with GitLab」でDevOps環境をセットアップしてみた!
「DevOps with GitLab」でDevOps環境をセットアップしてみた!「DevOps with GitLab」でDevOps環境をセットアップしてみた!
「DevOps with GitLab」でDevOps環境をセットアップしてみた!VirtualTech Japan Inc./Begi.net Inc.
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
Kubernetes Problem-Solving
Kubernetes Problem-SolvingKubernetes Problem-Solving
Kubernetes Problem-SolvingAll Things Open
 
SRE Demystified - 14 - SRE Practices overview
SRE Demystified - 14 - SRE Practices overviewSRE Demystified - 14 - SRE Practices overview
SRE Demystified - 14 - SRE Practices overviewDr Ganesh Iyer
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Sehan Lee
 

La actualidad más candente (20)

Branching and merging strategy
Branching and merging strategyBranching and merging strategy
Branching and merging strategy
 
CNIT 152: 6 Scoping & 7 Live Data Collection
CNIT 152: 6 Scoping & 7 Live Data CollectionCNIT 152: 6 Scoping & 7 Live Data Collection
CNIT 152: 6 Scoping & 7 Live Data Collection
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf
 
送信ドメイン認証最新動向と ENMA の導入・活用・展望
送信ドメイン認証最新動向と ENMA の導入・活用・展望送信ドメイン認証最新動向と ENMA の導入・活用・展望
送信ドメイン認証最新動向と ENMA の導入・活用・展望
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetes
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
DevOps Culture and Principles
DevOps Culture and PrinciplesDevOps Culture and Principles
DevOps Culture and Principles
 
節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。
 
「DevOps with GitLab」でDevOps環境をセットアップしてみた!
「DevOps with GitLab」でDevOps環境をセットアップしてみた!「DevOps with GitLab」でDevOps環境をセットアップしてみた!
「DevOps with GitLab」でDevOps環境をセットアップしてみた!
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Kubernetes Problem-Solving
Kubernetes Problem-SolvingKubernetes Problem-Solving
Kubernetes Problem-Solving
 
SRE Demystified - 14 - SRE Practices overview
SRE Demystified - 14 - SRE Practices overviewSRE Demystified - 14 - SRE Practices overview
SRE Demystified - 14 - SRE Practices overview
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
CKA_1st.pptx
CKA_1st.pptxCKA_1st.pptx
CKA_1st.pptx
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법
 

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

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 AWSAmazon 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ápidasAmazon Web Services LATAM
 
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émAndre 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 GoAlvaro 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 AWSAmazon 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 DevOpsJosé Alexandre Macedo
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael 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 ZendThiago 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.pdfJ0071
 
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
 
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 CodeIgniterEric Silva
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure FunctionsCDS
 
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 SDKRyan Padilha
 

Similar 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
 

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 )