Últimas Novidades

Etiquetas

E aí galera, como vocês estão?

Sei que estou ausente nesses últimos dias, mas quero mostrar para vocês algumas das coisas que eu venho fazendo:

Projeto Dashboard

  • Juntei a galera do grupo Spring Brasil (Telegram) para que a gente possa fazer um projeto em conjunto. O projeto definido foi um Dashboard de issues, que possa integrar com Bitbucket, Github e etc.
  • O projeto ainda está no começo e é Open Source. A URL é: https://github.com/SpringBrasil/spring-dashboard-bitbucket

Medium da OLX

Palestras

  • Estou preparando algumas palestras para poder apresentar, dos mais variados temas: BDD (Behavior Driven Development), Spring, SOLID e etc.
Anúncios

Curiosidades: Portas default

Etiquetas

, ,

Recentemente vi um problema de um serviço que rodava em uma porta específica. Por questões de limitação ao código-fonte e acesso, ficou difícil de descobrir o que poderia estar rodando naquela porta. Então, isso me motivou a fazer esse post, para saber quais são as portas default de alguns dos serviços, apenas por curiosidade:

Portas default

Serviço Porta Informação Adicional
SQL Server 1433
OracleDB 1521
Express 3000 NodeJS Framework
Rails 3000 Ruby Framework (Ruby On Rails)
MySQL 3306
PostgreSQL 5432
Kibana 5601
RabbitMQ 5672
Redis 6379
Weblogic 7001 Administration Server
Weblogic 7002 SSL Administration Server
Django 8000 Python Framework
Jenkins 8080
Tomcat 8080
Spring Boot 8080 Java Framework (it uses Tomcat)
ElasticSearch 9200 For REST
ElasticSearch 9300 For nodes communication
MongoDB 27017
MongoDB 27018 When running with –shardsvr
MongoDB 27019 When running with –configsvr
MongoDB 28017 Web status page

Esse post pode ser atualizado. Se tem alguma sugestão de serviço, basta dizer que eu acrescento. No próximo post vou tentar falar sobre Java 9 e suas novidades.

Guia – Spring MVC

Etiquetas

, ,

Nos posts passados sobre Spring Boot (Parte 1 e Parte 2), algumas pessoas me perguntaram sobre Spring MVC pois não conheciam como ele funcionava. Nesse post, não vou ensinar como configura o Spring MVC, mas sim dar uma visão geral das principais funcionalidades.

O que é?

Spring MVC é um framework web e action-based do Spring que trabalha com a arquitetura MVC (Model-View-Controller) e ajuda a construir aplicações web flexíveis e desacopladas, além de ser fácil de usar.

Exemplo de utilização (chamando uma página)

@Controller
public class UserController {

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String index() {
        return "home";
    }
}

Exemplo de utilização (REST)

@RestController
public class UserRestController {

    @RequestMapping(value="/users", method=RequestMethod.GET)
    public List<User> listUsers() {
        //... get users 
        return users;
    }
}

Principais coisas a saber

@Controller

  • É a principal anotação para definir uma classe como um Controller do Spring MVC. O Controller é responsável por mapear e receber as requisições enviadas pelo cliente.

@RestController

  • Define uma classe como um Controller REST do Spring MVC. A principal diferença para o @Controller é que o RestController não procura uma página ao retornar um valor, e sim retorna exatamente aquele valor.
  • Exemplo: Ao retornar uma String “ralph”, o @Controller procuraria por um arquivo (HTML, JSP ou qualquer formato configurado) com esse nome. O @RestController retornaria exatamente “ralph”.

@RequestMapping

  • Principal anotação para definir mapeamentos. Nele é definido o método HTTP a ser utilizado, qual Path a ser chamado, qual vai ser o tipo de dados aceitos e o tipo de retorno do conteúdo.
  • Exemplos:
@RequestMapping(value="/users", method=RequestMethod.GET)
public String somePath() { /*code*/ }

@RequestMapping(value="/users", method=RequestMethod.POST,
 consumes=MediaType.APPLICATION_JSON_VALUE,
 produces=MediaType.APPLICATION_JSON_VALUE )
public String someOtherPath(User user) { /*code*/ }

Continuar a ler

Guia – Spring Boot (Parte 02)

Etiquetas

, ,

YAML

No post passado utilizamos o arquivo de configuração application.properties, mas o Spring suporta também YAML para configuração. Então, o mesmo arquivo de configuração visto no post passado (link no final do post) ficaria assim em um application.yml:

server:
    context-path: /
    port: 8081
spring:
    datasource:
        url: jdbc:h2:file:~/conscious_it
        username: sa
        password:
  • IMPORTANTE: caso existam os dois arquivos, a prioridade é do .properties

Configurações Por Ambiente

  • O Spring tem a habilidade de poder ser separado por ambientes, ou seja, eu posso ter as configurações de desenvolvimento e de produção separadamente e escolher qual executar de maneira dinâmica. Essa característica é chamada de Profile.
  • Para escolher qual ambiente executar, basta que eu passe o parâmetro -Dspring.profiles.active para a JVM:
java -Dspring.profiles.active=dev -jar my_spring_boot_project.jar
  • Essa configuração iria procurar os arquivos:
application-dev.properties
application-dev.yml
  • Ou seja, o padrão de arquivo de profile é:
application-{profile}.properties (ou yml)
  • No caso de executar na IDE, basta passar o parâmetro para a classe que executa o SpringApplication.run
  • Com o Spring ainda, é possível setar diferentes implementações utilizando o mesmo parâmetro (spring.profiles.active) na JVM. Para isso é necessário utilizar a anotação @Profile do Spring.
    • Vamos supor que eu tenha uma interface UploadService e que eu quero que em produção seja AWS mas para desenvolvimento eu quero que seja via File. Utilizando a anotação, ficaria assim:

Continuar a ler

Guia – Spring Boot (Parte 01)

Etiquetas

, ,

  • Necessário conhecimentos de injeção de dependência. Preferencialmente Spring, mas pode ser CDI também.
  • “Qualquer tempo gasto escrevendo configuração é tempo gasto não escrevendo a lógica da aplicação” – (WALLS, Craig – Spring Boot In Action)

O que é?

É um framework que facilita a configuração de uma aplicação Spring-based. É possível baixar a dependência do Spring Boot e seus projetos relacionados como qualquer outra dependência do Maven/Gradle, mas é possível criar um projeto configurado utilizando o site: start.spring.io/ (Obs: Para melhor visualização, clicar em Switch to the full version.)

Conceitos Básicos

  • O projeto criado com Spring Boot pode ser em formato JAR ou WAR. Caso seja JAR e Web, o Spring Boot inicia um Tomcat embedded toda vez que for startado.
  • O Spring Boot necessita de uma classe com um método main que executa o método SpringApplication.run
  • Por padrão, a anotação @SpringBootApplication é utilizada nessa classe. Basicamente é uma anotação que adiciona outras anotações:
    • @Configuration – Marca a classe como uma fonte de definição de beans.
    • @EnableAutoConfiguration – Adiciona alguns beans baseados no Classpath e outras configurações.
    • @ComponentScan – Diz ao Spring para onde olhar por outros componentes, configurações e serviços.
    • @EnableWebMvc – Se spring-webmvc estiver no classpath, essa anotação é adicionada também, com toda a configuração do Spring MVC.
  • Se a classe que roda SpringApplication.run (vamos chamar de MainApplication) estiver no pacote com.conscious.it, não é necessário criar os Beans de construtor padrão. O Spring mapeia todos os pacotes e subpacotes a partir do pacote da MainApplication.

Continuar a ler

Trilhas – Você pode ter perdido 01

Etiquetas

,

Carreira Profissional

Boas práticas

Relacionados a DevOps

Testes

Web

Aumentando o conhecimento

Dicas

Como medir a performance – Java

Etiquetas

, ,

Como saber o quanto a aplicação está consumindo de memória? Onde será que está o gargalo da aplicação? Como estão as Threads da aplicação? Quantas classes estão sendo carregadas? Quantas instâncias estão sendo criadas?

É possível responder essas perguntas monitorando a JVM e utilizando Profiling (é o processo de monitorar parâmetros a nível da JVM, como Execução de Método, Execução de Thread, Criação de Objeto e Garbage Collection).

No post sobre ferramentas de teste (Vamos tentar algo diferente: Ferramentas de Teste 01) foi possível medir se a aplicação aguenta X acessos, o tempo de resposta da aplicação e etc. Agora, vamos medir COMO a JVM está reagindo a isso.

Para esse exemplo, vamos utilizar o VisualVM, porque é grátis, fácil de usar e tem boa quantidade de informações, e também vamos utilizar o projeto java-sample-project. A utilização do VisualVM é bem simples: ao baixar, você descompacta e executa o arquivo visualvm dentro da pasta bin. Siga as orientações no Java Sample Project para executar o projeto. Quando o VisualVM e o projeto estiverem iniciados, dentro do VisualVM deve estar assim:

Continuar a ler

Acesso Antecipado: JUnit 5

Etiquetas

, , , , ,

Fui testar uma das novidades que estão para serem lançadas: JUnit 5. A primeira aparência é que tem várias funcionalidades legais, como testes parametrizados (posso passar vários parâmetros para um mesmo teste rodar várias vezes), assert de Exception melhorado, agrupar testes por Tags e etc.

Criei uma branch do meu projeto java-sample-project utilizando algumas funcionalidades do JUnit 5 com o Spring Boot e vou resumir apenas algumas das funcionalidades:

Testes Parametrizados

  • Te dá a habilidade de rodar o mesmo teste com parâmetros diferentes, vindo de diferentes fontes: Valores puros (String, Integer, etc.), Enum, CSV, Métodos…
  • No meu projeto, utilizei o @MethodSource para exemplo:

  • Com isso, o teste irá procurar um método chamado createUsers que retorna um Stream<Arguments>:

  • Os parâmetros esperados no meu método do teste são: um User e um Integer, e nesse Stream eu estou passando os dois. O teste irá executar primeiro com o userOne() e 1, e depois com userTwo() e 2.

Assert Exceptions

  • Com o JUnit 4 era possível testar exceções, tanto com o @Test(expected=…) quanto com o Exception Rule (ExpectedException). Esse último ainda era possível validar a mensagem da exceção. Mas acredito que nada se compara com esse assertThrows:

Continuar a ler

Vamos tentar algo diferente: Ferramentas de Teste 01

Etiquetas

, , , , , ,

Para as ferramentas de testes e alguns outros exemplos, recomendo um desses projetos: python-sample-project ou java-sample-project, projetos bem simples que dá pra fazer testes tranquilamente e de maneira rápida.

Locust

  • Uma ferramenta simples de teste de carga, porém muito poderosa. Como você escreve códigos Python nos testes, a flexibilidade dos testes é um pouco maior.
  • Pré-Requisitos:
    • Python 2.7.4+ ou 3.3+

Prós:

  • Alguma flexibilidade nos testes
  • Fácil de Instalar
  • Fácil de Configurar
  • Fácil de Utilizar
  • Multiplataforma

Contras:

  • Apesar de apresentar as principais informações, poderia apresentar mais informações úteis e/ou gráficos
  • O teste nunca para a menos que você clique para parar
  • Testa chamadas HTTP mas não testa fluxos como um usuário real faria em um browser

Exemplo de Resultado:

locustio

SOURCE: http://locust.io/

Link: http://locust.io/

Httperf

  • É uma ferramenta simples mas poderosa de teste de performance.

Prós:

  • Fácil de Instalar
  • Fácil de Utilizar
  • Ótima quantidade de informações
  • Ótima quantidade de personalizações de chamadas
  • Pode limitar o total de requests feitas

Contras:

  • Linux Only
  • Testa chamadas HTTP mas não testa fluxos como um usuário real faria em um browser (mas não é o que se propõe a fazer)

Exemplo de Resultado:

httperf

Source: http://www.labs.hpe.com/research/linux/httperf/httperf-man-0.9.pdf

Links: https://github.com/httperf/httperf e https://linux.die.net/man/1/httperf

Na minha lista de ferramentas, um dos próximos a serem testados é o Multi-Mechanize. Se vocês tem alguma sugestão, podem mandar.

Por que você faz o que faz?

Etiquetas

, ,

Parece uma pergunta simples, mas você precisa pensar bem no porquê trabalhar com o que trabalhamos. Como desenvolvedor, vejo muita gente dizendo que programa por causa do dinheiro. Outros dizem que programam pela quantidade de empregos que tem e etc.

Por que eu estou te perguntando isso? Afinal, eu mesmo entrei na área da programação porque não passei em engenharia elétrica e Ciência da Computação era um dos poucos cursos em que não tinha muito risco de vida (ironicamente é um dos que mais me estressa, o que aparentemente não é muito bom pra saúde).

A primeira coisa de ser um bom profissional, independente da área, é amar o que faz. Quando você ama o que faz, você se dedica, você estuda, você quer melhorar, porque você ama o que faz.

Escolha o trabalho de que gostas e não terás de trabalhar um único dia em tua vida.” (Confúcio)

Outro ponto que eu gostaria de destacar é: busque a felicidade profissional. Você pode amar a sua profissão, mas trabalhar em um lugar que não te dá a satisfação necessária para exercer um bom desempenho. De repente, problemas com o chefe, problemas com a cultura da empresa, talvez até salário. Sabemos que não existe empresa perfeita, mas se você não está feliz, já conversou e não resolveu, não tenha medo de buscar a sua felicidade.

O penúltimo ponto é: não tenha medo de mudar, tenha medo de ficar parado. Já aconteceu de eu estar fazendo o que eu gosto, em um lugar que eu gosto e não estar evoluindo, e não me refiro a cargos ou posições na empresa, me refiro a conhecimentos, crescimento profissional, saber cada vez mais e mais. Algumas pessoas gostam de rotina e de estarem fazendo sempre a mesma coisa, mas o fato de não estar evoluindo tem que te incomodar. Você ama o que faz, tem que ter vontade de aprender mais e mais.

O último ponto e não menos importante é: sempre dê o seu melhor. Dependendo da área de trabalho, a chance de você trabalhar com alguém que já trabalhou contigo é muito grande. Sua imagem profissional fala muito sobre você. Não seja conhecido como a pessoa que “até trabalhava, mas…”. Tenha a certeza de que em todos os seus trabalhos você deu o seu melhor e não tenha medo de ser feliz.