Um Sistema Web para Gerenciamento de Assistência Técnica com Suporte a Smartphones 1 Luiz Guilherme Bon Ami Teixeira , Edson A. Oliveira Junior 2 Resumo. Sistemas de informação são ferramentas fundamentais para automatizar e proporcionar maior agilidade nos processos de uma organização. Em alguns casos é necessário que as informações possam ser acessadas e gerenciadas remotamente por meio de navegadores Web ou dispositivos móveis. Portanto, é fundamental a existência de sistemas que permitam a interação da Web com tecnologias móveis como, por exemplo, no ramo de assistência técnica. Assim, este artigo apresenta o desenvolvimento de um sistema Web para o gerenciamento de solicitações de assistência técnica referente a computadores e peças relacionadas. O sistema foi desenvolvido para a Web usando a tecnologia Java EE 6 e a plataforma Android que proporciona uma interação com tal sistema por meio de um smartphone. Palavras-chave: Android, Aplicação Mobile, Assistência Técnica, Chamados, Java, Sistema Web. Abstract. Keywords: The use of information systems is a fundamental tool to automate and provide greater agility in an organization processes. It is usually necessary that the information can be accessed and managed remotely through web browsers or mobile devices. Therefore, it is essential to have systems that allow interaction between Web technologies and mobile as, for instance, in the field of technical assistance. Thus, this paper presents the development of a Web system for managing repair services for computers and related parts. The system was developed for the Web by using the Java EE 6 platform and Android for providing one interaction with such a system via a smartphone. Keywords: Android, Java, Mobile Application, Repair Service, Technical Assistance, Web System. 1. Introdução Um dos principais desafios da empresa Click Informática situada em Francisco Alves – PR é gerenciar a demanda de solicitações de assistência técnica referente a 1 Aluno do curso de especialização em Desenvolvimento de Sistemas para Web – Universidade Estadual de Maringá (UEM) - Av. Colombo, 5790 – Bloco C56 – Maringá – PR – Brasil – [email protected] 2 Departamento de Informática – Universidade Estadual de Maringá (UEM) - Av. Colombo, 5790 – Bloco C56 – Maringá – PR – Brasil - [email protected] 1 computadores, com qualidade e no menor tempo possível. Visto que a empresa mesmo adotando certas tecnologias não as utiliza para esse fim, atualmente adota processos manuais e obsoletos. Com isso, muitos dos registros das solicitações acabam sendo esquecidos e não atendidos, provocando demora e insatisfação dos clientes. A empresa não possui nenhum sistema para tal gerenciamento e não disponibiliza para os clientes nenhum meio para acompanhar em que situação encontra-se a solicitação realizada. Nesse caso é importante que exista uma interação entre a empresa e seus clientes por meio de um sistema, por meio do qual que o cliente pode acompanhar o andamento da solicitação realizada podendo, assim, saber em que o momento foi concluído o serviço contratado. Além disso, o cliente não precisará efetuar ligações e nem se deslocar até a empresa para saber como está o andamento do serviço solicitado. Este artigo apresenta um sistema Web que tem como finalidade atender às necessidades da empresa, centralizando e gerenciando as solicitações de assistência técnica. Uma aplicação para smartphones também foi desenvolvida para permitir ao cliente acompanhar suas solicitações. Este artigo está organizado da seguinte forma: a Seção 2 apresenta as tecnologias adotadas para o desenvolvimento do sistema proposto; na Seção 3 é apresentado o sistema Web desenvolvido para gerenciar solicitações de assistência técnica, a aplicação mobile e as suas respectivas arquiteturas; a Seção 4 apresenta as lições aprendidas e, a Seção 5 apresenta as conclusões e direções para trabalhos futuros. 2. Tecnologias Adotadas Esta seção apresenta os conceitos fundamentais sobre as tecnologias utilizadas no desenvolvimento do sistema proposto. 2.1. Java Server Faces (JSF) Java Server Faces (JSF) [1] é uma especificação que foi definida por meio do Java Community Process (JCP) [2], uma entidade que tem como objetivo especificar a evolução da linguagem Java de acordo com o interesse do mercado e não apenas da empresa que detém a sua patente. O JSF é um framework de componentes para desenvolvimento Web em Java [3]. Sua arquitetura é baseada no padrão MVC (Model-View-Controller), onde a aplicação é dividida em três camadas: modelo, visão e controlador. O modelo é a camada responsável por fornecer ao controlador o acesso aos dados e representar os objetos de negócio. A Visão é responsável pela interface gráfica com o usuário e controla como os dados são apresentados na tela. Além disso, a visão tem a função de encaminhar as ações do usuário para o controlador. O controlador tem a responsabilidade de realizar a ligação entre o modelo e a visão: interpretam as ações recebidas pela camada de visão, traduz em uma operação para o modelo e por fim retorna uma visualização referente à solicitação [5]. O controle do JSF é realizado por meio de um Servlet chamado Faces Servlet, por um conjunto de manipuladores de ações, observadores de eventos e por arquivos de configuração em XML (eXtensible Markup Language). O Faces Servlet é a parte responsável por receber todas as requisições realizadas pelos usuários e redirecioná-las para o modelo que, então, retorna uma resposta. Os manipuladores de eventos recebem os dados da camada de visão, acessam o modelo e retornam dados utilizando o Faces 2 Servlet. Os arquivos de configuração são responsáveis pelo mapeamento das ações e pela definição das regras de navegação [5]. A camada de visualização do JSF é composta por uma hierarquia de componente onde é possível unir os componentes parar formar as interfaces. Os principais componentes são: formulários, campos de texto, links, botões, painéis, tabelas de dados e campos de senha [4]. Uma das vantagens de JSF é a possibilidade de empresas investirem no desenvolvimento de componentes para tal framework. Esses componentes são recursos adicionais aos padrões definidos pela especificação. Algumas bibliotecas de componentes mais populares são: RichFaces da JBoss, ICEFaces da ICESoft e PrimeFaces [3]. 2.2. O Container Tomcat O Tomcat [6] é um container Web baseado em Java. Foi desenvolvido em código aberto seguindo o projeto Apache Jakarta [7]. Contudo, está sendo mantido como um projeto separado da Apache [8] onde é apoiado e aprimorado por um grupo de desenvolvedores voluntários da JCP. O Tomcat suporta a execução de tecnologias como Java Servlet [9] e Java Server Pages (JSP) [10]. O Tomcat é estável e pode ser utilizado mesmo em um ambiente em produção. Também fornece suporte à tecnologias de apoio relacionadas como: Realms e segurança, JNDI Resources e JDBC Data Sources [11]. 2.3. Hibernate O Hibernate [12] é uma das soluções de Mapeamento Objeto-Relacional (Object Relational Mapping - ORM) existentes no mercado. Pertencente ao grupo JBoss [14], é um framework de código aberto apoiado pela especificação Java Persistence API (JPA) [15]. O Hibernate facilita o desenvolvimento de aplicações que realizam consultas a bancos de dados, evitando o uso de código Structured Query Language (SQL), permitindo o uso de um código SQL-like, chamado Object Query Language (OQL) [13]. A utilização do Hibernate faz com que o programador não se preocupe tanto com as entidades do banco de dados e atente mais para o modelo de objeto e seus comportamentos. O Hibernate também evita que sejam escritos códigos repetidos que tem a mesma funcionalidade, por exemplo, de realizar operações como “inserts”, “selects”, “updates” e “deletes” em um banco de dados. Além disso, é possível definir buscas complexas em objetos [16]. A configuração do Hibernate é feita com um arquivo XML, geralmente com o nome hibernate.cfg.xml. Nesse arquivo é possível definir qual a configuração do banco de dados a ser utilizada e as suas propriedades, tais como, usuário, senha e ativação da opção para que sejam criadas as entidades do banco de dados automaticamente. Além disso, existe a opção de depuração, como apresentar o código OQL que está gerando. O Hibernate permite usar um sistema de cache de informações, aumentando assim o desempenho das aplicações [16]. 3 2.4 MySQL MySQL [17] é um Sistema Gerenciador de Bancos de Dados (SGBD) relacional que utiliza a linguagem padrão SQL. O MySQL é um SGBD já consolidado sendo um dos mais populares SGBDs com código-fonte aberto [18]. O MySQL á uma opção interessante, pois mesmo possuindo uma tecnologia complexa de um banco de dados, seu custo não é elevado. Atualmente, é executado em mais de 20 plataformas incluindo Linux, Windows, Mac Os e IBM, oferecendo uma grande flexibilidade [18]. Destaca-se por suas características de desempenho, escalabilidade e confiabilidade, fazendo com que seja adotado por departamentos de Tecnologia da Informação (TI), desenvolvedores Web e fornecedores de pacotes de softwares [19]. Atualmente, o MySQL é utilizado por empresas renomadas, dentre as quais: a Google, Facebook, Adobe, Yahoo e NASA [18]. 2.5 Spring-Security O Spring-Security [20] é um framework de controle de acesso a dados, facilmente configurável, desenvolvido em Java e de código aberto que visa facilitar o desenvolvimento em Java Enterprise Edition (EE) ao tratar segurança. Esse framework permite as suas configurações em um único arquivo XML, dispensando configurações do container Web utilizado, disponibilizando a aplicação desenvolvida em um arquivo Web Archive (WAR) com suas próprias configurações [21]. O Spring-Security utiliza roles (papéis), para definir a segurança. Assim, a aplicação não precisa de métodos específicos para realizar a autenticação ou autorização do usuário, sendo configurado por meio de arquivo XML. A configuração do framework não é complexa, pois simplesmente são declarados quais são os roles envolvidos. Por exemplo, em uma aplicação pode existir o ROLE_ADMINISTRADOR e o ROLE_USUARIO. Com base nisso, pode-se definir quais os recursos que serão protegidos e quais roles podem acessar cada recurso. Além disso, declara-se como a autenticação será feita [21]. A Figura 1 apresenta um exemplo de um arquivo XML de configuração do Spring-Security. 4 Figura 1: Arquivo de configuração do spring security. A seguir são descritas as funcionalidades das principais marcações utilizadas no arquivo de configuração apresentado pela Figura 1 [3]: • <http> - sua função é realizar o agrupamento das configurações referentes ao contexto Web do sistema; • <intercept-url> - define quais páginas ou diretórios serão seguros, onde o atributo pattern indica a URL a ser protegida e o atributo access os nomes das permissões que terão acesso ao recurso; • <form-login> - configura o funcionamento da página de login. Seus atributos têm as seguintes funcionalidades: o definir a URL da página de login do sistema; o ativar o redirecionamento para página de inicial caso o usuário não esteja logado; o definir a URL a ser apresentada após o login; e o definir a URL caso o login não seja realizado com sucesso. • <logout> - habilita o recurso de logout para o sistema; • <remember-me> - habilita o recurso de login automático; e • <autentication-provider> - indica ao Spring Security, quais são os usuários válidos do sistema e suas respectivas permissões. Em conjunto pode ser utilizado o elemento <jdbc-user-service> que permite declarar instruções SQLs que fornecem os dados que o Spring necessita, para realizar autenticação. 5 2.6 RESTEasy Com a grande utilização de Web Services com a arquitetura RESTFull [22], foi criada a especificação JAX-RS [23], que tem como foco o uso de classes Java e anotações, para que o desenvolvedor não precise se preocupar com detalhes específicos da plataforma. Um exemplo disso é a implementação dos métodos GET e POST da classe abstrata HttpServlet. A especificação oferece uma forma interessante para a criação de serviços baseados no modelo arquitetural da Web. As principais implementações desta API são: o Jersey que é uma implementação de referência, o JBoss RESTEasy e o Apache CXF [24]. O RESTEasy [25] é a implementação da especificação JSR-311 [26]. Com ele é possível desenvolver serviços RESTFull.,pois permite o mapeamento de requisições HTTP por meio das anotações do JAX-RS. Geralmente, as implementações JAX-RS oferecem um diferencial com relação à especificação [24]. O RESTEasy tem suporte à diversos formatos utilizados na Web, permitindo variar a representação dos recursos disponibilizados pelo web service. Em alguns casos, é necessário escolher o provedor de um determinado formato, por exemplo, entre Jettison e o Jackson para a geração do corpo HTTP no formato JSON. Além disso, a API já conta com suporte à FastInfoSet, YML, XML e JSON [24]. A Figura 2 representa uma classe Java com um exemplo de anotação @XmlRootElement para disponibilizar o recurso no formato XML. Figura 2: Anotação do RESTEasy. 2.7 Sistema Operacional Android – Android SDK O sistema operacional Android [27] é o resultado da união de várias empresas de tecnologia e mobilidade, que tem como objetivo definir uma plataforma única, aberta, com foco na usabilidade e na tecnologia. Tal plataforma busca atender às novas tendências do mercado. O Android possui uma arquitetura flexível capaz de integrar 6 aplicações desenvolvidas com as aplicações nativas. Uma característica importante do Android é o fato de ser baseado no kernel 2.6 do Linux, que é o responsável por gerenciar os recursos de hardware como memória, processos, threads, segurança dos arquivos e pastas, além da conectividade e dos drivers [28]. O desenvolvimento de aplicações para o Android é realizado por meio do AndroidSDK (Software Development Kit) escrito em Java. O Android-SDK possui um conjunto de bibliotecas para desenvolvimento, aplicativos para compilação e geração dos executáveis, um emulador do sistema operacional. Além disso, foi incluído o Android Virtual Device (ADV) que é um gerenciador dos simuladores Android, com o qual é possível criar um simulador em qualquer versão da plataforma e definir algumas características de hardware como: quantidade de memória, processador e suporte ao teclado [28]. 2.8 Spring for Android 1.0 O Spring for Android 1.0 [29] é uma extensão do Spring Framework, que tem como objetivo simplificar o desenvolvimento de aplicativos Android. A classe RestTemplate é o núcleo do Spring for Android, pois é responsável por fornecer os métodos de retorno e pela configuração do HttpMessageConverter, usado para empacotar os objetos no corpo da requisição HTTP e desempacotar a reposta de volta para os objetos. Assim, é possível implementar um cliente REST para realizar as requisições HTTP RESTFull em aplicações desenvolvidas para Android [30]. 3. O Sistema Web Proposto para Gerenciamento de Assistência Técnica Esta seção apresenta o sistema desenvolvido para apoiar o gerenciamento de solicitações de assistência técnica a computadores, com auxílio de smartphones. O sistema proposto tem como finalidade registrar e organizar esses chamados evitando, assim, a descentralização das informações. As subseções a seguir apresentam a descrição geral da empresa para a qual o sistema foi desenvolvido, como funciona o registro das solicitações atualmente, a modelagem do sistema Web e a modelagem da aplicação mobile que proporciona à interação com o sistema Web. 3.1 Descrição Geral da Empresa A Click Informática é uma empresa que presta serviços de assistência técnica a computadores em geral, situada no município de Francisco Alves – PR, há mais de dez anos. Atualmente, conta com três técnicos especializados para realizar as manutenções nos computadores, sendo que um deles tem a função de atender as solicitações externas. Mesmo sendo um município pequeno, a empresa tem uma demanda alta de solicitações por dia, pois presta serviços à repartições públicas como: prefeitura, câmara de vereadores, hospital, posto de saúde e escolas da cidade. 3.2 Registros das solicitações O sistema tem como principal objetivo registrar e organizar de forma centralizada as solicitações de assistência técnica da empresa. Atualmente, a empresa utiliza um simples formulário impresso e preenchido manualmente para registrar as informações referentes às solicitações. Com isso, ocorrem algumas situações críticas para a empresa, por exemplo, falha no registro da 7 solicitação, registro em mais de um local, perda e não atendimento das solicitações provocando, desse modo, demora e insatisfação dos clientes. A Figura 3 apresenta o formulário impresso utilizado atualmente, para registrar as solicitações. Figura 3: Formulário impresso de registro das solicitações usado atualmente. O formulário de registro apresentado na Figura 3 possui as seguintes informações: DATA DO CHAMADO que é a coluna utilizada para informar a data no momento que a solicitação foi realizada; NOME onde é informado o nome do cliente; SOLICITAÇÃO (serviço) que apresenta uma pequena lista dos serviços mais comuns e um espaço em branco para informar o serviço que não constar na lista. Dessa forma, o técnico assinala com um “X” no serviço desejado. A coluna FASE DO SERVIÇO apresenta uma lista de possíveis estados que se pode encontrar a solicitação; e a ultima coluna DATA FIM DOS PROCEDIMENTOS é utilizada para informar a data de conclusão da solicitação. 3.3 Modelagem do Sistema Desenvolvido A Figura 4 apresenta o diagrama de casos de uso do sistema desenvolvido. 8 Figura 4: Digrama de casos de uso do sistema desenvolvido. No diagrama apresentado na Figura 4, existem quatro atores que interagem com o sistema. O ator “Usuário Web”, primeiramente, realiza o caso de uso “Cadastrar Usuário” por meio de um formulário Web onde deve informar os dados solicitados. Nesse formulário é solicitado um login e uma senha, que serão fundamentais para utilizar o sistema. Depois de cadastrado, o usuário poderá “Gerenciar Endereços”. Nesse caso de uso ele informa endereços adicionais e realiza a principal função que será o caso de uso “Efetuar Solicitação” onde informa os dados solicitados para iniciar uma solicitação de assistência técnica. O ator “Técnico Web” estende “Usuário Web” podendo, assim, realizar os mesmos casos de uso que foram descritos anteriormente com um diferencial: no “Efetuar Solicitação” onde poderá escolher para qual usuário a solicitação será aberta. Também pode “Gerenciar Solicitações” que será o seu principal objetivo dentro do sistema onde é possível realizar todo o gerenciamento das solicitações que foram realizadas pelos usuários. Nesse caso de uso, em específico, é possível fazer as alterações necessárias nas solicitações como, por exemplo, atualização do Status da solicitação podendo variar entre: ABERTO, ANALISANDO, EM DESENVOLVIMENTO, CONCLUIDO e CANCELADO. O técnico também pode “Enviar Mensagens” entre Técnicos e Administradores. O ator “Administrador Web” estende “Técnico Web” que, por sua vez, estende “Usuário Web”. Sendo assim, o “Administrador Web” pode realizar todos os casos de uso já descritos. Além disso, tem a opção de “Gerenciar Usuário” onde é possível excluir, alterar, ativar/desativar e atribuir permissões aos usuários. Também pode “Gerenciar Serviço” que será utilizado para cadastro dos serviços e “Gerenciar Peças” que será utilizado para o cadastro das peças. Os serviços e peças cadastrados ficarão disponíveis para serem utilizados nas solicitações. O ator “Usuário Mobile” é a aplicação desenvolvida para o sistema operacional Android que proporciona o suporte para os usuários que possuem um SmartPhone com a aplicação instalada. Esse usuário pode “Consultar Status REST” que tem a função de retornar para o “Usuário Mobile” a situação que se encontra o Status da sua ultima solicitação e “Consultar Histórico REST” que tem a finalidade de retornar o histórico das solicitações já realizadas. 9 Com base no diagrama de caso de uso apresentado na Figura 4, foram propostos dois diagramas de classes que demonstram as estruturas do projeto. A Figura 5 apresenta o diagrama de classes do sistema Web e a Figura 6 apresenta o diagrama de classes da aplicação mobile. Figura 5: Digrama de classes – sistema web. Analisando o diagrama de classes apresentado na Figura 5, volta-se que a classe Solicitação é considerada a principal do sistema, pois relaciona as demais, que serão fundamentais para realizar o registro e controle das solicitações. Pode-se observar que a classe Usuário está associada à classe Usuario_Permissao que é utilizada para definir as permissões dos usuários no sistema. Os usuários que possuem permissões de administrador e técnico podem enviar mensagens entre eles, por conta disto, existe uma associação estre Usuário e Mensagem. As classes Consulta_Status_REST e Consulta_Historico_REST são muito importantes, pois disponibilizam os recursos de web service que serão utilizados pela aplicação mobile. 10 Figura 6: Digrama de classes – aplicação mobile. Analisando o diagrama de classes apresentado na Figura 6, observa-se que a principal classe do diagrama é a ConsultaRestActivity, a qual concentra toda a lógica da aplicação mobile. Possui dois métodos de suma importância: o método consultarStatus(String URL) que recebe como parâmetro a URL que contem o login do usuário e utiliza-se da classe Status para construir o retorno obtido pelo web service do sistema Web. Feito isso, é apresentada uma resposta ao usuário utilizando-se a classe TelaStatus e o método consultaHistorico(String URL) que tem a mesma rotina que o consultaStatus(String URL), mas utilizando as classes Historico e TelaHistorio. O que os diferencia é o tipo de retorno, sendo que para o primeiro método é uma String e para o segundo, uma List que contém o histórico das solicitações feitas pelo usuário. 3.4 Arquitetura do Sistema Web Para o desenvolvimento do sistema Web proposto foi utilizado o padrão ModelView-Controller (MVC). Esse padrão é utilizado para facilitar a manutenção do sistema, pois as regras de negócio do sistema ficam isoladas da camada de visão. A Figura 7 apresenta o mapeamento objeto-relacional utilizando o Hibernate para a classe Usuario como exemplo de elemento da camada de modelo. 11 Figura 7: Mapeamento objeto-relacional da classe usuario utilizando Hibernate. Pode-se observar na Figura 7 a presença de anotações (annotations) que são utilizadas para realizar o mapeamento. A anotação @Entity tem a função de definir que a classe mapeada é uma entidade do banco de dados, a @id define que o atributo código será a chave primária da entidade. @GenerateValue informa a estratégia de geração da chave primária, que nesse caso será gerada automaticamente. @Column é utilizada quando existe a necessidade de definir os detalhes para cada atributo como nome e tamanho máximo. Existe também a presença da anotação @OneToMany que especifica um relacionamento 1:n com a entidade Endereco. A Figura 8 apresenta a camada de persistência de dados onde foi utilizado o padrão de projeto: Data Access Object (DAO) [31]. O principal objetivo desse padrão é separar a camada de acesso de dados das regras de negócio. Uma vantagem dessa abordagem é que a camada de negócio não precisará se preocupar em como fazer a conexão com o banco de dados ou realizar a leitura ou gravação de um arquivo, pois para fazer essas operações somente será necessário solicitar para camada de acesso a dados. É possível observar que a classe apresentada na Figura 8 implementa a interface “UsuarioDAO” que contém apenas as assinaturas dos métodos referentes às operações em banco de dados, como os métodos sobrescritos que executam as operações de salvar e atualizar. Nota-se também a existência de uma Session, por meio da qual foi possível fazer com que as operações do Hibernate chegassem ao banco de dados. 12 Figura 8: Persistência de dados A Figura 9 apresenta a camada de regras de negócio. Essa camada acessa diretamente a camada de acesso aos dados (Data Access Object - DAO), e decide o que deve ser gravado no banco de dados ou quais informações devem ser recuperadas. O método salvar é um exemplo de regra de negócio implementada na classe apresentada na Figura 9, onde ao salvar um novo usuário é definida uma permissão por padrão. Figura 9: Regras de negócio 13 Na camada de visão foi utilizado o framework JSF, que facilita o desenvolvimento Web. O primeiro passo para iniciar o desenvolvimento usando o JSF é a criação da classe Bean, conhecida também como Backing Bean que é uma classe Java normal (Plain Old Java Object - POJO). A classe Bean tem como responsabilidade apoiar todo o funcionamento das páginas JSF separando, assim, as regras de funcionamento da página e do layout [3]. Na Figura 10 é possível observar a anotação @ManagedBean, responsável por realizar o mapeamento entre as classes Bean e as páginas (.xhtml) para que possam ter acesso às propriedades e aos métodos. A utilização do @ResquestScoped indica o tipo de escopo do Bean que mantém os dados do Bean em memória mesmo que a página seja trocada. Figura 10: Backing Bean referente ao usuário. A Figura 11 apresenta a página (.xhtml) do cadastro de usuários, na qual foram utilizados os componentes do JSF em com conjunto com os componentes do Prime faces, que é uma biblioteca de componentes JSF customizados. Para realizar a ligação dos componentes da página com a classe Bean são utilizadas as expressões UEL (Unified Expression Language), um exemplo desta encontra-se na linha 28 da Figura 11, onde o atributo value do componente recebe: “#{usuarioBean.usuario.nome}”. As demais páginas do sistema funcionam da mesma maneira. 14 Figura 11: Página (.xhtml) do cadastro de usuários A Figura 12 apresenta a tela para a criação de uma nova solicitação, a qual apresenta, por padrão, uma barra de menu que contem os botões necessários para cada tipo de usuário. Esse menu é montado levando em consideração as regras definidas no Spring Security, portando, somente serão apresentados os botões específicos para cada tipo de permissão. Nessa tela é necessário escolher para qual cliente está sendo aberta a solicitação; informar a descrição do problema; o que será necessário salvar referente aos dados do cliente informado por ele; selecionar o serviço e, caso o cliente solicite ou precise trocar alguma peça, também pode ser informado. Para finalizar a solicitação, basta dar um clique no botão Salvar. Figura 12: Tela para criar uma nova solicitação. 15 A Figura 13 mostra a tela para gerenciar solicitações, referente à permissão de acesso de técnico. Nela o técnico tem como principal objetivo realizar todo o gerenciamento dos chamados que foram solicitados pelos usuários e fazer alterações conforme a necessidade. Pode-se observar a presença de vários ícones que têm as funcionalidades de alteração do Status da solicitação, como foi descrito anteriormente no caso de uso “Gerenciar Solicitações”. Figura 13: Tela do gerenciar de solicitações. 3.5 Arquitetura da Aplicação Mobile A arquitetura da aplicação mobile é bem simples e funciona exatamente como foi descrito no diagrama de classes da Figura 6. A Figura 14 apresenta a implementação da classe “ConsultaRestActivity”, que concentra toda a lógica de negócio da aplicação. Pode-se observar a utilização de componentes específicos do Android como EditText e o Spinner, que foram usados como variáveis para armazenar os dados que o usuário digitar ou selecionar. O EditText foi utilizado para o login e o Spinner para o tipo de consulta. Existe também um button que ao ser pressionado realiza a consulta ao web service do sistema, utilizando a variável “urlPadrao” que contém o endereço do servidor. A Figura 15 faz parte da classe “ConsultaRestActivity”, que apresenta o método consultarStatus(String Url), que utiliza a classe “RestTemplate” do framework Spring for Android para criar um client e realizar a requisição ao web service do sistema Web. 16 Figura 14: Classe “ConsultaRestActivity”. Figura 15: Método “consultarStatus” As Figuras 16 e 17 apresentam a aplicação mobile em funcionamento no emulador Android. A Figura 16 é a tela de consulta da aplicação, onde o usuário informa seu login e o tipo de consulta. A Figura 17 apresenta a resposta referente à consulta do status do último chamado do usuário. 17 Figura 16: Tela de consulta da aplicação mobile em um emulador Android. Figura 17: Tela de resposta da aplicação mobile em um emulador Android. 18 4. Lições Aprendidas 4.1 Uso do Java Server Faces (JSF) O JSF teve um papel importante para o desenvolvimento da interface gráfica do sistema por ser um framework de componentes para o desenvolvimento Web. JSF foi utilizado em conjunto com o Prime Faces que são os componentes JSF customizados. Com essa união foi possível construir as páginas dinâmicas do sistema. Um componente que merece destaque é o Data Table do Prime Faces que, com algumas configurações simples, possibilitou especificar métodos de ordenação e de pesquisa na própria tabela. O JSF conta com um recurso bem interessante, a navegação implícita, que facilita muito a configuração e navegabilidade entre as páginas. Para utilizar-se deste recurso basta informar o nome da página de destino ou informar o caminho completo da página que deseja ser redirecionado, por exemplo, “/publico/usuário.xhtml”. Isso facilita muito a organização arquitetural da aplicação Web. 4.2 Adoção do Spring Security A utilização do Spring Security proporcionou agilidade para implementar a segurança do sistema Web, pois foram definidos os papéis (roles) dos usuários para o sistema, que são “ROLE_ADMINISTRADOR”, “ROLE_TECNICO” e “ROLE_USUARIO”. Para isso, foi necessário criar uma pasta para colocar as páginas Web referentes à cada tipo de usuário. Por fim, foram definidos no arquivo XML quais roles tinham acesso à cada pasta e cada recurso disponível no sistema, facilitando a definição do papel de cada novo usuário no sistema. Por padrão, ao realizar um novo cadastro o sistema já define automaticamente que esse usuário será do tipo “ROLE_USUARIO”, o qual poderá ser alterado, caso o usuário venha a ser um técnico ou mesmo um administrador. 4.3 Adoção da Plataforma Android A utilização da plataforma Android para desenvolver a aplicação que disponibiliza suporte a smartphones foi fundamental, pois sua codificação é feita na linguagem Java, a mesma utilizada para desenvolver o sistema Web. Portanto, não foi necessário aprender uma nova linguagem para implementar a aplicação mobile. O Android utiliza arquivos XML para criar o layout das telas, com um plugin disponível para Eclipse [32], o qual permite editar esses arquivos graficamente. Além disso, o Android apresenta uma paleta com os componentes que podem ser arrastados para a tela, facilitando o processo de desenvolvimento da aplicação. É importante destacar que a utilização do framework Spring for Android simplificou o método responsável por fazer as requisições ao web service do sistema Web. 5. Conclusões e Trabalhos Futuros Este artigo apresentou o desenvolvimento de um sistema Web para controle de solicitações de assistência técnica à computadores e o desenvolvimento de uma aplicação mobile utilizando a plataforma Android, que proporcionou integração com o sistema Web por meio de smartphones. Apesar de ser um sistema relativamente simples, proporciona grandes benefícios para a empresa, sendo: agilidade, organização e segurança. O próprio usuário pode realizar a abertura de um chamado no sistema e, em um segundo momento, consultar a 19 situação em que se encontra a sua solicitação por um dispositivo móvel. Isso permite maior interação entre os usuários, técnicos e administradores. Assim, o sistema contribui diretamente para um melhor atendimento das solicitações, fazendo com que o usuário fique satisfeito com o serviço e aumentando a credibilidade da empresa. Como direção para possíveis trabalhos futuros tem-se: (i) a necessidade de melhorar o suporte ao smartphone, disponibilizando para o usuário a possibilidade de realizar a abertura de solicitações e, para o técnico, a possibilidade de gerenciamento as solicitações; (ii) implementar o controle financeiro referente as solicitações e o controle de estoque referente às peças utilizadas nas solicitações e. (iii) analisar se o sistema atende outras empresas do mesmo ramo de atividade e disponibilizar o sistema como um serviço. Agradecimentos Primeiramente a Deus, por ter me dado forças para conclusão deste trabalho. Aos meus pais, Luiz Augusto e Fatima, que sempre me incentivaram. Ao meu orientador Professor Dr. Edson A. Oliveira Junior, pelo apoio, incentivo e grande auxílio no desenvolvimento deste trabalho. Referências Bibliográficas [1] Java Server Faces Technology: Disponível em: <http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html>. Out 2012. Acesso em: 31 [2] Java Community Process: Disponível em: <http://www.jcp.org/en/home/index>. Acesso em: 31 Out 2012. [3] LUCKOW, D. H.; MELO A. A. Programação Java para Web, São Paulo: Novatec, 2010 [4] HORSTMANN, CAY; GEARY, DAVID Core JavaServer Faces, 3ª ed, Boston - USA: Prentice Hall, 2010 [5] SIERRA, KATHY; BASHAM, BRYAN. Use a Cabeça! Servlets & JSP, São Paulo: Alta Books, 2008 [6] Tomcat: Disponível em: <http://tomcat.apache.org/>. Acesso em: 03 Nov 2012. [7] Apache Jakarta: Disponível em: <http://jakarta.apache.org/>. Acesso em: 03 Nov 2012. [8] Apache: Disponível em: <http://www.apache.org/>. Acesso em: 03 Nov 2012. [9] Java Servlet Technology: Disponível em: <http://www.oracle.com/technetwork/java/index-jsp135475.html>. Acesso em: 03 Nov 2012. [10] JavaServer Pages Technology: Disponível em: <http://www.oracle.com/technetwork/java/javaee/jsp/index.html>. Acesso em: 03 Nov 2012. [11] VUKOTIC, Aleksa; GOODWILL, James. Apache Tomcat 7, New York City: Apress, 2011 [12] Hibernate: Disponível em: <http://www.hibernate.org/>. Acesso em: 03 Nov 2012. [13] CAELUM, Java para desenvolvimento Web – FJ-21: Disponível <http://www.caelum.com.br/download/caelum-java-web-fj21.pdf>. Acesso em: 03 Nov 2012. em: [14] JBoss: Disponível em: <http://www.jboss.org/>. Acesso em: 03 Nov 2012. [15] Java Persistence API (JPA): Disponível em: <http://www.oracle.com/technetwork/articles/javaee/jpa-137156.html>. Acesso em: 03 Nov 2012. 20 [16] BAUER, CHRISTIAN; KING, GAVIN. Java Persistance com Hibernate, Rio de Janeiro, Ciência Moderna, 2007. [17] MySQL Disponível em: <http://www.mysql.com/ >,Acesso em: 30, Out, 2012. [18] MySQL – Customers – why-mysql: Disponível em: <http://www.mysql.com/customers/ http://www.mysql.com/why-mysql/ >,Acesso em: 30, Out, 2012. [19] NIEDERAUER, Juliano. Integrando PHP 5 com MySQL, 2ª ed, São Paulo, Novatec, 2008. Disponível em: < http://www.novateceditora.com.br/guias/phpmysql2/sumario9788575221747.pdf> Acesso em: 30 Out 2012. [20] Spring Security: Disponível em: <http://static.springsource.org/spring-security/site/>. Acesso em: 30 Out 2012. [21] Java Magazine. Spring Security – Segurança simples, poderosa e portável - à moda do SpringFramework. DevMedia Group, v. 69, p. 74 – 77, 2009 [22] RESTful Web Services: Disponível em: <http://www.oracle.com/technetwork/articles/javase/ /index-137171.html/>. Acesso em: 03 Nov 2012. [23] JAVA.NET “JAX-RS”. Disponível em: <http://jax-rs-spec.java.net/>. Acesso em: 04 Nov 2012 [24] Java Magazine. RESTEasy: Além da Especificação – Facilitando o desenvolvimento de RESTFull Web Services com RESTEasy. DevMedia Group, ed. 99, p. 52 – 61, 2012 [25] RESTEasy: Disponível em: <http://www.jboss.org/resteasy>. Acesso em: 03 Nov 2012. [26] JAVA.NET “JSR 311”. Disponível em: <http://jsr311.java.net/>. Acesso em: 04 Nov 2012 [27] ANDROID: Disponível em: <http://www.android.com/>. Acesso em: 04 Nov 2012 [28] LECHETA, Ricardo R. “Google Android: aprenda a criar aplicações para dispositivos móveis com o Android SDK”, 2ª. Ed., Editora Novatec, 2010. [29] Spring for Android: Disponível em: <http://www.springsource.org/spring-android>. Acesso em: 05 Nov 2012. [30] RestTemplate Module: Disponível em:<http://static.springsource.org/springandroid/docs/1.0.x/reference/html/rest-template.html>. Acesso em: 05 Nov 2012. [31] Data Access Object (DAO): Disponível em: <http://www.oracle.com/technetwork/java/dataaccessobject-138824.html>. 2012. Acesso em: 13 Nov [32] IDE Eclipse: Disponível em: <http://www.eclipse.org/>. Acesso em: 30 Out 2012. 21