{"id":231,"date":"2016-02-17T12:34:02","date_gmt":"2016-02-17T12:34:02","guid":{"rendered":"https:\/\/sidroniolima.com.br\/blog\/?p=231"},"modified":"2016-02-17T12:36:58","modified_gmt":"2016-02-17T12:36:58","slug":"conteudo-estatico-no-wildfly-em-producao","status":"publish","type":"post","link":"https:\/\/sidroniolima.com.br\/blog\/2016\/02\/17\/conteudo-estatico-no-wildfly-em-producao\/","title":{"rendered":"Conte\u00fado est\u00e1tico no Wildfly em produ\u00e7\u00e3o"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud.png\" rel=\"attachment wp-att-240\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-240\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud.png\" alt=\"upload-cloud\" width=\"1369\" height=\"903\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud.png 1369w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud-300x198.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud-768x507.png 768w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud-1024x675.png 1024w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload-cloud-620x409.png 620w\" sizes=\"auto, (max-width: 1369px) 100vw, 1369px\" \/><\/a><\/p>\n<p>Neste Post demonstrarei como utilizar de forma eficiente\u00a0imagens como conte\u00fado est\u00e1tico em uma aplica\u00e7\u00e3o Java Web com JSF que rode em um ambiente Linux e num servidor WildFly 8.x.<\/p>\n<p>A ideia \u00e9 utilizar imagens no cadastro de produtos, fazendo seu upload e exibindo-as em diversas partes.<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_1.png\" rel=\"attachment wp-att-232\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-232\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_1-300x235.png\" alt=\"upload_1\" width=\"300\" height=\"235\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_1-300x235.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_1-620x487.png 620w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_1.png 669w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>As ferramentas necess\u00e1rias s\u00e3o o PuTTy para cria\u00e7\u00e3o do diret\u00f3rio no servidor e um editor xml para configura\u00e7\u00e3o do Handler no arquivo de configura\u00e7\u00e3o do WildFly. No meu caso utilizei o pr\u00f3prio Eclise IDE. Claro que assumindo que j\u00e1 exista uma aplica\u00e7\u00e3o com as devidas configura\u00e7\u00f5es e rodando. Disponibilizarei a classe que utilizo para tratar o upload da imagem tamb\u00e9m.<\/p>\n<p><strong>Criando a estrutura de diret\u00f3rio:<\/strong> a aplica\u00e7\u00e3o est\u00e1 hospedada num servidor integrator.com.br, portanto definia a seguinte estrutura:<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_2.png\" rel=\"attachment wp-att-233\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-233\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_2.png\" alt=\"upload_2\" width=\"115\" height=\"115\" \/><\/a><\/p>\n<p>Para cria\u00e7\u00e3o dos diret\u00f3rio \u00e9 necess\u00e1rio pelo PuTTy criar os diret\u00f3rios a partir da pasta home, assim: <em>\/home\/&lt;&lt;usu\u00e1rio&gt;&gt;\/var\/static\/images\/pecas<\/em>.<\/p>\n<p><strong>Configurando o handler no WildFly:<\/strong> agora que as pastas est\u00e3o criadas \u00e9 necess\u00e1rio mapear esta estrutura no servidor de aplica\u00e7\u00e3o para que possamos acess\u00e1-lo. Para isso configuramos o arquivo de configura\u00e7\u00e3o, standalone.xml, da seguinte forma:<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3.png\" rel=\"attachment wp-att-235\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-235\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3.png\" alt=\"upload_3\" width=\"912\" height=\"340\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3.png 912w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3-300x112.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3-768x286.png 768w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_3-620x231.png 620w\" sizes=\"auto, (max-width: 912px) 100vw, 912px\" \/><\/a><\/p>\n<p>O handler mapear\u00e1 o caminho definido em \/imagens\/meu-espaco. Para acessar o conte\u00fado do diret\u00f3rio basta acessar a url <em>http:\/\/&lt;&lt;endere\u00e7o_do_servidor&gt;&gt;\/imagens\/meu-espaco<\/em>. \u00a0A op\u00e7\u00e3o <em>directory-listing\u00a0<\/em>permite que seu conte\u00fado seja listado:<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4.png\" rel=\"attachment wp-att-236\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-236\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4.png\" alt=\"upload_4\" width=\"858\" height=\"382\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4.png 858w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4-300x134.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4-768x342.png 768w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_4-620x276.png 620w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><\/a><\/p>\n<p><strong>A classe para upload da imagem:<\/strong> o mecanismo de upload \u00e9 simples gra\u00e7as ao componente Upload da biblioteca <a href=\"http:\/\/www.primefaces.org\/\" target=\"_blank\">PrimeFaces<\/a>. Sua utiliza\u00e7\u00e3o \u00e9 simples:<br \/>\n<code><\/code><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_5.png\" rel=\"attachment wp-att-237\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-237\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_5.png\" alt=\"upload_5\" width=\"637\" height=\"355\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_5.png 637w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_5-300x167.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_5-620x346.png 620w\" sizes=\"auto, (max-width: 637px) 100vw, 637px\" \/><\/a><\/p>\n<p>A classe FotoProdutoBean encaminhar\u00e1 a a\u00e7\u00e3o \u00e0 Camada de Servi\u00e7o de produto, que utilizar\u00e1 a classe FotoHelper para escrever o conte\u00fado do download para o diret\u00f3rio definido.<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6.png\" rel=\"attachment wp-att-238\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-238\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6.png\" alt=\"upload_6\" width=\"798\" height=\"328\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6.png 798w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6-300x123.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6-768x316.png 768w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_6-620x255.png 620w\" sizes=\"auto, (max-width: 798px) 100vw, 798px\" \/><\/a><\/p>\n<p>A constante CAMINHO_DAS_FOTOS cont\u00e9m o caminho para o nosso diret\u00f3rio de conte\u00fado est\u00e1tico, isto \u00e9, nossas fotos de produtos (pe\u00e7as):\u00a0<em>\/home\/meuvisua\/var\/static\/images\/pecas\/<\/em>.<\/p>\n<p><strong>Exibindo as imagens:<\/strong> Enfim, para exibir a imagem basta uma tab &lt;img&gt; html com o mapeamento. Desta forma:<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_7.png\" rel=\"attachment wp-att-239\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-239\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_7.png\" alt=\"upload_7\" width=\"532\" height=\"51\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_7.png 532w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2016\/02\/upload_7-300x29.png 300w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/a><\/p>\n<p>S\u00f3 isso! Ao utilizarmos o handler para mapear um diret\u00f3rio fora do servidor de aplica\u00e7\u00e3o tornamos nosso conte\u00fado est\u00e1tico independente. Num cen\u00e1rio de atualiza\u00e7\u00e3o ou substitui\u00e7\u00e3o do servidor nada ser\u00e1 afetado. Ainda, assim evitamos tamb\u00e9m salvarmos essas imagens direto no banco, impactando a performance.<\/p>\n<p>Se algu\u00e9m tiver uma solu\u00e7\u00e3o melhor ou alternativa, comentem.<\/p>\n<p>At\u00e9 o pr\u00f3ximo.<\/p>\n<p>&nbsp;<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Neste Post demonstrarei como utilizar de forma eficiente\u00a0imagens como conte\u00fado est\u00e1tico em uma aplica\u00e7\u00e3o Java Web com JSF que rode em um ambiente Linux e num servidor WildFly 8.x. A ideia \u00e9 utilizar imagens no cadastro de produtos, fazendo seu upload e exibindo-as em diversas partes. As ferramentas necess\u00e1rias s\u00e3o o PuTTy para cria\u00e7\u00e3o do [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[27],"tags":[30,29,32,31,28],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-java","tag-imagens","tag-java","tag-jsf","tag-upload","tag-wildfly"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/comments?post=231"}],"version-history":[{"count":3,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":243,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/231\/revisions\/243"}],"wp:attachment":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/media?parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/categories?post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/tags?post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}