Processamento assíncrono com ExecutorServices

Introdução

Com máquinas cada vez mais potentes e com mais núcleos de processadores, é fundamental que seus programas consigam tirar proveito desses recursos. Do que adianta ter uma máquina com 16 processadores, se seu programa executa toda sua lógica de forma sequencial em uma única thread?Sistemas de mensageria, como JMS e AMQP, ajudam bastante no processamento assíncrono, desacoplado e distribuído. Porém, em alguns casos, eles podem ser uma “bala para matar um mosquito”, pois além de trazerem o overhead de um message broker na arquitetura, podemos estar apenas querendo usar os processadores da máquina, quebrando uma única tarefa que teria que ser executada de forma sequencial e em uma única thread em um conjunto de tarefas a serem executadas de forma assíncrona e em várias threads.
Antes do Java 5, para realizar esse tipo de tarefa, era necessário criar e gerenciar as threads manualmente, o que não era uma tarefa muito agradável. O Java 5 trouxe um framework para processamento concorrente que ajuda bastante: Executor Services.
Continuar a ler

Anúncios
Publicado em Parallelism | Etiquetas , , , | 3 Comentários

TDC 2012 – Java e AMQP: Uma alternativa ao JMS

Durante o TDC desse ano, dei uma palestra sobre Java e AMQP, no lado B da trilha de Java EE. Infelizmente, na hora de mostrar uma aplicação integrando Java com o Rabbit MQ, o notebook com Ubuntu travou e não teve jeito, provavelmente por algum problema com o driver da placa de vídeo ou algo do tipo. 😦
Esse post é para apresentar o código que eu fiquei “devendo” durante a palestra. Lembrando que, para poder executá-lo, antes é necessário instalar o Rabbit MQ. Em seu site, existe o procedimento para instalação em diversas plataformas.
Continuar a ler

Publicado em Java EE, Spring | Etiquetas , , , , | 1 Comentário

Entendendo os atributos de transação

Nesse post vamos falar sobre um assunto pouco explorado pela maioria dos desenvolvedores: Atributos de Transação. Quando estamos desenvolvendo um serviço (seja com EJB ou Spring), podemos fazer o controle manual da transação (BTM – Bean Managed Transaction) ou deixar com que o container faça isso para nós de forma automática (CMT – Container Managed Transaction). Na maioria dos casos é usado o gerenciamento CMT e a configuração é feita de forma declarativa. É justamente para essa configuração declarativa que existem os atributos de transação. Eles definem por exemplo se seu método deve obrigatoriamente ou não ser invocado dentro de um escopo transacional.

Apenas para facilitar, sempre que for citado o termo cliente, significa que estamos falando do código “chamador”, que pode ser uma aplicação standalone, um outro EJB/Serviço Spring, etc.
Continuar a ler

Publicado em Java EE | Etiquetas , , , , | 11 Comentários

Testando aplicações JEE6 com Arquillian

Criar testes automatizados para aplicações JEE sempre foi um desafio, pois exige que um container esteja funcionando para prover os serviços necessários que a aplicação precisa para funcionar e consequentemente para que os testes possam ser executados.

O framework Arquillian vem para facilitar -e muito- essa tarefa. Seu objetivo é prover uma plataforma de testes poderosa que cuida de vários aspectos ao testar uma aplicação JEE, como fazer o deploy da aplicação no container, subir o container, executar os testes e derrubar o container. Ele também permite que você enriqueça suas classes de testes usando anotações como @Inject, @EJB e @Resource. Dessa forma você pode criar testes funcionais bem mais reais e eficazes.

Ele também permite que o usuário escolha tanto o JUnit como com o TestNG para criação e execução dos testes, além de permitir a execução em vários containers, como JBoss, Glasshfish e Tomcat.

O objetivo desse post não é mostrar os benefícios de escrever testes automatizados -usando ou não TDD-, e sim focar no uso do Arquillian através de um exemplo prático. Apenas um comentário sobre escrever testes para seu código: Não acho que seja necessário escrever testes para 100% do código que você produz, mas entregar código sem teste pelo menos para as partes mais importantes, é entregar código pela metade.
Continuar a ler

Publicado em Java EE, JBoss | Etiquetas , , , , | 13 Comentários

Filas JMS com JEE 6 e JBoss 7

Nesse post será mostrado como configurar uma fila JMS no JBoss 7.1.0-Final e como utilizá-la através de uma aplicação JEE 6. Além disso, serão apresentados alguns pontos importantes como session transacional e configuração do número de consumidores da fila JMS.

Como exemplo, estará sendo usado o modo standalone do JBoss. Se preferir usar o modo domain, basta alterar os arquivos correspondentes aos apresentados aqui.

JMS

A idéia desse post não é mostrar em detalhes as características do JMS ou da sua especificação, mas vale a pena uma descrição alto nível.
JMS pode ser considerado um MOM (Message Oriented Middleware) que permite o envio e recebimento de mensagens assíncronas entre 1 ou mais clientes e que faz parte da especificação do Java EE. JMS provê dois modelos para troca de mensagens:

  • Queue: É uma fila ponto-a-ponto (point-to-point) na qual uma ponta (produtor) produz uma mensagem e a coloca em uma fila JMS e a outra ponta (consumidor) consome a mensagem da fila. No exemplo desse post, será usado esse modelo.
  • Topic: Segue o modelo publish/subscribe no qual uma ponta (publicador) coloca uma mensagen em um Tópico JMS e, para esse trópico, podem existir 0 ou mais “assinantes” que recebem todas as mensagens publicadas.

Para maiores detalhes, pode-se pesquisar no google ou olhar diretamente o JEE 6 Tutorial
Continuar a ler

Publicado em Java EE, JBoss | Etiquetas , , , , , , | 29 Comentários

Criando um DataSource no JBoss 7

Nesse post serão apresentados quais passos devem ser seguidos para a criação e configuração de um DataSource no JBoss 7. Como exemplo, será utilizado o banco de dados MySQL e o servidor de aplicações JBoss 7.1.0-Final. Também estará sendo usado o modo standalone do JBoss, caso prefira usar o modo domain, basta alterar as pastas citadas no post pelas respectivas do modo domain.

Criação do módulo com o driver JDBC do MySQL

A primeira grande mudança em relação às versões anteriores é que as bibliotecas que o desenvolvedor deseja implantar no JBoss não são mais simplesmente consideradas “libs”, onde bastava copiar o .jar para uma determinada pasta e usar os serviços providos pelo mesmo. Agora qualquer lib é considerada um módulo para o JBoss, assim como os próprios serviços internos do servidor, como por exemplo serviço de mensageria. Para configurar o módulo do driver JDBC do MySQL, deve-se:
Continuar a ler

Publicado em JBoss | Etiquetas , , , , | 23 Comentários