Marcio Garcia

Software Empowerment²

Archive for the ‘Shell’ Category

Jersey com Maven e Spring

with one comment






Recentemente eu precisei de trabalhar em um projeto onde toda a comunicação entre o frontend e o backend era feita através de requisições HTTP. A princípio consideramos utilizar um Servlet com alguns helpers que mapeava os parâmetros de URL para um Map e internamente esse Map era “injetado” em todas as classes de recurso.


Era uma solucão a ser considerada, mas como essa era a primeira idéia que o time teve, resolvemos descartá-la.


Por uma requisição do cliente, tinhamos que utilizar Maven e Spring e isto era ponto fechado. As demais bibliotecas eram por nossa conta (e risco).
Surgiu então a segunda idéia de utilizar RESTful simplesmente para facilitar o trabalho entre o mapeamento dos parâmetros vindos da URL com o código.


Pesquisamos a primeira Lib, Jersey já quer esta é a implementação padrão do JSR-311 e também pesquisamos a API do Restlet.
Resolvemos nos contrapor a ideologia de rejeitar a primeira opção a fim de conseguir novos recursos.
Ambos frameworks possuem aspectos únicos e muito bem documentados. Cada uma com suas particularidades, por exemplo no Restlet é necessário criar uma classe com as rotas (uma classe que extende a classe Application).

Mas os principais motivos que nos levou a decidir a utilizar o Jersey foram:
  1. Ser a implementação modelo da especificação
  2. Menos burocracia na implementação dos resources
  3. Integração quase que natural com o Spring para a injeção de classes nos resources.


Este “walk through” tem o objetivo de exemplificar como criar uma aplicação simples utilizando as ferramentas: Spring, Maven e Jersey de forma prática.

Setup


  1. Incluir o repositório do jersey-spring no pom.xml


  2. Incluir as dependencias das libs: jersey spring

  3. Configurar web.xml

It’s time do code!


  1. Configuração do Spring (applicationContext.xml)
  2. Crie o arquivo applicationContext.xml no diretório META-INF de sua aplicação. Este código informa ao engine do Spring para que o pacote com.mng.jerseydemo esteja disponível para a injeção de dependencias. Segue o modelo do arquivo:
  3. Criação do primeiro resource.

  4. Neste trecho de código existem algumas anotações, entre elas:

    1. @Path
    2. Este é o padrão da URL que será tratado pela classe. Pode ser informado variáveis utilizando o modelo: {nomeDaVariavel}. Por exemplo: @Path(”/user/{username}/{password}”).
    3. @Autowired
    4. Injeta um objeto do tipo informado na váriavel.
    5. @GET
    6. Responde as requisições do tipo GET, existem ainda: @POST, @PUT e @DELETE que podem ser utilizadas da mesma maneira que o @GET
    7. @Produces
    8. Informa o tipo de retorno do método. Esta anotação pode ser informada tanto no método quanto na classe, junto com o @Path. Informando na classe o tipo de retorno será propagado para todos os métodos que não tenham um @Produces específico.
    9. @PathParam
    10. Traduz as variáveis mapeadas na URL para um objeto. Este será mapeado para uma variável informada na assinatura do método.

Acessando

Para acessar o recurso recém criado voce pode utilizar o próprio browser (Chrome ou Firefox), com eles fica fácil de simular o GET. No entanto, se você está no mundo X (Linux, Unix ou mesmo Mac) faça bom uso do cUrl. De forma rápida e prática este comando é simples de ser utilizado.
Através do parametro “-X” especificando o método que deverá ser enviado é possível testar a maior parte dos serviços:

E com o parâmetro -F você pode especificar os parâmetros (@QueryParam) do método post.






Written by Marcio

December 24th, 2009 at 11:48 am

Posted in Java, Maven, Shell, code

Tagged with , , , ,

Localizar uma classe dentro de um arquivo .jar

without comments

echo usage="Uso:        findJavaClass directory ClassName   "
if [ $# -lt 2 ] ; then
echo $usage
exit 1
fi
if [ -d 1 ] ; then
FIND_CMD="find 1"
else
echo "Diretorio nao existe"
exit 1
fi
$FIND_CMD -name \*.jar | while read jar_file ;
do
found_class=`unzip -l $jar_file | awk '{print }' | grep  `
num_classes=`echo $found_class | wc -c`
if [ $num_classes -gt 1 ] ; then
echo ""
echo "Arquivo:"
echo "    $jar_file"
echo "Classes:"
echo $found_class | sed 's/\ /\n/g' | sed 's/^.*/\ \ \ \ &/g'
fi
done


Descaradamente copiado do blog do Claudio

Written by Marcio

August 14th, 2007 at 4:23 pm

Posted in Java, Linux, Shell

Tagged with

Script para troca de dia e mês (date e sed)

without comments

#!/bin/sh
#
# Altera o parametro do dia e mes no arquivo
#
# autor: marcio@mangar.com.br
#
diaontem=`date --date="yesterday" +%d`
diahoje=`date +%d`
mesontem=`date --date="2 months ago" +%m`
meshoje=`date --date="1 months ago" +%m`

echo Trocando: $diaontem para: $diahoje

#teste local
/bin/sed -i s/dia="$diaontem"/dia=$diahoje/g ./teste.html
#producao
#/bin/sed -i s/dia="$diaontem"/dia=$diahoje/g /home/http/mrtg/teste_wsux1.htm
if [ diahoje == '01'  ]
then
echo Trocando: $mesontem para: $meshoje
#teste local
/bin/sed -i s/mes="$mesontem"/mes=$meshoje/g ./teste.html
#producao
#/bin/sed -i s/mes="$mesontem"/mes=$meshoje/g /home/http/mrtg/teste_wsux1.htm
fi

Written by Marcio

August 2nd, 2007 at 3:00 pm

Posted in Linux, Shell