SaaS (Software as a Service): Tutorial do Zillow

O NetBeans IDE oferece um Gerenciador de Web Services que dá suporte aplicações Software as a Service (SaaS). SaaS refere-se a um modelo de entrega de aplicação de software onde um fornecedor de software desenvolve uma aplicação de software nativo da Web, hospeda e opera a aplicação para uso por seus clientes via Internet. SaaS é um modelo cada vez mais popular para oferecer funcionalidade de software, já que é econômico em termos de custo e recursos de hardware do cliente. O IDE agora facilita para os desenvolvedores de Java acessar todos os serviços SaaS populares na Web.

Este tutorial mostra como usar o SaaS simples fornecido pelo zillow.com. O Zillow.com é uma empresa de serviços imobiliários on-line baseada em Seattle, Washington, fundada em 2005 por Rich Barton e Lloyd Frink, antigos executivos da Microsoft e fundadores da Expedia. O Zillow permite que os usuários vejam o valor de milhões de casas em todos os Estados Unidos, não apenas aquelas que estão para venda. Além de dar estimativas de valores de casas, ele oferece várias funcionalidades exclusivas, incluindo a alteração no valor de cada casa em um determinado período de tempo (por exemplo, 1, 5 ou 10 anos), views aéreas de casas e preços de casas na área. Desde que possa acessar os dados apropriados, ele também fornece informações básicas sobre uma determinada casa, como metragem e o número de quartos e banheiros. Os usuários também podem obter estimativas atuais de casas, caso tenha havido alguma alteração significativa.

Neste tutorial, você exibe um gráfico que mostra a média de preços de casas em uma região dos EUA durante 12 meses. Para configurá-lo, primeiro use o Gerenciador de Serviços para inserir a operação ZillowRealEstateService.GetRegionChart em um servlet. O IDE trata a infraestrutura básica, mas você precisa modificar o código do servlet para extrair o URL do Gráfico da Região. Este tutorial mostra como usar objetos JAXB para extrair o URL. Esta é a abordagem mais simples.

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0

Para seguir este tutorial, são necessários os recursos e o software a seguir.

Software ou Recurso Versão Necessária
NetBeans IDE Pacote de download do Java EE
JDK (Java Development Kit) versão 7 ou 8
Servidor de aplicações ou Web compatível com Java EE Servidor Web Tomcat 7.x, 8.x, GlassFish Server Open Source Edition 3.1.x, 4.x ou Oracle WebLogic Server 11g-12c
Importante: se você usar o Tomcat com este tutorial, consulte
o Wiki do NetBeans sobre Tomcat com REST

Registrando para Receber a Chave de API Zillow

Os serviços Zillow usam a autenticação de chave de API. Inscreva-se no Zillow aqui para receber uma chave de API. Você precisará preencher um form de registro, mas o registro é gratuito.

Outros serviços usam Autenticação HTTP, assinatura de cabeçalho ou log-in do usuário para autenticação. Esses mecanismos serão abordados em futuros tutoriais.

Criando o Servlet

O IDE permite que você insira operações SaaS em servlets, serviços RESTful existentes, páginas JSP ou POJOs (plain Java objects, objetos Java simples). Neste tutorial, você cria uma aplicação Web com um servlet.

Para criar o servlet:

  1. Escolha Arquivo > Novo Projeto. Em Categorias, selecione Java Web. Em Projetos, selecione Aplicação Web e clique em Próximo.
  2. No campo Nome do Projeto, digite ZillowRegionChart.
  3. Selecione o GlassFish Server ou o servidor Tomcat e o Java EE 6 ou 7. Clique nas opções restantes e clique em Finalizar.
  4. Clique com o botão direito do mouse no nó do projeto ZillowRegionChart e selecione Propriedades na janela de contexto. A caixa de diálogo Propriedades do Projeto será aberta.
  5. Clique com o botão direito do mouse no nó do projeto e selecione Novo > Servlet. O assistente Novo Servlet será aberto.
    Assistente Novo Servlet com nome de classe ZillowRegionChartServlet e nome de pacote arbitrário
  6. Chame o servlet de ZillowRegionChartServlet. Crie um pacote arbitrário para ele, como zillow.regionchart. Mantenha todos os outros defaults e clique em Finalizar.

O servlet será aberto em uma guia do editor e o servlet e seu pacote pai ficam visíveis na view Projetos, no nó Pacotes de Códigos-Fonte do projeto.

Guia Projetos no IDE que mostra o servlet e seu pacote pai no projeto ZillowRegionChart

Adicionando a Operação GetRegionChart do Zillow ao servlet

Use o Gerenciador de Serviços para adicionar a funcionalidade SaaS do Zillow em seu servlet. O IDE cuida de toda a infraestrutura para você.

Para adicionar a operação GetRegionChart:

  1. Abra a guia Serviços no IDE. Expanda o nó Web Services. Navegue para a operação GetRegionChart do Zillow.
    Guia Serviços que mostra o nó Web Services expandido, mostrando o serviço GetRegionChart do Zillow
  2. No editor, localize o método processRequest em ZillowRegionChartServlet.java. Adicione uma linha vazia no início do bloco de teste. Arraste e solte a operação getRegionChart no bloco de teste de processRequest().
  3. A caixa de diálogo Personalizar SaaS GET será aberta. Você pode indicar os valores reais de cidade, estado e CEP dos EUA ou deixá-los como nulo. (Se você deixar valores nulos, obterá um gráfico da média de preços de casa para todo o país.) Clique em OK.

O IDE gera o código do serviços SaaS GET. Quando isso estiver concluído, o método processRequest() terá a seguinte aparência.


Código de servlets com o bloco de teste getRegionChart digitado, antes da modificação

O IDE também cria dois novos pacotes, org.netbeans.saas e org.netbeans.saas.zillow, contendo a conexão RESTful e as classes específicas do Zillow, respectivamente. A estrutura completa do pacote é mostrada abaixo. O IDE também importa as classes RestConnection e ZillowRealEstateService em seu servlet.

Estrutura do projeto Region Chart do Zillow que mostra pacotes criados pelo IDE depois da operação arrastar e soltar o getRegionChart

Adicionando a Chave de API ao Projeto

Para que o projeto acesse os serviços do Zillow, você precisa passar a chave de API que obteve quando se registrou. Abra o arquivo zillowrealestateserviceauthenticator.properties e copie e cole na chave de API que você recebeu no e-mail do Zillow que confirmava o seu registro

Modificando o Servlet para Retornar o Gráfico

O servlet que você criou não produz uma saída útil. Para fazer com que o Gráfico da Região apareça em um browser, você precisa extrair o URL do gráfico da String que o serviço do Zillow retorna, que está no formato de um arquivo XML. Uma estratégia é fazer parsing do arquivo XML e colar o URL em uma página JSP. Essa abordagem é descrita no artigo Consuming Zillow Web Services de Adam Myatt na NetBeans Zone. Neste tutorial, você usa uma abordagem mais simples envolvendo objetos JAXB.

Para retornar ao gráfico:

  1. Modifique a linha de saída //out.println("The SaasService returned: "+result.getDataAsString());. Retire o comentário da linha e altere-o para produzir uma tag HTML <img> em vez de texto. Tenha cuidado para sair das aspas que irão circundar o URL! A linha agora tem a seguinte aparência:
    out.println("<img src=\""+result.getDataAsString() + "\" />");
  2. Mova a linha de saída para dentro do bloco if, no final. O bloco if agora se parece com:
    if (result.getDataAsObject(zillow.realestateservice.regionchart.Regionchart.class) instanceof
      zillow.realestateservice.regionchart.Regionchart) {
            zillow.realestateservice.regionchart.Regionchart resultObj = result.getDataAsObject(zillow.realestateservice.regionchart.Regionchart.class);
            out.println("<img src=\"" + result.getDataAsString() + "\" />");
    }
  3. Substitua o método result.getDataAsString() na saída por resultObj.getResponse().getUrl(). Você pode usar a funcionalidade autocompletar código para selecionar getResponse() de métodos resultObj diferentes, como mostrado abaixo e, em seguida, usar a funcionalidade autocompletar código para selecionar getUrl() de métodos getResponse.
    Autocompetar código para métodos resultObj
  4. Altere o bloco catch para interceptar JAXBException em vez de Exception. Você também pode usar um método Logger.getLogger(...) em vez de imprimir um rastreamento de pilha. Você terá que importar as classes relevantes. Veja se você pode usar a funcionalidade autocompletar código e a ação do menu de contexto Corrigir Importações para reproduzir o seguinte bloco catch:
    } catch (JAXBException ex) {
        Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex);
    }
  5. Remova a seção de saída comentada do bloco try pai no código do servlet.

Suas modificações no código agora estão completas! O código final do servlet deve ter a seguinte aparência:

package zillow.regionchart;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBException;
import org.netbeans.saas.zillow.ZillowRealEstateService;
import org.netbeans.saas.RestResponse;

/**
 *
 * @author jeff
 */
public class ZillowRegionChartServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP GET and POST methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            try {
                String unittype = "dollar";
                String city = null;
                String state = null;
                String zIP = null;
                String width = null;
                String height = null;
                String chartduration = null;

                RestResponse result = ZillowRealEstateService.getRegionChart(
                        unittype, city, state, zIP, width, height, chartduration);
                if (result.getDataAsObject(
                        zillow.realestateservice.regionchart.Regionchart.class) instanceof zillow.realestateservice.regionchart.Regionchart) {
                    zillow.realestateservice.regionchart.Regionchart resultObj =
                            result.getDataAsObject(
                            zillow.realestateservice.regionchart.Regionchart.class);
                    out.println("<img src=\"" + resultObj.getResponse().getUrl() + "\" />");

                }
                //TODO - Uncomment the print Statement below to print result.

            } catch (JAXBException ex) {
                Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        } finally {
            out.close();
        }
    }

Executando o Servlet do Gráfico da Região Zillow

A forma mais simples de executar o servlet é clicar com botão direito do mouse no servlet na view Projetos e selecionar Executar Arquivo. Como alternativa, clique com o botão direito do mouse no nó Projeto e selecione Propriedades. Na árvore Propriedades, selecione Executar. No campo URL relativo, digite /ZillowRegionChartServlet, como mostrado abaixo. Clique em OK e execute o projeto.

Caixa de diálogo Propriedades do projeto ZillowRegionChart que mostra o URL relativo

Quando você executa o projeto com êxito, uma janela do browser é aberta mostrando o Gráfico da Região.

Gráfico da região Zillow no browser

Mais Exercícios

A seguir, encontam-se mais algumas ideias para você explorar:

  • Tente valores reais diferentes para cidade, estado e CEP. Execute o servlet novamente.
  • Crie um cliente que permita que você passe a cidade, o estado e o CEP para o serviço e retorne o Gráfico da Região correspondente.
  • Use uma página JSP, em vez do objeto JAXB, para retornar o gráfico, como mostrado neste artigo da NetBeans Zone.


Consulte Também

Para obter mais informações sobre o uso do NetBeans IDE para desenvolver Web services RESTful, SaaS e outras aplicações Java EE, consulte os seguintes recursos:

Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos das funcionalidades de desenvolvimento Java EE do NetBeans IDE, inscreva-se na lista de notícias .

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo