jul 25

Criando WebServices RESTful com Jersey, Maven e Tomcat no eclipse

Longo título, mas é isso que vou passar aqui nesse post. Se você procurar no google vai achar o passo-a-passo de introdução ao Jersey com maven. Porém em todos os tutoriais falta um detalhe que só consegui resolver depois de algumas muitas consultas ao google e tentativas frustradas.

Antes de tudo você deve instalar no seu eclipse o m2eclipse , é só copiar o update site e no seu eclipse ir em install new software e adicionar o update site.

Primeiramente a documentação do Jersey é muito boa, lá você tem tudo o que precisa para aprender a usá-lo. Portanto não vou falar detalhe a detalhe de como começar. Porém a introdução não mostra como integrar com Tomcat ( se você for na página de dependências ele mostra um link para como integrar com Servlets) .

Mas um tutorial bom e de fácil entendimento você encontra no MKYONG . Mas, porém contudo no entanto pule o passo 2, ao invés disso, crie um Dynamic Web Project no seu eclipse, e escolha como runtime environment o tomcat 6. Em seguida, clique com o botão direito no seu projeto e lá no finalzinho vai ter a opção Configure, escolha Convert to Maven Project . Após feito isso seu build path será todo desconfigurado. Você deverá então acessá-lo e reconfigurar a JRE, e apontar a pasta de códigos fontes na aba Source.

O build path agora está OK, porém ainda falta um passo, apontar para onde será feito o deploy dos fontes e das bibliotecas do maven.

Vá nas Propriedades do seu projeto e escolha Deployment Assembly, selecione add -> folder e escolha a pasta de códigos fonte , depois selecione add -> Java Build Path Entries e escolha Maven Dependencies . A pasta de códigos fontes deve ficar com o deploy path como WEB-INF/classes e a Maven Dependencies com o deploy path WEB-INF/lib como na figura abaixo.

 

Feito isso agora é só adicionar sua aplicação ao Tomcat e dar start.

jul 05

Upload de arquivos com primefaces

Quem usa JSF sabe que ele não tem tag nativa para upload de arquivos, para fazer funcionar , é preciso usar a tag html input e utilizar uma biblioteca da apache a commons-fileupload.

Porém algumas suites de componentes como richfaces , trinidad e tobago , e primefaces possuem essas tags. Nesse post vou focar no primefaces, pois considero a melhor dentre as apresentadas.

Antes é necessário que você baixe as seguintes bibliotecas e as adicione no classpath do seu projeto:

Em seguida você deve configurar seu web.xml caso você esteja usando Servlet 2.5, no caso do Servlet 3 eu não testei, mas acredito que não precise (quem usar, teste e comente por favor), adicionando o seguinte código abaixo:

        
	
        <filter>
                <filter-name>PrimeFaces FileUpload Filter</filter-name>
                <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
        </filter>
        <filter-mapping>
                <filter-name>PrimeFaces FileUpload Filter</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
        </filter-mapping>

No sua página você deve usar a tag  p:fileUpload , ela possui vários atributos que podem ser setados, mas os principais são :

  • mode – que pode ser simple ou advanced, onde o simple ele renderiza um input file html comum; e o advanced (que é o default) ele renderiza apenas o botão de pesquisar e ao selecionar o arquivo ele já o valida, além de oferecer as opções de upload ou descartar.
  • allowTypes – lista-se as extensões que deverão ser aceitas
  • sizeLimit – tamanho máximo do arquivo
  • fileUploadListener – método do managed bean que quando for escolhido o mode advanced , trata o evento de upload( explicarei em seguida )
  • value – propriedade do tipo UploadedFile do managed bean que será feito o upload do arquivo, utiliza-se no caso do mode = simple

Exemplo:

    
<p:fileUpload fileUploadListener="#{mb.upload}"
     allowTypes="png,gif,jpg,jpeg" sizeLimit="10000"
     value="#{mb.arquivo}" mode="advanced"  />

Por fim deve-se no managed bean criar o método para o fileUploadListener :

     
private UploadedFile arquivo;
public void upload(FileUploadEvent event) {
    arquivo = event.getFile();
   /* implementação*//
}

E pronto. No labs do primefaces tem alguns exemplos de utilização, e usando você também descobre outras funcionalidades.