Diminua o acoplamento da sua aplicação com CDI utilizando Events.

A funcionalidade Events do CDI não é algo novo, entretanto, é notável que ainda é muito subutilizado. Sempre é interessante diminuir o acoplamento ao máximo, e, nada melhor do que não expor nem a interface para quem está chamando a função.

Vamos ver um exemplo?

Digamos que estamos criando um sistema que realiza transações através dos cartões Visa e Mastercard:

class Transaction {
    //lots of nice code here
}

class VisaTransaction extends Transaction {
    //lots of nice code here
}

class MasterCardTransaction extends Transaction {
    //lots of nice code here
}

Continue reading

Advertisements

Criando uma aplicação utilizando o Deltaspike, um framework baseado em extensões do CDI.

O Apache Deltaspike é um framework baseado em extensões do CDI, que funciona muito bem tanto com a implementação referência, que é a Weld, quanto a do próprio Apache, a OpenWebBeans.
O Deltaspike provê certas características, como por exemplo, controle de transações, que, em conjunto com o CDI, faz você não precisar de um container mais robusto, como por exemplo algum JEE ou o Spring.
Para ficar ainda mais simples, vamos utilizar um Jetty Embedded. Exatamente, ao invés de colocarmos nossa aplicação em um servlet container, vamos colocar um servlet container na nossa aplicação e rodar um main dentro de um jar que tudo irá funcionar como deveria. 😉

Github do projeto: https://github.com/gabfssilva/deltaspike-jpa-jsf
Continue reading

Mockando Web Services utilizando WireMock

Muitas vezes precisamos realizar integrações entre dois sistemas diferentes através de Web Services. Criamos classes para fazer a comunicação entre os dois sistemas, essas classes possuem algumas lógicas de conversão de dados entre outras coisas que fazem a diferença para o funcionamento ideal do sistema. Logo, você pensa em criar testes unitários para essa classe, para saber se ela está fazendo aquilo que ela deveria fazer, mas, provavelmente você já se perguntou: “Mas, como criar esses testes?”.
Certamente você não pode fazer a comunicação com o sistema que você está integrando em um teste unitário. E se esse sistema estiver fora? Seu teste quebrará e não há motivo dele quebrar nesse caso, afinal, você está testando a sua classe e não se o serviço que você está integrando está online.
Outra coisa que passa pela cabeça é criar um serviço de mock para retornar qualquer coisa quando você chamá-lo. É uma saída, porém, isso acaba sendo muito custoso. Imagine um dia você realizando o teste unitário do seu sistema e o teste quebra porque o seu serviço mock está fora do ar. Você irá ter o trabalho de subir o seu mock sempre que você for realizar um teste unitário e isso é um tanto chato.
Certo, vamos eliminar a possibilidade de serviços externos. Nada de testes quebrados por motivos aleatórios a não ser porque a sua classe de integração não está de fato fazendo o que deveria fazer.

Continue reading

Construindo aplicações REST utilizando Spark 2.0

Por mais que o Java já possua inúmeros frameworks Web/REST, eu resolvi dar uma olhada no Spark que eu achei um tanto intrigante pelo fato de sua facilidade.
Esse framework está na versão 2.0, na qual foi desenvolvida para ser adaptado à funcionalidade de lambda do Java 8, sendo que as versões 1.x.x desse framework também são uma ótima opção caso o Java 8 não for uma opção para você.

Você pode adicionar ele como uma dependência do maven:

<dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>2.0.0</version>
</dependency>

Ou do Gradle, caso você preferir:

compile 'com.sparkjava:spark-core:2.0.0'

Continue reading

Builder Pattern

Existem várias formas de se criar um builder. Dentre elas, a que eu acho mais elegante, é o builder que utiliza a técnica Fluent API, onde o builder retorna ele mesmo em todos os seus métodos, permitindo assim a criação de um objeto dessa forma:

UserBuilder builder = new UserBuilderImpl();

    builder
        .age(21)
        .email("gabfssilva")
        .fullName("Gabriel Francisco")
        .occupation("Systems Analyst")
        .username("gabfssilva");

User user = builder.build();

Continue reading

Subindo uma aplicação Java no OpenShift

A pedido de algumas pessoas, resolvi criar esse tutorial que demonstra como subir uma aplicação Java no OpenShift.
Para quem não sabe, o OpenShift é a cloud da RedHat. É bem simples upar aplicações lá e você pode subir até três aplicações de graça.

Esse artigo é separado em 7 partes.

1 – Gerando uma SSH KEY

Antes de tudo, caso você tenha uma ssh key, pule até a segunda parte, senão, vamos gerá-la agora:
Continue reading