Caminhada ao Ego com Web Services
em 07/02/2004
, por Rafael Steil
e este aqui:
Muito obrigado por estas pequenas notas, gostei bastate. Eu estive relativamente ocupado com um projeto que precisava ser terminado até 31 de Janeiro ( ou então, sem pagamento ), enquanto o resto do mundo esta celebrando, eu estava trabalhando em uma velocidade frenética. Um de meus clientes pediu-me para investigar sobre como poderíamos usar WebServices e fornecer nossa própria maneira de transportar as mensagens XML, uma vez que o HTTP nao era apropriado para a aplicação. Preciso admitir que sempre vi WebServices com ceticismo, compartilhado por várias outras pessoas. Quantos WebServices úteis iremos ver nos próximos anos, ou é tudo Silicon Snake Oil ( ótimo livro, por sinal )? Minhas frustações foram aumentadas nas tentativas de conseguir comunicação com WebServices REAIS. Acredite ou não, mas eu me esforço com novas tecnologias. Lembro-me quando os EJBs apareceram pela primeira vez, e o tempo que levou para eu fazer o primeiro deploy de um CMP. A primeira implementação que olhamos foi a da Sun, o Java Web Services Developers Kit. A implementação jax-rpc funcionou a maior parte do tempo, porém perdi muito cabelo ( e tempo ) quando não funcionava. De maneira alguma posso ser considerado especialista em WebServices. Minha experiência total é algo em torno de 2 semanas. Contudo, depois de ter começado a usar a implementação Axis, do Grupo Apache, fiquei excitado com as possibilidades de integração com sites mundialmente famosos através dos meus programas feitos em Java.
A calculadora Fibonacci é um excercício muito bom que uso para quebrar o espírito extremamente confiante dos estudantes de Java. Falando em estudantes, eis aqui uma pequena pausa para um comercial: Seja treinado por progradores experientes. Venha para Maximum Solutions e aprenda como escrever excelente, eficiente, bom código em Java. Entre em contato com nós simplesmente enviando um email. A razão pela qual este código causa problemas é a sua natureza recursiva. Mesmo fibonacci(100) irá levar um tempo enorme para executar. Como convertemos esta classe Java para um WebService? Compilamos? Adicionamos uma interface e escrevemos um documento WSDL ( Web Services Description Language )? Não, é muito mais fácil. Comece pegando o Apache Axis versão 1.1. Instale o Axis e o Tomcat. Em seguida, copie o diretório "axis", que esta localizado em "webapps", de dentro do diretório de instalação do Axis, e copie para o diretório de aplicações do Tomcat, geralmente "webapps". Inicie o Tomcat. O Axis deverá estar rodando. Acesse http://localhost:8080/axis e valide a sua instalação. Se não funcionar, dê uma olhada na documentação de instalação que vem com o Axis. Agora vem a parte legal. Pegue o arquivo "Fibonacci.java" ( não o .class ), copie ele para o diretório webapps/axis e renomeie o arquivo para Fibonacci.jws. Parabéns. Você acabou de escrever o seu primeiro WebService. É incrivelmente simples. Você pode verificar o funcionamento acessando http://localhost:8080/axis/Fibonacci.jws. A página padrão lhe mostra um link para o arquivo WSDL descrevendo a interface para a classe em uma linguagem que todo mundo pode entender ( exceto humanos ).
Voce deverá ter o CLASSPATH configurado corretamente. Eu assumo que os leitores regulares da newsletter irão saber da propriedade do sistema java.ext.dirs, a qual você pode usar para apontar para um diretório ou arquivo JAR, ao invés de colocar todos eles no seu CLASSPATH. For exemplo, vamos considerar que o Axis foi instalado em c:\java\axis-1_1, e as classes compiladas estão no diretório "classes". Uma vez que tenhamos compilado o programa FibClient, podemos rodá-lo usando:
E isso é tudo o que você precisa fazer. Rode o código com o seguinte comando: java -Djava.ext.dirs=lib -classpath classes com.maxoft.fib.client.FibClient2
O próximo passo é programar o client. Estou usando as classes geradas para realizar uma pesquisa por nomes famosos:
Quando você roda esse programa, é necessário informar a sua licensa de uso fornecida pelo Google, que você recebe quando se registra. O registro voce pode fazer em http://www.google.com/apis. O programa você roda com a seguinte linha de comando: java -Djava.ext.dirs=lib -classpath classes com.maxoft.webservices.EgoTrip YOUR_GOOGLE_LICENSE_KEY Quando você rodar este programa, a newsletter já estará no site, e quem sabe o Google já tenha indexado isso também? Caso positivo, os números podem ser diferentes. De fato, eles provavelmente serão diferentes por causa que são apenas estimados. Desculpe Bill Gates, você não está no topo, meu amigo John Green é mais famoso:
Ao menos eu apareço mais freqüentemente que meu professor da Universidade de Cape Town ;-) Obrigado por ler esta newsletter, Atenciosamente, Heinz
Caminhada ao Ego com WebServices
Bem vindo à edição de número 84 da The Java(tm) Specialists' Newsletter, e bem vindo ao ano 2004 D.C. Muitos anos atrás Cape Town tentou sediar as Olimpíadas, e isso era esperado para ocorrer esse ano. Infelizmente - ou talvez felizmente - Athenas ganhou o prêmio. Este ano estamos celebrando 10 anos de Democracia.
Janeiro de 2004 é um mês significante. É o primeiro mês desde Novembro 2001 que eu não publiquei uma newsletter. Agradeco todos os emails que recebi de vocês, incentivando-me a continuar. Por exemplo:
e este aqui:
Muito obrigado por estas pequenas notas, gostei bastate. Eu estive relativamente ocupado com um projeto que precisava ser terminado até 31 de Janeiro ( ou então, sem pagamento ), enquanto o resto do mundo esta celebrando, eu estava trabalhando em uma velocidade frenética. Um de meus clientes pediu-me para investigar sobre como poderíamos usar WebServices e fornecer nossa própria maneira de transportar as mensagens XML, uma vez que o HTTP nao era apropriado para a aplicação. Preciso admitir que sempre vi WebServices com ceticismo, compartilhado por várias outras pessoas. Quantos WebServices úteis iremos ver nos próximos anos, ou é tudo Silicon Snake Oil ( ótimo livro, por sinal )? Minhas frustações foram aumentadas nas tentativas de conseguir comunicação com WebServices REAIS. Acredite ou não, mas eu me esforço com novas tecnologias. Lembro-me quando os EJBs apareceram pela primeira vez, e o tempo que levou para eu fazer o primeiro deploy de um CMP. A primeira implementação que olhamos foi a da Sun, o Java Web Services Developers Kit. A implementação jax-rpc funcionou a maior parte do tempo, porém perdi muito cabelo ( e tempo ) quando não funcionava. De maneira alguma posso ser considerado especialista em WebServices. Minha experiência total é algo em torno de 2 semanas. Contudo, depois de ter começado a usar a implementação Axis, do Grupo Apache, fiquei excitado com as possibilidades de integração com sites mundialmente famosos através dos meus programas feitos em Java.
Um WebService Matemático
Antes de mais nada, irei lhe mostrar um WebService em Java com o qual você pode integrar:
A calculadora Fibonacci é um excercício muito bom que uso para quebrar o espírito extremamente confiante dos estudantes de Java. Falando em estudantes, eis aqui uma pequena pausa para um comercial: Seja treinado por progradores experientes. Venha para Maximum Solutions e aprenda como escrever excelente, eficiente, bom código em Java. Entre em contato com nós simplesmente enviando um email. A razão pela qual este código causa problemas é a sua natureza recursiva. Mesmo fibonacci(100) irá levar um tempo enorme para executar. Como convertemos esta classe Java para um WebService? Compilamos? Adicionamos uma interface e escrevemos um documento WSDL ( Web Services Description Language )? Não, é muito mais fácil. Comece pegando o Apache Axis versão 1.1. Instale o Axis e o Tomcat. Em seguida, copie o diretório "axis", que esta localizado em "webapps", de dentro do diretório de instalação do Axis, e copie para o diretório de aplicações do Tomcat, geralmente "webapps". Inicie o Tomcat. O Axis deverá estar rodando. Acesse http://localhost:8080/axis e valide a sua instalação. Se não funcionar, dê uma olhada na documentação de instalação que vem com o Axis. Agora vem a parte legal. Pegue o arquivo "Fibonacci.java" ( não o .class ), copie ele para o diretório webapps/axis e renomeie o arquivo para Fibonacci.jws. Parabéns. Você acabou de escrever o seu primeiro WebService. É incrivelmente simples. Você pode verificar o funcionamento acessando http://localhost:8080/axis/Fibonacci.jws. A página padrão lhe mostra um link para o arquivo WSDL descrevendo a interface para a classe em uma linguagem que todo mundo pode entender ( exceto humanos ).
Acessando o WebService
O cliente para o WebService eh um pouco mais dificil ( uma versão mais simples vem em seguinda ).
Voce deverá ter o CLASSPATH configurado corretamente. Eu assumo que os leitores regulares da newsletter irão saber da propriedade do sistema java.ext.dirs, a qual você pode usar para apontar para um diretório ou arquivo JAR, ao invés de colocar todos eles no seu CLASSPATH. For exemplo, vamos considerar que o Axis foi instalado em c:\java\axis-1_1, e as classes compiladas estão no diretório "classes". Uma vez que tenhamos compilado o programa FibClient, podemos rodá-lo usando:
Tornando o código mais simples
A IBM é uma grana companhia. Eles escrevem excelente código open source, free software, os quais podemos usar para produzir bom software. Uma de suas fantásticas ferramentas é o WSDL2Java. Você pode invocá-lo no WebService que acamos de escrever:
java -Djava.ext.dirs=c:\java\axis-1_1\lib org.apache.axis.wsdl.WSDL2Java
http://localhost:8080/axis/Fibonacci.jws?wsdl -o src -p com.maxoft.fib.clien
Isso gera alguns arquivos que podemos usar para tornar nosso cliente mais simples de escrever. O pacote onde os arquivos ficam esta em com.maxsoft.fib.clint, portanto é para lá que irei adicionar a nova classe FibClient:
E isso é tudo o que você precisa fazer. Rode o código com o seguinte comando: java -Djava.ext.dirs=lib -classpath classes com.maxoft.fib.client.FibClient2
E agora, a Caminhada ao Ego
Fama é quando você caminha em uma sala e lá há mais gente que conhece você do que você conhece. Meu sogro foi o melhor jogador de futebol na África do Sul nos seus dias de glória. E, 20 anos depois, pessoas encontram com ele na rua e dizem: "Lembra de 1968, quando comemoramos a sua vitória juntos?". Claro que ele não se recorda, mas ele também nao deseja desapontar seus fans.
A questão é: o quão famoso é você? dependendo do seu nome, isso pode ser uma coisa difícil de determinar. Meu nome é fácil. Sou o único "Heinz Kabutz" vivo no planeta. Meu amigo John Green provavelmente tem outro John Green vivendo na mesma rua. Portanto, os resultados de uma busca no Google não devem ser levados tão a sério.
O Google publicou uma interface para um WebService que podemos usar para realizar buscas. O WSDL esta disponível em http://api.google.com/GoogleSearch.wsdl. O Google torna este arquivo disponível para o público em geral, portanto há algumas restrições de uso. Por exemplo, você deve se registrar no site para obter uma licensa de uso, a qual você envia a cada requisição. Há também um limite de 1000 requisições por dia, assim como algumas outras restrições. Leia atentamente a documentação no site do Google. Eu gostaria de continuar EgoSurfando no Google através do meu programa, portanto, por favor, não abuse da boa vontade deles ;-)
Em adição ao WSDL, o Google disponibiliza uma API em forma de Facade para o Java. Porém, uma vez que eu estava tenztando aprender em como interagir com um WebService, usei o Axis para conversar com o Google. Foi extremamente mais simples que eu pensava que seria. Em primeiro lugar, é uma boa idéia gerar as classes Java a partir do WSDL:
java -Djava.ext.dirs=c:\java\axis-1_1\lib org.apache.axis.wsdl.WSDL2Java
http://api.google.com/GoogleSearch.wsdl -o src
Isso cria os seguintes arquivos no package GogleSearch:
O próximo passo é programar o client. Estou usando as classes geradas para realizar uma pesquisa por nomes famosos:
Quando você roda esse programa, é necessário informar a sua licensa de uso fornecida pelo Google, que você recebe quando se registra. O registro voce pode fazer em http://www.google.com/apis. O programa você roda com a seguinte linha de comando: java -Djava.ext.dirs=lib -classpath classes com.maxoft.webservices.EgoTrip YOUR_GOOGLE_LICENSE_KEY Quando você rodar este programa, a newsletter já estará no site, e quem sabe o Google já tenha indexado isso também? Caso positivo, os números podem ser diferentes. De fato, eles provavelmente serão diferentes por causa que são apenas estimados. Desculpe Bill Gates, você não está no topo, meu amigo John Green é mais famoso:
Ao menos eu apareço mais freqüentemente que meu professor da Universidade de Cape Town ;-) Obrigado por ler esta newsletter, Atenciosamente, Heinz
Sobre a The Java Specialists Newsletter
Este artigo é fruto de uma parceria entre o GUJ e o autor da The Java Specialists Newsletter, Dr. Heinz M. Kabutz. Originalmente publicadas em inglês e enviadas para milhares de leitores ao redor do planeta, o GUJ propô-se a realizar a tradução para o Português do conteúdo, disponibilizando assim um ótimo material para um número ainda maior de leitores.
Você encontra o documento original, assim como newsletters anteriores, no site oficial, em http://www.javaspecialists.co.za