Monthly Archives: February 2016

Conteúdo estático no Wildfly em produção

upload-cloud

Neste Post demonstrarei como utilizar de forma eficiente imagens como conteúdo estático em uma aplicação Java Web com JSF que rode em um ambiente Linux e num servidor WildFly 8.x.

A ideia é utilizar imagens no cadastro de produtos, fazendo seu upload e exibindo-as em diversas partes.

upload_1

As ferramentas necessárias são o PuTTy para criação do diretório no servidor e um editor xml para configuração do Handler no arquivo de configuração do WildFly. No meu caso utilizei o próprio Eclise IDE. Claro que assumindo que já exista uma aplicação com as devidas configurações e rodando. Disponibilizarei a classe que utilizo para tratar o upload da imagem também.

Criando a estrutura de diretório: a aplicação está hospedada num servidor integrator.com.br, portanto definia a seguinte estrutura:

upload_2

Para criação dos diretório é necessário pelo PuTTy criar os diretórios a partir da pasta home, assim: /home/<<usuário>>/var/static/images/pecas.

Configurando o handler no WildFly: agora que as pastas estão criadas é necessário mapear esta estrutura no servidor de aplicação para que possamos acessá-lo. Para isso configuramos o arquivo de configuração, standalone.xml, da seguinte forma:

upload_3

O handler mapeará o caminho definido em /imagens/meu-espaco. Para acessar o conteúdo do diretório basta acessar a url http://<<endereço_do_servidor>>/imagens/meu-espaco.  A opção directory-listing permite que seu conteúdo seja listado:

upload_4

A classe para upload da imagem: o mecanismo de upload é simples graças ao componente Upload da biblioteca PrimeFaces. Sua utilização é simples:
upload_5

A classe FotoProdutoBean encaminhará a ação à Camada de Serviço de produto, que utilizará a classe FotoHelper para escrever o conteúdo do download para o diretório definido.

upload_6

A constante CAMINHO_DAS_FOTOS contém o caminho para o nosso diretório de conteúdo estático, isto é, nossas fotos de produtos (peças): /home/meuvisua/var/static/images/pecas/.

Exibindo as imagens: Enfim, para exibir a imagem basta uma tab <img> html com o mapeamento. Desta forma:

upload_7

Só isso! Ao utilizarmos o handler para mapear um diretório fora do servidor de aplicação tornamos nosso conteúdo estático independente. Num cenário de atualização ou substituição do servidor nada será afetado. Ainda, assim evitamos também salvarmos essas imagens direto no banco, impactando a performance.

Se alguém tiver uma solução melhor ou alternativa, comentem.

Até o próximo.