ePublicity
Transcrição
ePublicity
ePublicity Lúcio Samuel Gomes Morais - 25314 Pedro Filipe Monteiro Mendes - 25686 Trabalho realizado sob a orientação de Prof. Doutor Paulo Jorge Teixeira Matos Dr. Ricardo Filipe Afonso Órfão Engenharia Informática 2012/2013 ePublicity Relatório da UC de Projeto Licenciatura em Engenharia Informática Escola Superior de Tecnologia e de Gestão Lúcio Morais, Pedro Mendes Setembro de 2013 iii A Escola Superior de Tecnologia e Gestão não se responsabiliza pelas opiniões expressas neste relatório. iv Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projeto. ___________________________________________ Prof. Doutor Paulo Jorge Teixeira Matos, Orientador Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projeto. ___________________________________________ Dr. Ricardo Filipe Afonso Órfão, Coorientador Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projeto. ___________________________________________ Prof. Doutor Paulo Alexandre Vara Alves, Arguente Aceite para avaliação da UC de Projeto v vi Agradecimentos “Mas você – eu não posso nem quero explicar – eu agradeço.” (Clarice Lispector) Uma palavra, um olhar, um sorriso, um silêncio… tudo isto pode ser uma forma de agradecimento mas nada, em momento algum, poderá expressar a gratidão que temos a todos aqueles que nos apoiaram neste percurso que agora finda! Agradecemos aos nossos Professores porque nos ajudaram, nos “aturaram” e porque sem eles não era possível saber o que sabemos hoje. Destes, agradecemos especialmente ao nosso Orientador, Professor Paulo Matos, pela ajuda na preparação e desenvolvimento deste trabalho. Um reconhecimento também ao nosso Coorientador, Ricardo Órfão, pela ajuda que nos prestou. Aos nossos pais, irmãos e irmãs, tios e tias, família de longe e de perto, aos nossos amigos de cá, de lá e de sempre: Muito Obrigado! Um obrigado à própria Escola Superior de Tecnologia e Gestão e ao Instituto Politécnico de Bragança pela qualidade de Ensino e excelentes condições de trabalho dignas do melhor Instituto Politécnico de Portugal e à cidade de Bragança e seus conterrâneos por nos terem acolhido tão bem e nos terem proporcionado os melhores anos da nossa Vida! E, finalmente, como nada é feito sem a ajuda de cada um de nós, deixamos um agradecimento muito especial a nós mesmos e a cada um: pelas piadas, pelos risos, pelas horas de desorientação, por nunca termos desistido, pelo trabalho, pelo reconhecimento e porque “a Vida é uma aventura, há que viver esta loucura e Amigos para Sempre”, Obrigado pela verdadeira Amizade que fomos construindo ao longo destes três anos! E como “there are 10 types of people in the world: those who understand binary and those who don’t” e nós fazemos parte dos primeiros, ao fim destes três inesquecíveis anos já podemos dizer: 01100011 01101111 01101110 01110011 01110101 01101101 01100001 01110100 01110101 01101101 00100000 01100101 01110011 01110100 00100001… vii viii Resumo Ultrapassando a barreira dos US$ 1.000.000.000.000 (triliões de dólares americanos) em 2012 (eMarketer, 2013), o comércio eletrónico tem, ao longo dos anos, ganho adeptos e proporcionado maior comodidade aos vendedores e compradores pela facilidade de acesso e negociação. É necessário cativar as pessoas para que sejam frequentadoras assíduas; quer seja de um museu, de uma biblioteca ou de um monumento, mas também de um site. Para que tal aconteça é necessário oferecer segurança, comodidade e simplicidade de assimilação de informação. Num site como o que se pretende desenvolver, é necessário assegurar vários aspectos para o utilizador como a confidencialidade e segurança dos dados; e comodidade e simplicidade de utilização. O desenvolvimento deste projeto visou colocar em prática um modelo de negócio que visa aproximar compradores dos vendedores, encurtar distâncias entre ambos, promover uma oferta mais competitiva, criar oportunidades de negócio mas, acima de tudo, dar mais poder ao consumidor. O projeto foi materializado recorrendo à tecnologia Java Server Faces (JSF) e à linguagem XHTML que proporcionam o suporte ao modelo e às suas aplicações por parte do servidor (server-side). Esta tecnologia (JSF) permite a gestão dos estados dos componentes de interface (UI components), a manipulação de eventos, validações do lado do servidor, definições para a navegação nas e entre páginas e, sob o ponto de vista comercial (à escala internacional, como se pretende), um requisito muito importante: suporte à internacionalização e acessibilidade. Palavras-chave: comércio eletrónico, modelo de negócio ix x Abstract Overcoming the barrier of US$ 1.000.000.000.000 in 2012 (eMarketer, 2013), e-commerce has, over the years, gaining followers and provided greater convenience to vendors and buyers due to the ease of access and trading. It is required to attract people to become assiduous frequenters; whether a museum, a library or a monument, but also a site. To make that happens it is required to provide security, comfort and simplicity in what concerns to assimilation of information. In a site as which is intended to be developed, it is necessary to ensure some aspects for the user such data confidentiality and security and commodity and simplicity of utilization. With the development of this project we intend to put into practice a business model that aims to approach buyers and vendors, shortening distances between both, promote a more competitive offer, create business opportunities but, above all, give more leverage to consumer. This project was materialized using Java Server Faces (JSF) technology and XHTML programming language that provide the support of the model and its application on the serverside. This technology (JSF) allows the state management of the interface component (UI components), event handling, server-side validations, navigation rules inside and between pages and, from the commercial point of view (in an international scale, as intended), two very important requisites: internationalization and accessibility support. Keywords: e-commerce, business model xi xii AVISO Este trabalho de fim de curso foi realizado sob acordo de confidencialidade e sigilo, através de documento assinado pelos: - Executantes do projeto: Lúcio Samuel Gomes Morais, com o número mecanográfico 25314 Pedro Filipe Monteiro Mendes, com número mecanográfico 25686 - Pelo coorientador: Dr. Ricardo Filipe Afonso Órfão - E pelo orientador, Prof. Doutor Paulo Jorge Teixeira Matos, a quem é devida a propriedade intelectual do modelo de negócio subjacente a este trabalho e os resultados alcançados neste projeto. O presente relatório foi realizado exclusivamente para efeitos de avaliação do trabalho efectuado pelos alunos supracitados, à unidade curricular de Projecto. Destina-se exclusivamente ao arguente, que deverá necessariamente subscrever o acordo de sigilo e confidencialidade em anexo, remetendo o original para o orientador do trabalho. Mais se acrescenta que, segundo o acordo de confidencialidade e sigilo, a distribuição ou divulgação, integral ou parcial, não autorizada deste documento requer a prévia autorização formal por parte do orientador do projecto. xiii Conteúdo 1 Introdução ........................................................................................................................ 21 1.1 Enquadramento ........................................................................................................... 21 1.2 Objetivos ..................................................................................................................... 22 1.3 Estrutura do Documento ............................................................................................. 23 2 Modelo de negócio e principais requisitos ....................................................................... 1 2.1 Descrição....................................................................................................................... 1 2.2 Estrutura de dados ......................................................................................................... 2 3 Arquitetura e Tecnologias................................................................................................. 5 3.1 Java Server Faces (JSF) ................................................................................................ 5 3.2 eXtensible Hypertext Markup Language (XHTML) .................................................... 7 3.3 jQuery ........................................................................................................................... 7 3.4 Asynchronous Javascript and XML (AJAX) ................................................................ 8 3.5 Arquitetura do Sistema ................................................................................................. 8 4 Implementação ................................................................................................................. 14 4.1 Introdução ................................................................................................................... 14 4.2 Message Bundles – Sistema Multilingue .................................................................... 14 4.3 Arquivos de configuração web.xml e faces-config.xml ............................................... 15 4.4 Managed Bean ............................................................................................................ 16 4.5 Facades ....................................................................................................................... 17 4.6 Enterprise Java Beans Entities ................................................................................... 17 4.7 Unidade de Persistência .............................................................................................. 17 4.8 ServletContextListener ................................................................................................ 18 4.9 Phase-listeners ............................................................................................................ 18 4.10 Exception Handler Factory ..................................................................................... 19 4.11 Cookies .................................................................................................................... 19 4.12 Express Checkout – Paypal NVP API ..................................................................... 20 4.13 Google Translate API .............................................................................................. 22 4.14 Sistema automático de notificação .......................................................................... 23 4.15 Serviço de E-mail / SMTP ....................................................................................... 23 xiv 5 4.16 Encriptação, Codificação e Cifragem ...................................................................... 24 4.17 Managed Properties ................................................................................................ 24 4.18 Omnifaces ................................................................................................................ 25 4.19 Primefaces ............................................................................................................... 26 Conclusão ......................................................................................................................... 27 5.1 Análise de resultados .................................................................................................. 27 5.2 Análise autocrítica ...................................................................................................... 28 5.3 Trabalhos futuros ........................................................................................................ 29 15 xvi Lista de Figuras Figura 1 – Diagrama de atividades ...................................................................................................................... 2 Figura 2 – Representação do modelo relacional da base de dados ................................................................... 3 Figura 3 – Representação do modelo server-side e integração do MVC ........................................................... 6 Figura 5 – Processamento da UI Component tree na plataforma JSF .............................................................. 9 Figura 6 – Arquitetura do Sistema .................................................................................................................... 11 Figura 7 – Diagrama de casos de uso................................................................................................................. 12 Figura 8 – Diagrama de colaboração................................................................................................................. 12 Figura 9 – Diagrama de sequência NVP API - Paypal..................................................................................... 21 xvii xviii Lista de Abreviaturas AJAX Asynchronous Javascript And XML API Application Programming Interface EJB Enterprise Java Bean EL Expression Language HTML HyperText Markup Language J2EE Java Platform, Enterprise Edition JPA Java Persistence API JPQL Java Persistence Query Language JSF Java Server Faces JSP Java Server Pages NVP Name-Value Pair MVC Model-View-Controller ORM Object/Relational Mapping RSS Rich Site Summary SGBD Sistema de Gestão de Bases de Dados SMTP Simple Mail Transfer Protocol UI Components User Interface Components URL Uniform Resource Locator XHTML eXtensible HyperText Markup Language XML eXtensible Markup Language xix xx Capítulo 1 1 Introdução 1.1 Enquadramento O objetivo deste projeto foi explorar e demonstrar a viabilidade técnica de um modelo de comércio eletrónico original, cuja autoria é do Prof. Paulo Matos. O projeto foi realizado sob acordo de sigilo e confidencialidade, o que limita a informação e os detalhes que são apresentados neste relatório. Uma vez que este se destina a avaliar o trabalho desenvolvido na unidade curricular de Projeto, cuja vertente é essencialmente tecnológica, entendeu-se enfatizar toda a descrição segundo esta perspetiva, omitindo todos os detalhes considerados confidenciais. Todas as explicações que, de alguma forma, requerem a perceção do problema são explicadas segundo um convencional modelo de comércio eletrónico, representativo do tipo de utilizadores, funcionalidades mais genéricas e requisitos expectáveis neste tipo de negócio. Desde que a Internet se tornou mais acessível ao cidadão comum, em meados do ano 2000, muitas pessoas e empresas começaram a aventurar-se no comércio eletrónico (Organization, 2013). Porquê? Este tipo de negócio traz vantagens que podem ser extremamente benéficas: compra em tempo real; transferência de dinheiro automatizada; mudança de “montra” (dinamização na mostra de produtos feita com a mudança de algumas linhas de código ou apenas com alguns cliques); conhecimento em todo o mundo (aldeia global – qualquer parte do mundo está perto); redução do custo operacional; especificação de um nicho de mercado (modularizar/categorizar produtos por comprador específico); entre outras. 21 Existem inclusive diferentes modelos e implementações de comércio eletrónico, com públicos-alvo e finalidades distintas. Desde os simples portais empresariais, com menor ou maior sofisticação, até aos marketplaces como é o caso da Amazon, eBay, Alibaba, entre outros. Alguns são de vendas diretas, outros de vendas indiretas, mas todos eles têm como finalidade criar um canal de comercialização para os produtos que vão comercializar. O produto, a abrangência comercial, a(s) língua(s) utilizada(s), as formas de pagamento, o grafismo, a logística, a integração com outras soluções (móveis, redes sociais, afins), são apenas alguns aspectos pertinentes na criação de um portal de comércio eletrónico, mas que muito influenciam o seu sucesso. Na impossibilidade de podermos aqui referir detalhes do modelo sobre o qual trabalhamos, utilizaremos como modelo de referência o portal do eBay (com alguns extras), que é bastante conhecido e partilha algumas das características com o modelo utilizado. Trata-se de um marketplace que concentra ofertas de vários vendedores num único sítio, mantendo, no entanto, a individualidade de cada um e que é frequentado por um elevado número de potenciais compradores. É, assim, um canal de comercialização para um mercado de enorme potencial. 1.2 Objetivos O trabalho realizado ao longo deste projeto passou por explorar uma ideia original de comércio eletrónico e concretizar o resultado através de uma implementação, tida sempre como principal objetivo deste projeto. Em termos mais detalhados e, tendo por base o modelo de referência anteriormente apresentado, os objetivos são: implementar um modelo de comércio eletrónico que permita a aquisição de bens/serviços em condições mais favoráveis; criar um canal de comercialização para os vendedores que, pela dimensão mundial e volume de negócio em causa, seja tão ou mais atrativo que outras alternativas de comercialização; Facultar os serviços, preferencialmente, na língua nativa dos utilizadores. A implementação deste modelo de negócio é feita através de um portal cujos utilizadores são vendedores e potenciais compradores. A pesquisa de produtos não requer qualquer vínculo, 22 isto é, pode ser feita por qualquer pessoa não registada. Os procedimentos de negociação e comercialização requerem o registo, quer de quem vende, quer de quem manifesta interesse em comprar (comprador). 1.3 Estrutura do Documento Este documento encontra-se dividido em 5 capítulos: Capítulo 1: Introdução – Onde é feito o enquadramento e apresentados os objetivos principais do projeto. Capítulo 2: Modelo de negócio e principais requisitos – Descrição do modelo de negócio que se pretende criar e dos principais requisitos estabelecidos. Capítulo 3: Arquitetura e tecnologias – Apresentação arquitetónica da solução e das tecnologias utilizadas na sua implementação. Capítulo 4: Implementação – Descrição dos detalhes técnicos de maior relevo. Capítulo 5: Conclusão – Análise autocrítica da execução do projeto, incluindo a análise dos resultados e trabalho futuro. 23 Capítulo 2 2 Modelo de negócio e principais requisitos 2.1 Descrição O modelo de comércio eletrónico utilizado pressupõe dois tipos de atores: os vendedores e potenciais clientes, a que designaremos por “interessados”. O vendedor, ator necessariamente registado e com um certo grau de validação (avaliações efetuadas por compradores anteriores, confirmação dos dados por parte da entidade proprietária do portal, entre outros), coloca os seus produtos no portal para comercialização, identificando e caracterizando o produto e definindo as condições de venda. Estas podem incluir: o preço mínimo de venda, o prazo para a fase negocial, a data de início, o número de unidades disponíveis, formas de pagamento, opções de envio e respetivos custos, entre outros. Os interessados acedem aos produtos pesquisando diretamente no portal. Em alternativa, poderão efetuar um registo e subscrever serviços de notificação que os avisem de quando é que determinados produtos são colocados para licitação. Sendo do interesse dos envolvidos, e estando registados, podem licitar o produto. Ao aceitar as condições definidas pelo vendedor podem propor um preço de aquisição para o produto, desde que seja superior ao maior valor apurado até esse instante. Findo o período de negociação e havendo uma proposta que satisfaça as condições definidas pelo vendedor, o interessado é convertido em comprador, tendo a obrigação e o direito de efetuar a aquisição do produto nas condições negociadas, como demonstra a Figura 1. 1 Figura 1 – Diagrama de atividades Uma vez concluída a negociação, entra-se na fase de pagamento fazendo o Express Checkout através de uma conta Paypal (ou outra solução alternativa). A entidade gestora do site recebe o pagamento, cobra a sua parte e deposita o restante na conta do vendedor. Este trata de remeter o produto para o cliente; paralelamente, é aberta uma fase da avaliação cujo objetivo é classificar compradores e vendedores, no sentido de facultar mais garantias em futuras transações. Assim, o comprador avalia o vendedor e vice-versa. 2.2 Estrutura de dados De forma a ser possível o registo dos dados introduzidos que permitem o funcionamento da aplicação é necessária uma base de dados cujas principais tabelas são: Utilizador, Produto, Língua e Categoria. A tabela Utilizador guarda as informações (nome, morada, e-mail, etc.) referentes a cada utilizador, permitindo também a ligação a outras tabelas como Categoria, Sessão, Língua e Mensagem. Estas tabelas permitem saber, respetivamente, as categorias sobre as quais o utilizador deseja receber notificações, a data da última vez que se autenticou, qual a língua selecionada para lhe ser apresentada a informação e quais as 2 mensagens/notificações a ele dirigidas. Relacionada com esta tabela encontra-se também a tabela Produto. Uma vez que é possível um utilizador participar em mais que uma licitação, é necessária a utilização de uma tabela auxiliar que permita este tipo de multiplicidade (vulgarmente designada como “de muitos para muitos”). Contudo, este não é o único caso em que este tipo de tabelas é utilizado, uma vez que é possível encontrar o tipo de multiplicidade acima falado entre as entidades Produto e Língua. A ligação entre estas tabelas permite que haja uma tradução de duas propriedades (título e descrição) do produto que está em leilão. Figura 2 – Representação do modelo relacional da base de dados 3 Para poder licitar, o utilizador deve, primeiramente, completar as informações no seu perfil. No caso de os campos não estarem devidamente preenchidos é-lhe barrada a possibilidade de adesão às licitações. Estas validações são verificadas através do acesso aos campos presentes na base de dados que dizem respeito ao utilizador em questão, sendo-lhe apresentada a informação de que este necessita de completar devidamente o perfil. De forma que as informações introduzidas (quer seja no processo de completar o perfil, quer seja na introdução de informações noutras páginas) sejam validadas, são utilizados os sistemas de validação do Primefaces juntamente com JSF. O seguinte exemplo, simplificado, ilustra a validação de uma palavra-passe (que deve conter 6 caracteres). <p:password feedback="true" required="true"> <f:validateLength minimum="6"/> </p:password> Caso se verifique que alguma informação não se encontra de acordo com os requisitos necessários para a validação do campo, o utilizador será notificado através de um growl (widget disponibilizado pelo Primefaces). Para poder entrar em contacto de uma outra forma com os utilizadores registados, foi implementado um sistema automático de mensagens, assim como a possibilidade de comunicação via correio eletrónico (através de SMTP). A segurança, sendo um ponto essencial neste projeto, é também preservada através de mecanismos de controlo do tempo da sessão, controlo no acesso a páginas que necessitem de autenticação e em termos de segurança de palavras-passe (protegidas através de sistema de encriptação e codificação). Com este requisito pretende-se aumentar a fiabilidade no sistema e fazer com que os utilizadores se sintam mais seguros. Uma vez que se pretende que o portal sirva os utilizadores numa escala internacional, considera-se como requisito fundamental a disponibilização de mais de uma língua ou, pelo menos, que haja uma língua maioritariamente conhecida dos utilizadores, como o Inglês. Posto isto, foi implementado um sistema que permite aos utilizadores a navegação em mais de uma língua. Note-se que quando estes se autenticam, a língua definida no perfil será automaticamente escolhida para continuar a navegação. Mais detalhes sobre a arquitetura e a sua implementação podem ser encontradas no capítulo 4. 4 Capítulo 3 3 Arquitetura e Tecnologias 3.1 Java Server Faces (JSF) Inserida na plataforma J2EE (Java Platform, Enterprise Edition), a tecnologia JSF, lançada em 2004 pela Sun Microsystems, é uma tecnologia de servidor destinada ao desenvolvimento Web e resulta da evolução e integração dos conceitos e funcionalidades provenientes das tecnologias JSP – Java Server Pages e Servlets. Esta tecnologia baseada em componentes (UI components) permite: representar os componentes e gerir os seus estados; manipular eventos; fazer validações; converter dados; definir a navegação das páginas; disponibilizar vários idiomas; É uma framework orientada a eventos, para aplicações Web e baseada num modelo de camadas (MVC – Model-View-Controller), que promove a separação entre front e back-end das páginas Web. Tal como foi referido anteriormente, esta tecnologia encontra-se no lado do servidor, havendo por parte do cliente um request e, em resposta, uma response. A Figura 3 ilustra esse mesmo processo: depois do request para o Web Container, onde se encontra o servlet, são feitas 5 interações com os EJBs (Enterprise Java Beans) e/ou com bases de dados através do acesso aos Managed Beans. Através destas interações são gerados objetos (UI components, event listeners, validators e converters, que fazem o encapsulamento dos dados) que são enviados como forma de resposta (response) e são executados/mostrados no browser. Figura 3 – Representação do modelo server-side e integração do MVC Fonte: (Corporation, 2004b) Esta tecnologia baseia-se no modelo MVC (Model-View-Controller) que separa o sistema em três componentes: Modelo (Model), Vista (View) e Controlador (Controller). O Model é responsável pela manipulação dos dados da aplicação, por manter o estado da aplicação e por fornecer ao controlador o acesso aos dados. A View é responsável pela interface do utilizador, encaminhando as ações deste para o controlador (Controller). Este último é o responsável pela ligação entre o Model e a View, controlando o “comportamento” da aplicação. Em JSF o controlo é feito através de um servlet1, denominado Faces Servlet, por ficheiros XML2 de configuração e por vários manipuladores de acções e observadores de eventos. O servlet é um controlador que é responsável pela receção e interpretação das solicitações do utilizador, encaminhando-as para a camada Model, e pelo retorno adequado à solicitação. 1 2 6 Classe em Java que permite estender as funcionalidades de um servidor como, por exemplo, adicionar conteúdo dinâmico. Como pode ser visto na Figura 3, estão presentes os ficheiros de configuração web.xml e faces-config.xml. 3.2 eXtensible Hypertext Markup Language (XHTML) A tecnologia JSF é uma framework que tem pontos de extensão como os Managed Beans, os converters, os validators e os UI components. A própria tecnologia View pode ser substituída por uma implementação de ViewHandler alternativa (Hlavats, 2009). A ViewHandler é uma componente infra-estrutural da framework JSF que realiza um importante trabalho durante as fases de Render Response e de Restore View, sendo responsável pela criação, restauro e rendering dos UI components. Na tecnologia JSP3, os ciclos de vida destes componentes diferem dos encontrados na tecnologia JSF. Devido a este facto, o uso de JSF em páginas JSP trazia muitos problemas aos desenvolvedores. Para poder colmatar tais problemas foi desenvolvida uma linguagem de declaração de páginas denominada Facelets (Oracle, 2013). Esta linguagem tem como características: i. O uso de XHTML na criação de páginas; ii. O suporte para a reutilização de código através de templates; iii. Maior rapidez na compilação; iv. Alto desempenho no render dos componentes; v. Validação de Expression Languages (ELs) em tempo de compilação; Em suma, para poder ser possível obter uma maior eficácia e menor esforço, as Facelets são utilizadas sob a forma de XHTML juntamente com JSF no desenvolvimento deste projeto. 3.3 jQuery Biblioteca de JavaScript multi-browser, jQuery permite fazer muitas ações interagindo com HTML e XHTML, especialmente animações e validações. 3 Anterior à tecnologia JSF. Por defeito, trata-se da tecnologia View das versões JSF 1.x. 7 3.4 Asynchronous Javascript and XML (AJAX) Filosofia que permite que páginas pareçam mais interativas para os utilizadores, AJAX permite fazer solicitações assíncronas. Por exemplo, esta filosofia é utilizada para fazer o update de certos elementos, não sendo preciso fazer o reload da página. 3.5 Arquitetura do Sistema Para poder explicar a arquitetura que suporta o projeto desenvolvido, é necessário reincidir na tecnologia JSF e introduzir o ciclo de vida de um request nesta framework. Para um melhor entendimento dos conceitos que se pretende introduzir, observe-se as Figuras 4 e 5 que representam, respetivamente, as várias fases do processamento de um request e a integração destas num servidor. Note-se que um request é invocado quando o utilizador, durante a sua utilização do portal executa uma ação (por exemplo, quando clica num botão). Figura 4 – Ciclo de vida do um request na framework JSF Fonte: (Sacramento, 2013) A cada fase do processamento do request (representada pela cor verde) estão destinadas funções específicas, sendo que nem sempre o tratamento dado ao processamento passa por 8 todas elas. Os phase-listeners são o melhor exemplo disso mesmo, como se poderá verificar mais à frente. Figura 5 – Processamento da UI Component tree na plataforma JSF Fonte: (Corporation, 2004a) Quando um request invocado pela máquina do utilizador chega ao servlet (denominado Faces Servlet) que se encontra no lado do servidor4, é invocada, obedecendo às regras do ficheiro faces-config.xml, a primeira fase do processamento do request (Restore View phase). Nesta fase gera-se a página JSF (ou XHTML), solicitada no request, e é criada (ou restaurada) a UI components tree. São estes components que dão uma forma visual à página. No caso de haver algum component na árvore que requeira um input, esse mesmo component irá copiar o valor que lhe foi atribuído no input para uma string temporária. Este valor será validado, de acordo com as regras de validação definidas na página, na terceira fase deste processo (uma vez ocorrido um erro de validação, o ciclo é remetido, à semelhança do que acontece quando um event listener é declarado, para a Response phase). Nesta terceira fase, os valores armazenados são convertidos para o seu tipo de variável original. Em consequência destas duas fases ocorre uma outra na qual se dá a cópia dos valores agora convertidos para os backing beans (e eventualmente para a base de dados). 4 Neste projeto foi utilizado o Glassfish como servidor para a aplicação. Este servidor desenvolvido para a plataforma Java EE dá suporte aos componentes da mesma plataforma utilizados no desenvolvimento deste projeto. 9 Terminado este processo, o request passa para a Invoke Application phase. É nesta fase que os eventos são processados, sendo propagados para os listeners interessados. Depois deste processo, finalmente é gerada uma resposta gráfica já com todos os components atualizados. Depois das considerações iniciais para o entendimento da arquitetura do projeto, comecemos por enquadrar a mesma com as tecnologias utilizadas e as funcionalidades implementadas. A filosofia AJAX é, por diversas vezes, utilizada neste projeto. A apresentação de mensagens de validação e a verificação da existência de um utilizador com o mesmo nome do utilizador durante o registo (e em tempo real) e respetivo feedback são exemplos da utilização desta filosofia. Também é através desta que é possível fazer separadamente o processamento dos componentes visuais que fazem parte da página. Esses componentes são os chamados UI components, previamente introduzidos e explicados. Quando é executada uma ação que requer este princípio de funcionamento, o request invocado apenas faz o re-render do componente visual específico que se quer modificar, retirando-o da árvore de UI Components, iniciando um novo ciclo de vida (executando as fases necessárias) e fazendo o render no fim do processo. Os pedidos de AJAX permitem assim que se poupe poder de processamento, uma vez que a não utilização desta filosofia iria fazer com que toda a árvore fosse analisada e todos os components nela inseridos processados. Os phase-listeners, falados anteriormente, também podem ser explicados através dos conceitos já introduzidos. Estes poderosos listeners são executados antes do início (e depois do fim) de cada fase. A sua execução tem como retorno dois valores possíveis: renderResponse (que invoca a renderResponse phase) ou responseComplete (que interrompe o ciclo de vida do request). Este listeners, declarados no ficheiro faces-config.xml permitem, como foi referido, que uma fase seja verificada antes da sua execução. Como se pode verificar na secção 4.9, estes elementos podem evitar processamentos desnecessários quando não se encontram condições suficientes para o processamento de um component ou até mesmo de uma fase em concreto. 10 Figura 6 – Arquitetura do Sistema Em suma, tomando em conta a figura anterior e as tecnologias descritas, o sistema baseia-se num modelo server-side, em que há a invocação de requests do lado do utilizador através da sua ação em componentes visuais utilizados nas páginas XHTML (que contêm na sua maioria elementos da tecnologia JSF) e a resposta por parte do servidor aos pedidos feitos (na Figura 7 pode-se verificar algumas das ações que os utilizadores podem executar dentro do portal). Ainda do lado do utilizador há a utilização de tecnologias Web como jQuery e CSS e da filosofia AJAX. Do lado do servidor (Glassfish) encontra-se o servlet que recebe os requests e processa os UI Components, que dão forma visual às páginas Web que o utilizador recebe como resposta. Estes componentes visuais são processados assim como os listeners declarados – isto de acordo com regras definidas nos ficheiros de configuração que apresentam extensão .xml. Dentro deste processamento há a presença de fases que têm, cada uma, objetivos específicos, sendo que nem todas são sempre executadas. Por exemplo, há fases que requerem o input de dados. Caso tal circunstância se verifique, terão que ser feitas validações a esses mesmos inputs e, por conseguinte, o acesso aos beans. Estes, caso necessitem, poderão aceder à base de dados através do uso de uma camada de persistência. No que toca à arquitetura do modelo de negócio, esta baseia-se, como já foi referido, no modelo de negócio presente no eBay, onde os utilizadores interessados em adquirir um produto devem apresentar uma proposta de compra. Contudo, esta não é a única ação disponível no site. 11 Figura 7 – Diagrama de casos de uso Como se pode verificar pela figura anterior, todos os utilizadores, registados ou não, podem pesquisar produtos que estejam em licitação, mas para licitar ou vender algum produto têm que estar autenticados e, como tal, devem previamente efectuar o registo. Depois de de registado e autenticados podem, por exemplo, ter acesso às notificações recebidas, modificar opções do perfil e, principalmente, vender (caso seja vendedor) ou licitar produtos (caso seja comprador). Para melhor compreender este processo, observe-se o diagrama de colaboração presente na Figura 8. Figura 8 – Diagrama de colaboração 12 O procedimento começa com a colocação do produto à venda por parte do vendedor. De seguida, caso assim desejem, os interessados apresentam propostas de licitação. Cada proposta tem que necessariamente superior à anterior. Findo o período definido para a negociação, o sistema verifica qual o utilizador que apresentou a melhor proposta (proposta com o maior valor monetário), notificando-o de que deve proceder ao pagamento. O utilizador que apresentou a melhor proposta torna-se assim o comprador do produto em leilão que, para além de ter que estar registado e autenticado, deve possuir uma conta Paypal através da qual deverá efetuar o pagamento. Uma vez paga a quantia acordada à entidade gestora do site, esta retém a sua cota parte e deposita o restante na conta do vendedor. Este, por sua vez, deve cumprir o seu dever de remeter o produto para o utilizador que o adquiriu. 13 Capítulo 4 4 Implementação 4.1 Introdução Partindo das vantagens e desvantagens de cada tecnologia, foram elaborados modelos para satisfazer as funcionalidades do sistema. Tais funcionalidades são, assim, suportadas por tecnologia que envolve Java Server Faces e muitas das componentes Java associadas a esta tecnologia. Entre estas componentes encontram-se arquivos de extensão .xml, Managed Beans, facades e Enterprise Java Beans (EJBs), que fazem ligação à camada de persistência. Esta camada suporta o sistema e faz com que seja possível guardar dados inseridos, maioritariamente pelos utilizadores do portal. 4.2 Message Bundles – Sistema Multilingue A tecnologia JSF possui mecanismos que facilitam a criação de portais multilingues – disponibilidade de escolha linguística. Esse recurso é possível através das Message Bundles. Estes arquivos de extensão .properties apresentam uma relação <chave,valor> em que a chave é o termo que se encontra à esquerda do “=” (igual) e o valor (palavra ou frase que será mostrada na interface) é tudo o que se encontra à direita deste. Para mostrar a aplicação prática desta mais-valia tomemos o exemplo real utilizado no desenvolvimento deste projeto. Para evitar a invocação em todas as páginas deste recurso, definimos no ficheiro facesconfig.xml a invocação única das message bundles através de: 14 <application> <resource-bundle> <base-name>languages.welcome5</base-name> <var>msg</var> </resource-bundle> </application> No que toca às traduções, dentro de cada ficheiro welcome_xxx.properties – xxx corresponde ao locale – há, como foi dito, uma espécie de mapeamento <chave,valor> representado, por exemplo, por title = Page Title e por title = Título da Página. Nestes exemplos os locales são definidos por en (língua inglesa) e por pt_PT (língua portuguesa), respectivamente. Para poder utilizar os diferentes idiomas é definido nas páginas o locale, através de <f:view locale="#{main_bean.locale}">, em que #{main_bean.locale} corresponde à invocação do método getLocale presente no bean denominado main_bean. Como se pode verificar no excerto de código acima transcrito, é definida uma variável msg. Através dela pode-se invocar a chave presente nos ficheiros de traduções através de #{msg.title}. Sendo assim e tendo <f:view locale="#{main_bean.locale}"> <title>#{msg.title}</title> </f:view> na página a apresentar, teremos os títulos das páginas conforme o locale definido. 4.3 Arquivos de configuração web.xml e faces-config.xml Introduzidos no capítulo 3.1, os ficheiros web.xml e faces-config.xml são extremamente importantes no que consta à navegação entre páginas assim como na definição de regras. A título de exemplo, o ficheiro faces-config.xml permite um “mapeamento” entre uma página e um bean6. Quando uma página referencia um objecto deste tipo (por exemplo quando um botão é clicado e é invocado um método presente num determinado bean), a implementação do JSF instancia o bean através do scope definido. Neste ficheiro também são dadas as instruções no que refere à navegação entre páginas. O excerto de código apresentado de 5 Em que languages é o package e welcome os ficheiros que se apresentam como welcome_en.properties e welcome_pt_PT.properties e que contêm as traduções 15 seguida exemplifica a navegação entre a página de Login.xhtml e a página index.xhtml. Neste caso, <from-outcome>index</from-outcome> é o resultado de uma ação num botão que invoca um método dentro de um Managed Bean. <navigation-rule> <from-view-id> /Login.xhtml </from-view-id> <navigation-case> <from-outcome>index</from-outcome> <to-view-id>/index.xhtml</to-view-id> <redirect/> </navigation-case> </navigation-rule> 4.4 Managed Bean Os Managed Beans, ou simplesmente beans, são ficheiros que albergam os métodos que permitem que os UI components apresentem propriedades dinâmicas numa página. Por exemplo, quando um utilizador clica num botão são submetidos valores para o bean. Este chama os métodos necessários para produzir o resultado desejado. Para obter o resultado esperado, estes ficheiros recorrem, muitas vezes, a outro tipo de ficheiros que fazem uma ponte com a camada de persistência: os facades (que recorrem aos EJBs). Pode-se considerar, assim, que os beans são canais entre a interface gráfica e o Modelo da aplicação. Cada bean tem associado um scope que define o seu “tempo de vida”. Conforme o scope, os estados das variáveis são ou não guardados. O exemplo a seguir demonstra o scope do bean que permite a inserção de um novo produto para venda. @ManagedBean(name = "postbean") @ViewScoped public class postbean implements Serializable {…} Como se pode verificar, este bean apresenta um scope do tipo view, o que significa que os valores presentes nas variáveis que se encontram neste bean irão permanecer até que haja uma navegação para outra página ou caso a navegação na página que requer a utilização deste bean seja encerrada. 6 Ou Managed Bean. 16 Neste projeto também são utilizados scopes do tipo request e do tipo application. Este último tipo de scope é utilizado, por exemplo, para verificar o fim do tempo das licitações. O tipo ApplicationScoped é utilizado neste caso uma vez que desde o início da aplicação até ao fim desta (mesmo que seja um processo interminável) é necessário ter um processo que se repita (este ficheiro contém um TimerTask) e necessita de manter os tempos da última execução. 4.5 Facades Os facades (ou façades) disponibilizam uma interface simplificada para aceder a uma funcionalidade, diminuindo o número de pedidos de acesso. Neste projeto, estes ficheiros desempenham o importante papel de aceder às EJB Entities que contêm os atributos de cada tabela presente na base de dados. É nestes ficheiros que se acede à Unidade de Persistência através da criação de queries em JPQL (Java Persistence Query Language) que fazem a ligação à base de dados através de um Entity Manager. Note-se que para cada Entity há um facade correspondente. Assim, cada facade acede apenas e só à Entity que lhe corresponde. 4.6 Enterprise Java Beans Entities Cada entidade EJB representa uma tabela na base de dados. Cada atributo é representado como uma coluna e cada instância é uma linha da tabela. É aqui que todas as tabelas se relacionam para formar o diagrama E/R. 4.7 Unidade de Persistência Uma unidade de persistência faz com que seja possível a ligação a uma base de dados. Sem uma persistência não seria possível guardar os dados necessários para o funcionamento da aplicação. No desenvolvimento deste projeto foi utilizada a JPA (Java Persistence API), que gere as Entidades e realiza o mapeamento destas em objetos (object/relational mapping ORM). É também através desta API que os facades realizam as queries (em JPQL), havendo um retorno do resultado conforme a query. 17 Quanto à implementação da base de dados foi utilizado o SGBD (Sistema de Gestão de Bases de Dados) MySQL. 4.8 ServletContextListener Um ServletContextListener (ou simplesmente listener) é uma interface que se encontra à espera da ocorrência de um evento (Oracle, 2011). Quando esse evento se proporciona, as ações envolvidas dentro da interface são invocadas. Neste projeto os listeners declarados iniciam com a aplicação. Com foi referido no capítulo 2.1, quando termina o prazo de adesão à licitação, o estado desta é verificado. Isto acontece devido a um listener que é conjugado com um TimerTask, o que permite que em intervalos fixos de tempo (desde que iniciou) um determinado método seja executado. Um outro listener é utilizado para eliminar registos não confirmados de utilizadores na base de dados7. Cada listener é declarado no ficheiro web.xml com a sintaxe abaixo demonstrada. <listener> <listener-class> nome_do_package.nome_do_ficheiro </listener-class> </listener> 4.9 Phase-listeners Os phase-listeners são um pouco diferentes dos listeners anteriormente apresentados, uma vez que permitem que os componentes que fazem parte da página sejam notificados no início e no fim do processamento para cada fase do request (Oracle, 2007). Uma vez que neste projeto é possível fazer login, algumas páginas necessitam de ter informação sobre os utilizadores. O barramento ao acesso a estas páginas, quando o utilizador não se encontra autenticado, é feito através de um phase-listener declarado no ficheiro facesconfig.xml. O tempo da sessão é controlado através da conjugação de um session-timeout 7 Para melhor contextualização consultar o capítulo 4.15. 18 (declarado no ficheiro web.xml) com um phase-listener. Após passar o tempo definido no session-timeout (fixado em 30 minutos), o utilizador é redirecionado para a página de login. No que consta ao phase-listener primeiramente enumerado, este verifica se o utilizador tenta aceder a alguma das páginas listadas e para as quais é necessária a autenticação, dando um feedback ao componente que executou o pedido. Se esta condição se verificar e caso o utilizador não se encontre autenticado, este é redireccionado para a página de login. O seguinte excerto de código do ficheiro faces-config.xml demonstra a declaração de um phaselistener que neste caso remete para invocação do ficheiro isLoggedInToAccessPage.java dentro do package denominado security. <lifecycle> <phase-listener> security.isLoggedInToAccessPage </phase-listener> </redirect> </lifecycle> 4.10 Exception Handler Factory Na eventualidade da ocorrência de erros não esperados, apesar da prevenção do acontecimento destes e do respetivo tratamento, o utilizador será redirecionado para a página Error.xhtml, onde será informado da ocorrência de um erro. A declaração do ficheiro que processa as exceções encontra-se no ficheiro de configuração faces-config.xml, como se pode verificar de seguida. <factory> <exception-handler-factory> security.CustomExceptionHandlerFactory </exception-handler-factory> </lifecycle> 4.11 Cookies Sendo a publicidade aos produtos parte integrante deste projeto, a presença de cookies faz com que haja uma maior, mas respeitável, proximidade com os utilizadores. Assim, os 19 cookies criados permitem saber quais os potenciais pontos de interesse do utilizador, guardando informações sobre os produtos que visita. Com isto pretende-se que os utilizadores se sintam mais próximos das oportunidades de negócio existentes, sendo-lhes apresentadas propostas para licitação de produtos relacionados com a categoria dos produtos já visitados. Refira-se ainda que este mecanismo de utilização de cookies também é utilizado para guardar as informações de autenticação no portal e é aceite quando os utilizadores visitam o site pela primeira vez, sendo informados da utilização destes. 4.12 Express Checkout – Paypal NVP API Para poder efetuar as transações monetárias, o utilizador deve fazer o Express Checkout através de uma conta Paypal. De modo a implementar esta funcionalidade recorreu-se à API NVP (Name-Value Pair), disponibilizada pela própria empresa. Nesta API é necessário especificar o método que se pretende invocar (neste caso os métodos invocados denominam-se “SetExpressCheckout”, “DoExpressCheckoutPayment” e “TransactionSearch”) assim como outros parâmetros específicos para cada transação. Note-se que esta opção de pagamento está disponível apenas para contas virtuais através da utilização da plataforma Sandbox disponibilizada pela própria empresa. A implementação do pagamento “real” será efetuada numa fase posterior. Os métodos acima mencionados permitem o acesso ao Paypal mas nem todos funcionam da mesma forma, ou seja, nem todos têm os mesmos parâmetros e/ou o mesmo tipo de retorno. Por exemplo, todos os métodos mencionados requerem os dados de autenticação da conta Paypal. Uma vez que este projeto, numa primeira fase experimental, utiliza a plataforma Sandbox, os dados de autenticação requeridos contêm como parâmetros o nome do utilizador, a palavra-passe e a assinatura. Como foi referido, nem todos os métodos comunicam com a plataforma Paypal da mesma forma. Por exemplo, o método SetExpressCheckout necessita de parâmetros como o preço total, o URL de retorno (URL para o qual o comprador deve ser redirecionado quando este pretende efetuar o pagamento através da plataforma Paypal) e o URL de cancelamento (URL para qual o comprador deve ser redirecionado caso este não deseje pagar com Paypal). Ao 20 aceitar a primeira opção, o utilizador confirma a compra e é redirecionado para a página afterCheckout.xhtml. Aqui, de forma automática é invocado o método DoExpressCheckoutPayment que finaliza o pagamento. Este método requer novos parâmetros denominados “paymentAction”, “token” e “payerId”. Estes dois últimos parâmetros são recebidos quando o utilizador aceita pagar através do método Paypal, sendo recebidos através do URL. Depois de invocados estes dois métodos, é necessário confirmar que a transação foi realmente efetuada. Para isso é necessário recorrer ao método TransactionSearch. De forma a poder restringir a pesquisa de transações é possível especificar vários parâmetros 8. Através da resposta em forma de par chave-valor (ou, em conformidade com a API, em forma de NVP – Name-Value Pair) é possível verificar o valor referente ao campo “PAYMENTINFO_0_ACK”, sabendo-se então se o pagamento foi efetivamente efetuado. Este processo de troca de informações entre plataformas pode-se ser verificado através do digrama de sequência presente na Figura 9. Figura 9 – Diagrama de sequência NVP API - Paypal 8 O parâmetro utilizado para restringir a pesquisa foi a data de início. Este parâmetro permite a pesquisa de transações desde a data indicada até à atual. 21 Quanto aos dados propriamente ditos, são processados e transferidos entre plataformas (ePublicty ↔ Paypal) através da abertura de uma HttpURLConnection e da inserção dos bytes correspondentes à string que contém todos os parâmetros necessários para a invocação dos métodos. A resposta por parte da plataforma Paypal é dada através de tokens. Estes são tratados (separados), dando origem a uma HashMap<String,String> – par chave-valor, tal como foi anteriormente referido. Acedendo a este tipo de mapa pode-se saber os valores que acompanham as respetivas chaves. 4.13 Google Translate API Quando um utilizador cria uma licitação para um produto, os campos “título” e “descrição” são preenchidos de acordo com a sua língua nativa. Dado que este projeto apresenta um sistema multilingue e todos os utilizadores têm a possibilidade de pesquisar intenções de compra na sua própria língua, é necessário traduzir e compatibilizar os campos acima referidos. Este processó é efetuado com recurso à API do Google Translator. Esta API, lançada em 2011 pela Google, permite a tradução de palavras de uma língua para outra. Para isto é necessário verificar qual a língua utilizada pelo utilizador e quais as outras línguas disponíveis (neste caso encontram-se disponíveis apenas a língua portuguesa e inglesa). Por último é necessário criar uma instância do tradutor e invocar o método translate que este disponibiliza. Por exemplo, caso o utilizador esteja a utilizar a língua portuguesa, para ser possível traduzir o título e a descrição do produto para outras línguas invoca-se o método referido. O seguinte excerto de código mostra esse procedimento: Translator translate = Translator.getInstance(); String traducaoPtEn = translate.translate(titulo, Language.PORTUGUESE, Language.ENGLISH); Os campos traduzidos são colocados na tabela que faz a ligação entre a licitação e as línguas disponíveis. Note-se que estas traduções são executadas automaticamente, não havendo supervisionamento da fiabilidade da tradução. Posto isto, as traduções não serão totalmente corretas em alguns casos. De forma a minorar os erros de tradução, como trabalho futuro espera-se implementar 22 um sistema que permita ao utilizador que insere estas informações a edição das próprias traduções, caso assim o deseje. 4.14 Sistema automático de notificação Para poder ser possível comunicar com o utilizador, foi implementado um sistema de mensagens. Este sistema permite que o utilizador seja notificado quando: Novas propostas na sua área de interesse são criadas; As licitações terminam (recebendo simplesmente a informação de término ou um link para proceder ao pagamento); De forma a poder alertar o utilizador da receção de novas notificações enquanto este se encontra autenticado, é disponibilizado um notificador (como o presente na rede social Facebook) com o número de notificações não visualizadas. Este notificador vem simplificar a visualização das notificações, facilitando a navegação ao utilizador. Note-se ainda que este notificador é atualizado de 3 em 3 segundos através da utilização do componente <p:poll /> disponibilizado pelo Primefaces. 4.15 Serviço de E-mail / SMTP Quando um utilizador se regista, é-lhe enviado um e-mail para poder confirmar a sua conta. A confirmação deve ocorrer dentro de 15 minutos. Caso esta condição não se verifique, um listener irá remover o registo da base de dados. O serviço de e-mail é também utilizado quando o utilizador pretende recuperar a palavrapasse. Neste caso, um novo e-mail é enviado juntamente com novas credenciais. Para permitir o envio de e-mails é utilizado o protocolo SMTP que acede à conta de e-mail alusiva a este projeto ([email protected]). 23 4.16 Encriptação, Codificação e Cifragem De forma a poder assegurar a segurança dos dados dos utilizadores, quando estes se registam/modificam a palavra-passe, esta é criptografada e codificada9. Outros elementos presentes no url (i.e. id dos produtos) e nos cookies (palavra-passe e nome do utilizador) também são cifrados e codificados para que haja uma maior segurança para o sistema. 4.17 Managed Properties As managed properties permitem a injeção de dependências de um managed bean noutro. Estas propriedades são utilizadas com alguma frequência ao longo deste projeto. Por exemplo, quando pretende ler uma mensagem, é passado para o URL um identificador da mensagem selecionada. Através das managed properties é possível encontrar diretamente, dentro do managed bean, o identificador referente a essa mensagem. Para melhor compreender este processo tome-se como referência as explicações que seguem e que se encontram acompanhadas de excertos de código. Antes de mais, o utilizador seleciona, dentro da tabela onde se encontram as mensagens, qual a que deseja ler. Este evento de seleção faz com que seja invocado o método redirectToItemPage, presente no bean messagesInfo. <p:ajax event="rowSelect" listener="#{messagesInfo.redirectToItemPage}"/> Este método recebe um SelectEvent (propriedade do Primefaces), podendo-se saber qual a mensagem selecionada. Essa informação é essencial para poder identificar a mensagem de forma inequívoca. De seguida, através de NavigationHandler nh = FacesContext.getCurrentInstance().getApplication().getNavigationHandler(); nh.handleNavigation(facesContext, null, "/readMessage.xhtml?message=" + identificadorDaMensagem + "faces-redirect=true"); 9 Por razões de segurança, os esquemas de encriptação e de codificação não são revelados. 24 é passado para o URL a propriedade message seguida de um sinal de “=” (igual) e do identificador. É também através deste excerto de código que o utilizador é redirecionado para a página readMessage.xhtml. É nesta página que é apresentado o título e corpo da mensagem selecionada através do acesso a um bean. É nesse bean que se encontra declarada a managed property que permite identificar a mensagem. @ManagedProperty("#{param.message}") private String message; Esta declaração permite o acesso direto ao campo message do URL, sendo apenas necessário aceder à variável message presente no bean para apresentar os campos que se pretende. 4.18 Omnifaces Esta biblioteca tem como objetivo facilitar a vida ao programador, focando-se em utilidades utilizadas no dia-a-dia no JSF (JDevelopment, 2005). Neste projeto, esta poderosa biblioteca é utilizada para fazer a conversões em menus e para incluir os parâmetros de request presentes no URL, uma vez que são utilizadas managed properties. Para poder incluir estes parâmetros, (disponibilizada dentro do form - <o:form />) a opção includeRequestParams tem de estar como verdadeira (includeRequestParams="true"). Esta opção permite que os valores que se encontram no URL não se percam. Para tornar mais concreta a utilização desta propriedade tomemos um exemplo de um utilizador que não esteja autenticado. Caso este tente aceder a uma página que requer autenticação, aquele é redirecionado para a página de login, “guardando-se” a página que tentou aceder no URL. Quando o utilizador submete as informações para se autenticar, o form é submetido e as informações que se encontram no URL mantidas, sendo possível utilizá-las para redirecionar o utilizador para a página que tentava aceder. 25 4.19 Primefaces Primefaces é, à semelhança da Omnifaces, uma biblioteca dedicada ao JSF mas que apresenta muitas mais vantagens. Suportada inteiramente a partir da versão 2.0 do JSF, esta biblioteca já referida várias vezes neste documento, apresenta grandes vantagens: É uma biblioteca orientada ao component; Apresenta ela própria grande variedade de components. A integração total com jQuery (devido à sua base em AJAX); Esta foi a biblioteca mais utilizada neste projeto, sendo que foram utilizados os mais diversos components como os polls, growls, dialogs, tabelas (dataTables), campos de inputText, botões para navegação/submissão de forms, utilização de listeners, etc. em páginas todas desenvolvidas. Uma vez que se trata de uma biblioteca orientada ao component, a utilização da Pimefaces juntamente com JSF permitiu em muitas ocasiões a validação de inputs, poupando assim trabalho e permitindo a rápida integração com outros components como por exemplo os growls, que permitem a apresentação de notificações, por exemplo, quando as regras de validação dos campos/components não são obedecidas. 26 Capítulo 5 5 Conclusão 5.1 Análise de resultados A utilização e, sobretudo, a aprendizagem da tecnologia JSF, que apresenta uma curva de aprendizagem extremamente penosa, fez com que a produtividade não fosse o que se esperava. Mesmo numa fase mais avançada foram encontradas novas formas de resolver problemas. Numa análise ao portal e tudo o que o envolve, sendo esta a base deste projeto, pensamos que, apesar das limitações, se encontra agradável em termos de visualização e navegação para os utilizadores. Também é com grande agrado que podemos dizer que foram alcançados e até superados muitos dos objetivos propostos no início do desenvolvimento deste projeto. Em termos de objetivos alcançados e superados encontra-se: O próprio portal, pela navegação simples que permite uma fácil adaptação e pela sua compatibilidade em termos de browsers. O core (parte fulcral) do sistema estar implementado e a funcionar corretamente. A quantidade de funcionalidades implementadas (sistema de mensagens/notificações, serviço de comunicação por e-mail, upload de imagens dos produtos, sistema multilingue, processos automáticos de verificação como a validação de inputs, utilização de listeners conjugados com timerTasks, implementação de sessão do utilizador e controlo desta, utilização de ficheiros de 27 configuração como faces-config.xml e web.xml com regras de navegação, implementação de sistemas de segurança, etc.). A utilização de bibliotecas como o Primefaces, Omnifaces e jQuery. A utilização de acessórios externos ao mundo Java – utilização das APIs disponibilizadas pelas companhias Google e Paypal. A utilização de cookies para poder dar poder comercial aos atores envolvidos neste processo. A aprendizagem de novas tecnologias e de novas formas de programar. No que diz respeito à estrutura interna (em termos de processo que permite a navegação e processamento de informação), o projeto encontra-se dividido em módulos (pastas) que permitem maior simplicidade e facilidade de acesso. 5.2 Análise autocrítica Como foi referido no ponto anterior, foi investido muito tempo na aprendizagem da tecnologia JSF, que pela sua complexidade tornou o projeto mais demorado e (muito) mais complexo. Devido ao desconhecimento do JSF, tomaram-se opções de implementação à medida que íamos visualizando exemplos e experimentando soluções. Face a isto, algumas das soluções implementadas podem tornar-se imprecisas ou, pelo menos, não uniformes, como seria desejável. Uma vez que este projeto se trata de um portal dirigido para pessoas de todo o mundo, uma das mais-valias é, sem dúvida, a disponibilização dos conteúdos em várias línguas10 e de forma automatizada. Este é mais um ponto favorável do projeto, possibilitando a abrangência de mais pessoas, como é o objetivo. Um ponto que podíamos ter melhorado é a apresentação das páginas, porém, o curso do qual fazemos parte e o projeto em questão não se dirige para o design. Estava prevista a implementação de outras funcionalidades mas, pelos factos já referidos, o tempo não foi suficiente para as tornar “palpáveis”. 10 Neste momento disponível em língua portuguesa e inglesa. 28 5.3 Trabalhos futuros O projeto entregue não é nem será nunca uma versão definitiva, não só pelo facto de no futuro poder/ter de ser modificado mas também pelo facto de ser necessária a implementação de outras funcionalidades. Estas funcionalidades passariam por: Implementar subcategorias – apesar de na base de dados ser possível uma categoria conter mais que uma subcategoria, não é possível neste momento a escolha destas. Com a implementação desta funcionalidade pretende-se especificar ainda mais a área escolhida, quer na submissão da licitação, quer na escolha da área de preferência na qual se pretende ter mais atividade. Feedback – mecanismo que, como foi dito, deverá ser implementado e no qual as partes envolvidas avaliam as contra-partes, criando assim um rating, quer para os compradores, quer para os vendedores. Mecanismo este, que permite aos intervenientes, em futuras negociações, aferir o grau de confiança da contra-parte. Minimiza-se assim o risco de fraude e maximiza-se a probabilidade do negócio ser efectuado com sucesso e de agrada para todos Sistema de RSS – Este serviço é uma alternativa ao e-mail, para facultar informações sobre produtos e licitações de forma mais rápida e eficaz. Sistema de traduções mais eficaz – o projeto tem uma capacidade de tradução da descrição e título dos produtos de Português para Inglês e vice-versa através da biblioteca gtranslateAPI, fornecida pela Google. Através deste sistema, é possível guardar na base de dados o título e a descrição introduzida, porém, este processo poderá sofrer alterações, fazendo-se as traduções online no momento da abertura da página. Este sistema de tradução também deverá ser melhorado, devendo permitir ao utilizador que insere a informação sobre os produtos, modificar as próprias traduções geradas. Integração mais completa da API disponibilizada pelo Paypal – neste momento é possível fazer pagamento através da Sandbox disponibilizada e também de “forma real”, contudo, este processo terá de ser mais completo. 29 Maior utilização de cookies – para um melhor conhecimento do utilizador e das suas opções de navegação; Condições de transação, transporte e entrega mais favoráveis – num mundo de competição quem oferece mais facilidades e mais comodidade é quem leva a melhor. No futuro pretende-se fazer parcerias negociais, no sentido de rentabilizar recursos e disponibilizar mais alternativas para todas as partes envolvidas. 30 Referências bibliográficas Corporation, I. (2004a). Concepts: Web Application Frameworks. from http://www.acis.org.co/fileadmin/Curso_Memorias/Curso_CMMI_Sep06/Modulo%202%20%20Product%20Engineering%20/RUP%20Overview/application%20developer/process/workflow/impl emen/co_webappframe.htm Corporation, I. (2004b). IBM Education Assistance - JavaServer Faces Architecture. from http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.rad_v6/rad/6.0 /JSF/WASv6_JSF_Details/player.html eMarketer. (2013). Ecommerce Sales Topped $1 Trillion for First Time in 2012. from http://www.emarketer.com/Article/Ecommerce-Sales-Topped-1-Trillion-First-Time-2012/1009649 Hlavats, I. (2009). JSF 1.2 Components: Develop Advanced Ajax-enabled JSF Applications: Packt Publishing Ltd. JDevelopment. (2005). Omnifaces - JDevelopment. from http://jdevelopment.nl/open-source/omnifaces/ Oracle. (2007). Interface PhaseListener. http://docs.oracle.com/javaee/5/api/javax/faces/event/PhaseListener.html from Oracle. (2011). Interface ServletContextListener. http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html from Oracle. (2013). What is Facelets The http://docs.oracle.com/javaee/6/tutorial/doc/gijtu.html Java EE 6 Tutorial. from Organization, W. T. (2013). e-Commerce in Developing Countries. In W. T. Organization (Ed.), (pp. 2). Sacramento, W. M. (2013). Manipulando Eventos em JavaServer Faces – Parte http://www.devmedia.com.br/manipulando-eventos-em-javaserver-faces-parte-i/6426 I. from 31
Documentos relacionados
TCC Fernando Matos - Sistemas de Informação
FIGURA 45: Botão Enviar ...................................................................................................... 62
Leia mais