Category Archives: Java

Event Sourcing

Introdução

A idéia é armazenar os eventos gerados pelo domínio e que, mais tarde, será reconstruído o estado atual do objeto em questão.

Conceito

Salvando objetos

  1. Criar um evento para cada estado do objeto
    1. BankAccountCreated (id: 123 owner: John Doe)
    2. DepositPerformed (accountId: 123 amount: 20USD)
    3. OwnerChanged (accountId: 123 newOwnerId: 234)
    4. WithdrawalPerformed (accountId: 123 amount: 10USD)
  2. Deve-se preservar a ordem dos eventos

 

Framework

  1. Eventuate – Solução que provê um modelo de programação orientada a eventos.
    1. Fonte: http://eventuate.io/

Exemplos

  1. https://github.com/cer/event-sourcing-examples

 

 

Annotations do Spring

@Configuration

É uma annotation que indica que determinada classe possui métodos que expõe beans.

@Controller

Identifica classes que possuem métodos que processam requests numa aplicação web.

@Repository

Identifica classes que isolam o acesso aos dados da sua aplicação. Comumente associada a DAO’s.

@Service

Identifica classes que representam a ideia do Service do Domain Driven Design. Para ficar menos teórico pense em classes que representam algum fluxo de negócio da sua aplicação. Por exemplo, um fluxo de finalização de compra envolve atualizar manipular o carrinho, enviar email, processar pagamento etc. Este é o típico código que temos dificuldade de saber onde vamos colocar, em geral ele pode ficar num Service.

@Component

A annotation básica que indica que uma classe vai ser gerenciada pelo container do Spring. Todas as annotations descritas acima são, na verdade, derivadas de @Component. A ideia é justamente passar mais semântica.

@ComponentScan

Em geral você a usa em classes de configuração(@Configuration) indicando quais pacotes ou classes devem ser scaneadas pelo Spring para que essa configuração funcione.

@Bean

Anotação utilizada em cima dos métodos de uma classe, geralmente marcada com @Configuration, indicando que o Spring deve invocar aquele método e gerenciar o objeto retornado por ele. Quando digo gerenciar é que agora este objeto pode ser injetado em qualquer ponto da sua aplicação.

@Autowired

Anotação utilizada para marcar o ponto de injeção na sua classe. Você pode colocar ela sobre atributos ou sobre o seu construtor com argumentos.

@Scope

Annotation utilizada para marcar o tempo de vida de um objeto gerenciado pelo container. Pode ser utilizada em classes anotadas com @Component, ou alguma de suas derivações. Além disso também pode usada em métodos anotados com @Bean. Quando você não utiliza nenhuma, o escopo default do objeto é o de aplicação, o que significa que vai existir apenas uma instância dele durante a execução do programa. Você alterar isso, anotando o local e usando alguma das constantes que existem na classe ConfigurableBeanFactory ou WebApplicationContext.

@RequestMapping

Geralmente utilizada em cima dos métodos de uma classe anotada com @Controller. Serve para você colocar os endereços da sua aplicação que, quando acessados por algum cliente, deverão ser direcionados para o determinado método.

@ResponseBody

Utilizada em métodos anotados com @RequestMapping para indicar que o retorno do método deve ser automaticamente escrito na resposta para o cliente. Muito comum quando queremos retornar JSON ou XML em função de algum objeto da aplicação.

@Primary

Caso você tenha dois métodos anotados com @Bean e com ambos retornando o mesmo tipo de objeto, como o Spring vai saber qual dos dois injetar por default em algum ponto da sua aplicação? É para isso que serve a annotation @Primary. Indica qual é a opção padrão de injeção. Caso você não queira usar a padrão, pode recorrer a annotation @Qualifier.

@Profile

Indica em qual profile tal bean deve ser carregado. Muito comum quando você tem classes que só devem ser carregadas em ambiente de dev ou de produção. Essa eu utilizo bastante e acho uma ideia simples, mas super relevante dentro do Spring.

@SpringBootApplication

Para quem usa Spring Boot, essa é uma das primeiras que você. Ela engloba a @Component, @ComponentScan e mais uma chamada @EnableAutoConfiguration, que é utilizada pelo Spring Boot para tentar advinhar as configurações necessárias para rodar o seu projeto.

Bom, acho que é isso aí. Adoro escrever posts que foram solicitados diretamente pela galera que acompanha o meu trabalho, é uma motivação bem grande.

@EnableAsync

Essa aqui não é tão comum, mas muitas vezes você precisa ações no sistema em background(outra thread). Essa annotation deve ser colocada em alguma classe marcada com @Configuration, para que o Spring habilite o suporte a execução assíncrona.

@Async

Uma vez que seu projeto habilitou o uso de execução de métodos assíncronos com a @EnableAsync, você pode marcar qualquer método de um bean gerenciado do projeto com essa annotation. Quando tal método for invocado, o Spring vai garantir que a execução dele será em outra thread.

Domain Driven Design

Domain Driven Design, ou seja, Desenvolvimento Orientado a Domínio.

O objetivo é focar no domínio da solução, através de um contexto apresentado, determinar a solução de maneira que atenda:

  1. Alinhar o código com as regras de negócio – para atender, pode-se utilizar XP, aproximando a equipe de negócio a equipe de desenvolvimento
  2. Minimizar acoplamento – fazer com que as partes do sistema interaja entre si, evitando dependência entre os módulos
  3. Favorecer o reuso – módulos do sistema, podem ser reutilizados em outras funções
  4. Independência de tecnologia – focar na regra de negócio e código

O modelo de software típico de DDD consiste:

  1. Interface com Usuário – responsável por interagir com o usuário, capturando intenções e informações
  2. Aplicação – camada intermediária entre a camada 1 e 3, atuando como comunicação de dados
  3. Domínio – camada com as regras de negócio. Toda a inteligência do sistema está aqui.
  4. Infra-estrutura – camada responsável pelos recursos técnicos, geralmente são classes que se comunicam com Banco de Dados e mensagens

mapping-ddd-to-java-ee

Exemplos:

https://github.com/paoesco/cargotracker-ddd

https://github.com/citerus/dddsample-core

https://github.com/olivergierke/spring-restbucks

http://www.the-coder-life.com/2016/02/domain-driven-design-hands-on-example.html

https://github.com/simbo1905/root-objects

Links:

http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/

 

KumuluzEE – Framework para microserviços

A utilização da arquitetura de microserviços vem se tornando padrão entre as empresas.

Com a busca de informações dessa nova forma de desenvolver os aplicativos, encontrei uma solução de framework para utilização de microserviços, o KumuluzEE.

Por ser uma solução compatível com JEE, torna-se uma grande opção, tanto para novos projetos quanto para aplicações existentes e que deseja-se transformá-las em microserviços.

Fonte:

https://ee.kumuluz.com/

Conheça o KumuluzEE – seu novo framework para Microservices

 

Maven – Tutorial

Introdução

O Maven é uma excelente ferramenta para gerenciar e implantar projetos Java. O objetivo desse post é apresentar de forma clara e fácil como utilizar o Maven.

Instalação

  1. Baixe o Maven de https://www.apache.org/.
  2. Descompacte onde deseja que fique a instalação.
  3. Em Variáveis de Ambiente, crie a variável MAVEN_HOME ou MVN_HOME
  4. Na variável Path, inclua no início do trecho %MAVEN_HOME%\bin;
  5. Abra um Prompt de Comando e digite mvn -version (deverá aparecer a versão instalada)
  6. Pronto! É só utilizar

Criação de um projeto Web

Através do Prompt de Comando, vá no diretório onde deseja criar o projeto e digite

mvn archetype:generate -DgroupId=br.com.emp -DartifactId=WebAppDemo -DarchetypeArtifactId=maven-archetype-webapp

 

Microservices

Introdução

Arquitetura de microservices consiste em dividir a aplicação em conjunto de serviços. É recomendável utilizar em aplicações robustas e/ou que necessitam evoluir rapidamente.

 

Links:

https://www.infoq.com/br/articles/microservices-intro

https://dzone.com/articles/building-microservices-with-java

How to Configure BitBucket Git Repository with eGit

bitbucket_logo - Crunchify Tips

Bitbucket is a distributed version control system (DVCS) code hosting site that supports Mercurial and Git. With Mercurial and Git, your data is distributed by definition but you still need a place to share it and keep track of your development. That is where Bitbucket comes in.

You may need to check why I choose bitbucket over github.

Bitbucket provides a fully-featured environment for managing your development project, including a code repository, a wiki (naturally backed by Mercurial and Git – you can clone it), a powerful issue tracker and easy collaboration with others.

Simply put, Bitbucket takes the pain out of sharing code and lets you focus on what you do best: Code. Bitbucket offers both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts).

Here are quick steps to setup BitBucket Repository to you Eclipse Environment.

Step-1

Register for Bitbucket.

Step-2

Create Private/Public repository

Step-3

On Overview page https://bitbucket.org/dashboard/overview, look for your repository information.

Bitbucket Dashboard Overview page

Mouse hover will give you Repository URL which we will use later to import project into Eclipse.

Step-4

Now let’s make Eclipse ready for Git.

  • Open Eclipse
  • Click on Help menu
  • Click Install New Software

Eclipse Install New Software

Step-5

Install eGit into Eclipse. Git version control with Eclipse (EGit) – Tutorial.  How to use bitBucket with EGit in Eclipse.

URL: http://download.eclipse.org/egit/updates

Eclipse - Add Repository

Step-6

Select Eclipse Git Team Provider and JGit form option and click next and finish install.

Eclipse Install Git

Step-7

Now Open Perspective and choose Git from list.

Eclipse Git Prospective

Step-8

Click Clone Repository Button

Clone Git Repository to Eclipse and Add to View

Step-9

Enter your Bitbucket URL and User Information as mentioned in below diagram. Click Next andFinish. No need to change other configuration in next window.

Clone Repository Options Page in Eclipse

Step-10

You should see your Bitbucket repository now in eclipse.

Checked Out Bitbucket repository in Eclipse

Step-11

Now you may want to import the project so you can work on the source code.

  1. Click
    1. ‘Windows’ >
    2. ‘Open Perspective’ >
    3. ‘Resource’
  2. Click
    1. ‘File’ >
    2. ‘Import’ >
    3. ‘Git’ >
    4. ‘Projects from Git’ >
    5. ‘Existing local repository’ >
    6. ‘Select a Git Repository’ >
    7. ‘Import as General Project’ >
    8. ‘Next’ >
    9. ‘Finish’
  3. The code should then appear in your ‘Project Explorer’ window as a normal project
  4. Now make changes to your file as you want
  5. Look at ‘Git Staging’ view to see your changed files and Click ‘Commit and Push

Git Staging View in Eclipse

Configurando Datasource Module no JBoss 7

April 12, 2012, Posted in J2EE Comments: 0 Comments and 0 Reactions

Today I spent almost 4-5 hours figuring how to configure MySQL for JBoss. Since I am new to JEE world it was a real struggle for me. So hopefully this post will help newbies like me…

  1. Download and extract JBoss v7.1.1 (Download URL : http://www.jboss.org/jbossas/downloads/)
  2. Download and install MySQL (Download URL : http://dev.mysql.com/downloads/)
  3. Download MySQL JDBC driver (Download URL: http://dev.mysql.com/downloads/connector/j/)

Continue reading Configurando Datasource Module no JBoss 7