Detalhes do Aplicativo da Web de Leilão

O aplicativo da Web de Leilão é composto de vários componentes, ilustrados no seguinte diagrama. Este não é um tutorial sobre como construir o aplicativo inteiro. Em vez disso, este documento destaca pontos importantes de desenvolvimento e design que alavancam as diferentes ferramentas fornecidas com o workbench, assim você pode aplicar esse conhecimento a seus próprios aplicativos da Web.

Esse diagrama mostra os relacionamentos entre os dados, a lógica de negócios, o conteúdo da Web e as ferramentas.
Conforme mostrado pelo diagrama anterior, o conteúdo da Web foi desenvolvido paralelamente com os dados e a lógica de negócios. Enquanto os designers desenvolveram o estilo e o layout das páginas da Web, os desenvolvedores de Java e de serviço da Web codificaram a lógica de negócios para direcionar essas páginas. As seções a seguir descrevem como esses componentes-chave foram criados e suas contribuições com o aplicativo da Web de Leilão:
  1. Mapeando Beans de Entidade para Tabelas de Banco de Dados com o Editor de Mapeamento EJB
  2. Gerando uma Fachada de Sessão com Objetos de Dados SDO Utilizando o Assistente de Fachada de Bean de Sessão
  3. Definindo o Layout do Web Site com o Web Site Designer
  4. Criando Gabaritos de Página da Web com o Page Designer
  5. Incluindo Componentes JavaServer Faces em Páginas JSP com o Page Designer
  6. Criando o Serviço da Web

Mapeando Beans de Entidade para Tabelas de Banco de Dados com o Editor de Mapeamento EJB

Os EJBs (Enterprise JavaBeans) oferecem uma maneira conveniente para os aplicativos Java acessarem os dados armazenados nos bancos de dados relacionais. Os beans de entidade podem ser desenvolvidos utilizando BMP (Bean-Managed Persistence) ou CMP (Container-Managed Persistence). O CMP permite mais flexibilidade do que o BMP porque o contêiner EJB faz todas as chamadas específicas do banco de dados, conforme instruído pelo bean. Por padrão, as ferramentas no workbench Rational geram beans de entidade utilizando CMP. O bean de entidade CMP não contém código SQL de acesso. Isso permite implementar o bean em outros servidores J2EE que utilizam bancos de dados diferentes, sem a necessidade de regravar o código.

Há diferentes abordagens para mapear objetos para bancos de dados relacionais, como descendente, ascendente e junção intermediária. Uma abordagem descendente trabalha a partir dos objetos existentes, em seguida, define gradativamente as camadas detalhadas, conforme necessário e projeta o banco de dados como a etapa final. A abordagem ascendente utiliza um esquema de banco de dados existente e, em seguida, projeta as camadas dependentes, que definem os objetos. A abordagem junção intermediária utiliza um banco de dados existente e objetos existentes e, em seguida, desenvolve as camadas intermediárias para corresponder os objetos às tabelas de banco de dados existentes.

O aplicativo de Leilão utilizou uma abordagem ascendente no desenvolvimento dos EJBs de entidade. O banco de dados Derby existia inicialmente e continha tabelas que correspondiam estritamente aos EJBs necessários. Após a criação de uma conexão com o banco de dados utilizando o assistente para Conexão com o Banco de Dados, utilizamos o assistente para Mapeamento de EJB para RDB para criar EJBs mapeados de uma ou mais tabelas, com algumas exceções. A figura a seguir mostra os EJBs de entidade utilizados no aplicativo de Leilão e os relacionamentos que os conectam.

Esse diagrama mostra o relacionamento entre os diversos beans de entidade.

Os beans de entidade no aplicativo de Leilão não são acessados diretamente pelo cliente remoto. Todos os pedidos e respostas são manipulados pelas fachadas de sessão e os beans são utilizados para acessar os dados de backend. Isso permite o acesso compartilhado pelo lado do servidor com o data store persistente. A próxima seção descreve as fachadas de sessão com mais detalhes.

Para obter informações adicionais sobre como mapear beans de entidade, consulte o tópico da ajuda Gerando um Mapeamento Ascendente.

Gerando uma Fachada de Sessão com Objetos de Dados SDO Utilizando o Assistente de Fachada de Bean de Sessão

A fachada de sessão é a interface entre o cliente e o backend que fornece a comunicação com os componentes SDO (Service Data Object) e, por último, com o banco de dados. Uma fachada de sessão é útil quando o cliente envia pedidos que requerem a execução de vários objetos. O envio desses pedidos individualmente para os objetos pode aumentar o tráfego e latência da rede. A fachada de sessão age como um buffer entre as duas extremidades, obtendo um pedido geral do cliente e, em seguida, enviando pedidos específicos para os objetos necessários. Isso reduz o tráfego e simplifica o desenvolvimento do cliente.

Após a criação da fachada, você pode selecionar os EJBs que ela gerencia, selecionando Mapear EJBs a partir do menu na ferramenta. A fachada gera os componentes SDO necessários a partir dos beans de entidade. No aplicativo de Leilão, há duas fachadas, com base nos dois grupos funcionais a seguir:
  • A fachada de sistema faz interface com os EJBs de backend específicos do sistema, como Categoria (Category) e Função (Role).
  • A fachada de usuário encapsula dados específicos do usuário, como Lance (Bid), Item (Item) e Função (Role).

Agrupando os EJBs e utilizando duas fachadas diferentes, você pode aumentar o desempenho do aplicativo porque os usuários acessam apenas os EJBs necessários. Os beans de entidade que controlam a função do Web site em si, como Categoria (Category), são controlados pela fachada do sistema.

Os EJBs que são referenciados por uma fachada são escolhidos um por vez, utilizando o assistente para Criar Fachada de Bean de Sessão (Create Session Bean Facade), conforme mostrado no diagrama a seguir. Um EJB pode ser referenciado em mais de uma fachada, se necessário. Isso não foi feito no aplicativo de Leilão.

Esse diagrama mostra a Interface com o Usuário Criar Fachada de Bean de Sessão.

Você pode incluir funções adicionais, incluindo métodos nas fachadas. Por exemplo, na fachada do usuário, há um método que retorna uma lista de usuários e um outro método que retorna uma lista dos usuários ativos. Utilizando esses métodos como exemplo, um outro método poderia ser incluído na fachada do usuário que retorna uma lista de todos os usuários marcados como inativos.

As informações adicionais sobre as fachadas de sessão podem ser localizadas no documento de discussão "Design Patterns: Session Facade" em http://java.sun.com./.

Definindo o Layout do Web Site com o Designer do Web Site

A visualização Navegação da ferramenta Web Site Designer fornece uma representação visual do layout do site. Ela mostra as páginas individuais e suas organizações hierárquicas e é útil para manter o layout e a organização das páginas dentro do site. Quando você arrasta e solta páginas no editor, os controles de navegação nos gabaritos de página são automaticamente atualizados. Por exemplo, com a estrutura de navegação de Leilão mostrada no diagrama a seguir, você poderia alterar a ordem das guias de navegação, movendo a página Vender (Sell) antes da página Procurar (Browse). O Web Site Designer automaticamente gera as guias na ordem correta em todas as páginas. Para tornar as alterações visíveis no aplicativo em execução, salve novamente cada página que utiliza o gabarito de navegação.

Esse diagrama mostra os JSPs de Leilão que aparecem no Web Site Designer.

Além da visualização Navegação que acabou de ser descrita, o Web Site Designer fornece uma visualização Detalhe que organiza elementos adicionais da página em uma tabela editável conveniente, conforme mostrado na figura a seguir. Essa tabela facilita a atualização das propriedades da página, como título, autor e etiqueta de navegação.

Esse diagrama mostra a visualização de detalhes do Web Site Designer.

Para obter informações adicionais sobre como utilizar o Web Site Designer para gerenciar o layout do Web site, consulte o tópico Criando uma Estrutura de Web Site na ajuda on-line.

Criando Modelos de Página da Web com o Page Designer

O ambiente de trabalho é fornecido com um designer visual para desenvolver modelos de página, bem como as próprias páginas da Web.

Os gabaritos de página são elementos reutilizáveis do código de conteúdo que fornecem uma aparência ou comportamento comum para as seções de um Web site. Para compartilhar uma aparência e um comportamento comuns, as páginas da Web precisam referenciar apenas os gabaritos. A utilização de gabaritos beneficia o usuário, que pode navegar facilmente pelo Web site e o desenvolvedor, que precisa apenas gravar código específico de uma determinada página.

Os gabaritos de página facilitam a manutenção do conteúdo do Web site. As alterações no arquivo de gabarito são automaticamente refletidas em todas as páginas que o referenciam. Por exemplo, no aplicativo da Web de Leilão, o gabarito maintemplate.jtpl fornece o layout geral para as páginas do Leilão. Os elementos da página da Web podem ser incluídos no gabarito, utilizando a paleta no Page Designer, que permite arrastar e soltar elementos na página da Web. O código HTML requerido é gerado automaticamente. O gabarito de Leilão pode ser facilmente modificado dessa maneira para incluir, por exemplo, a data e hora atuais no rodapé.

Os elementos-chave no gabarito de Leilão são os controles de navegação. A barra de navegação do aplicativo da Web de Leilão utiliza duas formas de navegação:
  • Guias de navegação: exibem diferentes seções do Web site.
  • As trilhas de navegação, ou "bread crumbs": exibem textualmente a localização do usuário no Web site, por exemplo, Home > Procurar (Browse) > Listagem (Listing).
Este diagrama mostra as guias de navegação que aparecem nas páginas de amostra do Leilão.

Inserindo uma tag que chame o gabarito em vez de codificar permanentemente a navegação, você pode incluir a mesma barra de navegação em todas as páginas do site. O editor de Mapeamento de Gabarito insere referências no gabarito para uma página da Web.

Os gabaritos dinâmicos utilizam essa tecnologia um pouco mais adiante, por exemplo, alterando o conteúdo da página da Web com base em funções ou recursos do usuário ou inserindo informações específicas do usuário em uma página da Web. A amostra de Leilão utiliza modelos dinâmicos para fornecer links administrativos na barra de navegação apenas para os usuários que efetuaram login como administradores e para alterar o botão "Login" para ler "Logout" assim que o usuário tiver efetuado login com êxito.

Para obter informações adicionais sobre como criar modelos de página da Web, consulte o tópico da ajuda em Criando um Modelo de Página.

Incluindo Componentes JavaServer Faces nos Arquivos JSP com o Page Designer

JSF (JavaServer Faces) é uma tecnologia que ajuda a construir interfaces com o usuário para aplicativos dinâmicos da Web que são executados em um servidor de aplicativos. JSF é uma linguagem de padrão aberto e utiliza uma biblioteca de tags padrão do JavaServer Faces. As tags são inseridas no código HTML para criar páginas dinâmicas da Web.

A estrutura JSF gerencia estados da interface com o usuário entre pedidos do servidor e oferece um modelo de desenvolvimento simples para manipular os eventos do lado do servidor ativados pelo cliente. Por exemplo, um JSF pode ter um comportamento especificado para eventos diferentes, como um clique do botão. O Page Designer possui funções internas, exibidas visualmente na paleta, que você pode arrastar e soltar na página da Web. Essas funções arrastar e soltar facilitam a utilização de JSF, HTML e outros elementos de script. Isso é útil não apenas para controlar as funções básicas de um campo, como o tipo de valor de um campo de texto (inteiro, alfanumérico), mas também permite definir regras de validação. No Page Designer, os controles JSF podem ser ligados aos dados SDO associados a cada página.

A paleta do Page Designer pode ser utilizada para incluir funções adicionais em páginas JSF. Por exemplo, um botão "Compre Agora" (Buy It Now) poderia ser incluído na página de detalhes do item para permitir que um usuário compre o item no valor definido pelo vendedor.

A figura a seguir mostra os controles JSF para a página Detalhes do Leilão (Auction details). O campo newbid inputText é restrito a aceitar apenas inteiros com a caixa de opções Apenas Inteiro (Integer Only), conforme visto no canto inferior direito da figura. O campo inputText possui definições adicionais para Validação (Validation), Comportamento (Behavior) e Acessibilidade (Accessibility), conforme definido nas guias abaixo de h:inputText na parte inferior esquerda da figura. A guia Validação (Validation) é onde regras específicas de validação são definidas utilizando Java. Por exemplo, a entrada válida para o campo newbid inputText é um inteiro não nulo, é maior que o lance inicial e é maior que o lance atual mais um.

Esse diagrama mostra os controles JSF utilizados na página Detalhes do Leilão (Auction Details).

O código a seguir foi gerado para o campo newbid inputText na página itemdetails do aplicativo de Leilão.

<h:inputText styleClass="inputText" id="newbid" required="true" size="14">
    <f:convertNumber integerOnly="true" />
    <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ?
                pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid :
        pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}">
        </f:validateLongRange>
</h:inputText>

Para obter informações adicionais sobre como desenvolver arquivos Faces JSP, consulte o tópico da ajuda em JavaServer Faces.

Criando o Serviço da Web

O serviço da Web foi desenvolvido paralelamente com o aplicativo da Web porque ele não depende do aplicativo da Web - o serviço da Web é um outro meio de acessar a lógica de negócios e não inclui toda a funcionalidade do aplicativo da Web. Consulte a seção serviço da Web para obter uma descrição mais detalhada dessa parte do aplicativo de Leilão.

Organização de Projetos de Leilão

O aplicativo da Web de Leilão possui vários projetos. Cada projeto possui uma finalidade específica. A lista a seguir descreve cada projeto e como ele é utilizado na amostra de Leilão:
  • O projeto AuctionV60EAR é o arquivo EAR (Enterprise Archive) principal implementado para o servidor de aplicativos. Esse projeto é requerido para o ambiente de tempo de execução.
  • O projeto AuctionV60EJB contém os EJBs e as classes de fachada.
  • O projeto AuctionV60EJBClient armazena o código gerado, incluindo as classes SDO e é implementado no cliente.
  • O projeto AuctionV60Web contém todos os arquivos JSF, o gabarito e a lógica de negócios para executar os arquivos JSF.
  • O projeto AuctionV60WebService possui os arquivos WSDL de serviço da Web e a origem Java para o serviço da Web.
  • O projeto OIDGenerator e o OIDGeneratorClient são requeridos para criar as novas chaves para as inserções do banco de dados.
Tópico pai: Aplicativo da Web de Leilão

Feedback