Artigo do tipo Tutorial
Recursos especiais neste artigo:
Conteúdo sobre solução completa.
Cenário
Este artigo visa apresentar os passos para a construção de um carrinho de compras simplificado, passando pela exibição dos produtos existentes até o fechamento de um pedido. Para isso, serão utilizadas tecnologias como Java EE 6, PrimeFaces, Maven e JBoss AS 7.

Em que situação o tema é útil
Este artigo ajudará o leitor que deseja conhecer um pouco mais a respeito do Java EE 6 (CDI, JPA, JSF 2 e EJB 3), sobre como integrar todas essas tecnologias, sobre o servidor de aplicações JBoss AS 7 e sobre o processo de desenvolvimento de um carrinho de compras propriamente dito.

Apesar da grande e rápida expansão do desenvolvimento de aplicativos nativos para dispositivos móveis, aplicações web devem continuar sendo o principal tipo de aplicação a ser desenvolvida por um bom tempo. Isso porque muitos websites preferem criar uma versão web mais “compacta” que possa ser acessada pelos dispositivos móveis do que de criar uma aplicação nativa para cada plataforma (iOS, Android, Windows Phone, entre outras). Além disso, mesmo as aplicações nativas precisam em sua maior parte de uma aplicação web por trás para fazer o processamento pesado dos dados obtidos ou solicitados pelos usuários.

Dentro desse mundo de aplicações web, uma categoria que sempre teve destaque e mereceu investimentos pesados dos grandes players do mercado é a de aplicações de e-commerce. Atualmente, lojas que não oferecem a possibilidade de venda de seus produtos pela internet deixam de ganhar vários clientes, pois muitos consumidores preferem a comodidade e facilidade de uma compra on-line. Aplicações de e-commerce podem variar bastante de tamanho/complexidade, podendo ser desde uma simples aplicação com alguns produtos e um botão de comprar, até uma aplicação mais robusta, com sistema de recomendações, carrinho de compras, análise de histórico de cada consumidor, venda cruzada, vouchers, promoções, entre outras funcionalidades. Além das funcionalidades, outro ponto importante a ser considerado são os requisitos não funcionais, principalmente os relacionados à confiabilidade e segurança dos dados e escalabilidade.

Sabendo da importância desse tipo de aplicação e da relevância que o Java tem no desenvolvimento de aplicações, nesse artigo será apresentada a construção de uma aplicação simples de e-commerce, utilizando Java EE 6 (CDI, JPA, JSF 2 e EJB 3), PrimeFaces, JBoss AS 7 e Maven. Apesar de simples, a aplicação dará uma ideia ao leitor de como integrar todas essas tecnologias para que ele possa ter a base para criar aplicações mais complexas.

Aplicação de carrinho de compras

A aplicação a ser desenvolvida será composta basicamente por três telas. A primeira delas será a de listagem dos produtos cadastrados na base de dados. Nessa tela será exibida a imagem, título, descrição e preço de cada produto, além de um botão que permite ao usuário adicionar o produto ao carrinho. A segunda tela será a do próprio carrinho de compras, sendo formada por duas partes. A primeira apresenta os itens inseridos no carrinho, na qual o usuário pode alterar a quantidade ou remover itens, e a segunda parte possibilita ao usuário escolher a forma de fechar o pedido, se através de um usuário já existente ou através de um novo. Por fim, a terceira tela exibirá uma mensagem de confirmação da geração do pedido, exibindo seu código.

A Figura 1 apresenta o diagrama de classes do modelo da aplicação e a Figura 2 apresenta o diagrama entidade-relacionamento (MER). Como pode ser observado, o modelo é bastante simples, sendo formado pelas entidades Cliente, Produto, Pedido e ItemPedido.

Figura 1. Diagrama de classes do modelo da aplicação.

Figura 2. Modelo entidade-relacionamento (MER) do modelo da aplicação.

Criando as bases de dados

Considerando que nossa aplicação precisará armazenar os dados pertinentes a ela, como clientes, produtos e pedidos, iremos utilizar um banco de dados relacional para tal propósito. No nosso caso, foi optado pelo banco de dados MySQL, por ser leve, free na versão community e de uso simples, mas nada impede que o leitor escolha o banco de dados que desejar.

Deste modo, usando a ferramenta de sua preferência, crie uma base com o nome “lojajm” e execute o script db.sql presente junto com o código fonte da aplicação. Esse script, além de criar as tabelas, também faz a inserção de alguns produtos para que possam ser utilizados pela aplicação, já que no artigo não será desenvolvida uma tela para gerenciamento dos mesmos. As tabelas criadas por ele são as descritas no MER apresentado na Figura 2.

Configuração do data source no JBoss AS

O JBoss AS sempre foi um dos servidores de aplicação mais conhecidos e utilizados no mercado e esse reconhecimento se deu pelo fato dele ser open-source, robusto, confiável e ter uma comunidade bastante ativa. Atualmente encontra-se na versão 7.1.1.Final, versão esta que é certificada Java EE 6 Full Profile, o que significa que ele adere a 100% da especificação do Java EE 6.

Além disso, na versão 7 o JBoss AS foi totalmente reescrito, buscando ser um servidor muito mais leve, modular e administrável. Com essa versão é possível fazer o start de uma instância em poucos segundos, o que é um grande salto comparado às versões anteriores. Isso deve muito à sua arquitetura modular baseada em OSGI, que permite que serviços sejam inicializados sob demanda, evitando a inicialização de serviços que não são utilizados pelas suas aplicações. Outro ponto que evoluiu muito nessa versão são as interfaces de administração do servidor. Além de permitir a configuração através da edição manual dos arquivos de configuração, o JBoss AS oferece uma interface de administração web bem mais completa e também uma interface via linha de comando, conhecida como CLI (Command Line Interface).

No artigo “Java EE 6: Da configuração aos testes” publicado nas edições 106, 107 e 109 foi apresentado como configurar um driver JDBC e um data source associado a ele editando manualmente os arquivos de configuração do JBoss AS. Nesse artigo, como também precisamos configurar um driver JDBC e um data source, essa configuração será feita de uma forma diferente, através da interface CLI. Essa interface apresenta algumas vantagens interessantes, como:

· Ela é bastante completa, permitindo que praticamente tudo seja feito através de dela, passando pelo deploy de aplicações, alteração de nível de log, configuração de data sources, entre outros;

· Como essa interface aceita arquivos de lote com comandos a serem executados, é possível criar arquivos que automatizem tarefas específicas e depois apenas executá-los em uma ou mais instâncias, facilitando a automação de atividades operacionais;

· Outro recurso interessante dessa interface é o auto-complete. A partir da tecla tab é possível navegar entre os módulos (ou subsistemas) do servidor e entre os comandos e seus parâmetros.

Antes de continuarmos, vale ressaltar a importância de definir corretamente a variável de ambiente JBOSS_HOME, apontando para o diretório onde o servidor foi descompactado. Ela é de extrema importância para que não se tenha surpresas desagradáveis tanto para executar a CLI quanto para fazer o deploy de aplicações.

Copiando o driver JDBC

A primeira etapa no processo de configuração do data source é obter o jar do driver JDBC do MySQL (veja a seção Links) e copiá-lo para o JBoss AS, realizando os seguintes passos:

1. Criar a pasta com/mysql/main dentro de JBOSS_HOME/modules;

2. Copiar o driver JDBC para a pasta recém-criada;

3. Ainda dentro dessa pasta (JBOSS_HOME/modules/com/mysql/main/), criar um arquivo chamado module.xml com o conteúdo da Listagem 1, considerando que mysql-connector-java-5.1.17-bin.jar é o nome do driver utilizado. O conteúdo desta listagem faz o registro do módulo informando o seu caminho (com.mysql, no caso), o nome do arquivo e suas dependências.

Listagem 1. Registro do driver JDBC do MySQL.


    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="com.mysql">
    <resources>
      <resource-root path="mysql-connector-java-5.1.17-bin.jar"/>
    </resources>
    <dependencies>
      <module name="javax.api"/>
    </dependencies>
  </module>

Configuração do driver JDBC e do data source

Para efetuarmos a configuração tanto do driver JDBC quanto do data source no JBoss AS, os seguintes passos devem ser realizados:

1. Acessar a pasta JBOSS_HOME/bin pelo terminal de linha de comandos do SO e iniciar o servidor a partir do comando:

./standalone.sh (ou .bat dependendo do SO)

2. Por meio de outra janela do terminal, mas ainda na mesma pasta, executar:

./jboss-cli.sh –connect

Se estiver usando o Windows, troque o script jboss-cli.sh por jboss-cli.bat. A partir desse momento os comandos serão os mesmos independentemente do Sistema Operacional, uma vez que eles são específicos do JBoss AS. Vamos então aos passos para a configuração do driver JDBC e do data source;

3. A configuração do driver é feita por meio do comando:

/subsystem=datasources/jdbc-driver=mysql:add(driver-name="mysql",driver-module-name="com.mysql")

Esse comando simplesmente diz que queremos criar um driver jdbc com o nome “mysql” e que o módulo a ser utilizado (arquivo físico que copiamos no passo anterior) é o “com.mysql” (repare que o nome reflete a estrutura de pastas para onde o jar foi copiado, desconsiderando a pasta main);

4. A configuração do data source é feita por meio do comando:

/subsystem=datasources/data-source="java:/lojajm-ds":add(jndi-name="java:/lojajm-ds",driver-name="mysql",connection-url="jdbc:mysql://localhost:3306/lojajm",user-name="[username]",password="[password]",min-pool-size=5,max-pool-size=20,pool-prefill=true,prepared-statements-cache-size=32,idle-timeout-minutes=5,transaction-isolation="TRANSACTION_READ_COMMITTED",share-prepared-statements=true)

...

Quer ler esse conteúdo completo? Tenha acesso completo