Computacao em nuvens com Google App Engine e Java

Propaganda
UNIVERSIDADE ESTADUAL DE MARINGÁ – UEM
ESPECIALIZAÇÃO EM DESENVOLVIMENTO DE SISTEMAS PARA WEB – ESPWEB
BRUNO THEODORO DE AQUINO
ORIENTADOR: MESTRE MUNIF GEBARA JÚNIOR
COMPUTAÇÃO EM NUVENS COM GOOGLE APP ENGINE E JAVA
MARINGÁ
2013
BRUNO THEODORO DE AQUINO
COMPUTAÇÃO EM NUVENS COM GOOGLE APP ENGINE
Trabalho submetido à Universidade Estadual
de Maringá como requisito para a obtenção de
título de Especialista em Desenvolvimento de
Software para Web.
Orientador: Prof. Mestre Munif Gebara Júnior
MARINGÁ
2013
RESUMO
With the popularization of the internet and its continuous improvement, cloud computing has
grown greatly in recent years. His model is service-oriented and can be divided into: software
as a service, platform as a service, infrastructure as a service and storage as a service. Several
companies have set up their development platforms in the clouds, as the case of Google and
Amazon, studied in this work. Also shown are the first steps of how to create an application
on the Google platform using the Eclipse IDE with the Plug-in SDK, the Java language. A
proposed example was created by Google and shown its development, that is persisted using
JDO.
Keywords: Cloud computing. Google App Engine. Amazon Web Services, AWS Elastic
Beanstalk.
ABSTRACT
With the popularization of the Internet and its constant improvements, cloud computing has
grown tremendously in recent years. His model is service-oriented and can be divided into:
software as a service, platform as a service, infrastructure as a service and storage as a service.
Several companies have set up their development platforms in the clouds, as the case of
Google and Amazon, studied in this work. Also shows the first steps in creating an application
in the Google platform using the Eclipse IDE, the plug-in SDK, the Java liguagem. It created
an example proposed by Google, and shown its development, that is persisted using JDO.
Key words: Cloud Computing. Google App Engine. Amazon Web Services, AWS Elastic
Beanstalk.
Sumário
1 Introdução................................................................................................................................8
1.1 Objetivo............................................................................................................................8
1.2 Justificativa.......................................................................................................................8
1.3 Motivação.........................................................................................................................8
1.4 Estrutura do Trabalho.......................................................................................................9
2 Fundamentação Teórica..........................................................................................................10
2.1 Computação em Nuvens.................................................................................................10
2.2 Características.................................................................................................................11
2.2.5 Customização..........................................................................................................12
2.3 Modelo de Serviço..........................................................................................................12
2.3.1 Infraestrutura como Serviço – IaaS........................................................................12
2.3.2 Plataforma como serviço – PaaS............................................................................13
2.3.3 Software como Serviço – SaaS...............................................................................13
2.3.4 Demais serviços......................................................................................................13
2.4 Modelo de Implantação..................................................................................................14
2.4.1 Privado....................................................................................................................14
2.4.2 Pública....................................................................................................................15
2.4.3 Comunidade............................................................................................................16
2.4.4 Hibrido....................................................................................................................16
2.5 Google App Engine........................................................................................................17
2.5.1 Funcionalidades do GAE........................................................................................18
2.6 Amazon Web Services (AWS)........................................................................................20
2.6.1 Funcionalidades do AWS Elastic Beanstalk...........................................................20
2.7 GAE x AWS...................................................................................................................22
2.7.1 Ambiente de Desenvolvimento...............................................................................22
2.7.2 Armazenamento......................................................................................................22
2.7.3 Definição de Preços e Limites................................................................................23
2.7.4 Plataforma Java.......................................................................................................23
3 Aplicação com Google App Engine.......................................................................................25
3.1 Preparando o Ambiente..................................................................................................25
3.1.1 Java Development Kit............................................................................................25
3.1.2 Plug-in do Google para IDE Eclipse......................................................................26
3.1.3 Testando a instalação..............................................................................................29
3.2 Criando o primeiro Projeto.............................................................................................29
3.2.1 Olá Mundo..............................................................................................................30
3.3 Mural de Mensagens......................................................................................................32
3.4 Persistência.....................................................................................................................32
3.4.1 DataNucleus Access Platform................................................................................32
3.4.2 Anotações JDO e POJOs........................................................................................33
3.4.3 Fábrica de Conexão e persistence.xml....................................................................34
3.4.4 Servlet.....................................................................................................................35
3.4.5 View (JSP)..............................................................................................................36
3.4.6 JDOSQL.................................................................................................................36
3.4.7 Como enviar o projeto com a IDE Eclipse.............................................................37
4 Conclusão...............................................................................................................................42
5 Referência bibliográfica.........................................................................................................44
Apêndices..................................................................................................................................45
Apêndice A – Classe BtajdoServlet......................................................................................46
Apêndice B – Mural.jsp........................................................................................................48
Apêndice C – Controle de Versão com Git..........................................................................50
Índice de figuras
Figura 1: Modelo de Serviço.....................................................................................................12
Figura 2: Modelo de Nuvem Privada........................................................................................15
Figura 3: Nuvem Pública..........................................................................................................16
Figura 4: Nuvem Comunitária..................................................................................................16
Figura 5: Nuvem Hibrida..........................................................................................................17
Figura 6: Ambiente de desenvolvimento Java..........................................................................18
Figura 7: Verificando instalação do Java..................................................................................26
Figura 8: Adicionando o link do Plug-in...................................................................................26
Figura 9: Adicionando nome e endereço do Download............................................................27
Figura 10: Escolhendo as ferramentas......................................................................................27
Figura 11: Detalhes dos recursos..............................................................................................28
Figura 12: Processo de instalação.............................................................................................28
Figura 13: Comando para Linux e MAC OS, [6].....................................................................29
Figura 14: Comando para Windows, [6]...................................................................................29
Figura 15: Estrutura do Projeto.................................................................................................30
Figura 16: Olá Mundo...............................................................................................................31
Figura 17: Execução do Olá Mundo.........................................................................................31
Figura 18: Configurações JDO.................................................................................................32
Figura 19: Classe com anotação JDO.......................................................................................33
Figura 20: Exemplo de fábrica de conexão...............................................................................34
Figura 21: persistence.xml........................................................................................................35
Figura 22: Servlet......................................................................................................................36
Figura 23: JSP...........................................................................................................................36
Figura 24: Exemplo de JDOSQL..............................................................................................37
Figura 25: Criando uma conta Google......................................................................................38
Figura 26: Criando o ID do Projeto..........................................................................................38
Figura 27: Formulário do ID.....................................................................................................39
Figura 28: Adicionando o ID no Projeto...................................................................................39
Figura 29: Enviando o projeto..................................................................................................40
Figura 30: Projeto mural de mensagens....................................................................................41
Figura 31...................................................................................................................................50
Figura 32: Fonte: Bitbucket. 2013............................................................................................51
Figura 33: Fonte: Bitbucket. 2013............................................................................................51
Figura 34: Fonte: Bitbucket. 2013............................................................................................52
Figura 35...................................................................................................................................53
Figura 36: Fonte: Bitbucket, 2013............................................................................................53
8
1 Introdução
Com o avanço cada vez mais rápido da internet, ter acesso às suas informações de qualquer
computador com acesso à rede, se tornou fundamental no mercado de hoje. A computação em
nuvens, vem trazendo esta possibilidade, onde empresas conseguem usar a infraestrutura de
terceiros, de qualquer dispositivo com acesso as nuvens.
1.1 Objetivo
O objetivo deste trabalho é apresenta o Google App Engine da Google, mostrando os passos
básicos para o desenvolvimento de uma aplicação simples em Java, utilizando a IDE de
desenvolvimento Eclipse. Além disso, será apresentado uma comparação com os recursos do AWS
Elastic Beanstalk, o serviço concorrente da Amazon.
1.2 Justificativa
Com o mercado cada vez mais competitivo, ter acesso a seus sistemas e informações de
qualquer lugar passou a ser fundamental. Com os serviços de computação em nuvens, empresas
terceirizam suas infraestruturas de servidores, e para acessar seus arquivos e aplicativos, basta ter
acesso as nuvens, ou seja, internet. Várias gigantes da internet, como a Google e Amazon,
começaram a disponibilizar sua infraestrutura de computação em nuvens, e são pioneiras no ramo.
Com está abordagem, diminuem os custos que as empresas teriam para bancar sua própria
infraestrutura de servidores, além de outros gastos como segurança, manutenção e atualização dos
equipamentos. A empresa teria recursos para focar em outros pontos estratégicos, justificando assim
este trabalho.
1.3 Motivação
Tanto para empresas como para usuários comuns, a computação em nuvens está cada dia mais
presente, pessoas ficam conectados a nuvem o tempo todo, seja por um computador pessoal ou
9
smartfones, é um mercado aquecido. Empresas estão migrando seus sistemas corporativos para
nuvens, e fornecendo seus serviços através dela.
1.4 Estrutura do Trabalho
No capítulo 2, apresentaremos uma introdução sobre computação em nuvens, e suas
características de serviços, como IaaS, PaaS e SaaS.
No capítulo 3, será apresentado o Google App Engine, e também uma comparação com o
serviço da Amazon.
No capítulo 4, será apresentado como configurar o Eclipse para o desenvolvimento de uma
aplicação com GAE, além de mostrarmos os passos para o desenvolvimento de uma aplicação
simples e deploy nas nuvens.
Capítulo 5, conclusão deste estudo, mostrando o que esperar da computação e nuvens e do
Google App Engine, além de ser apresentado os trabalhos futuros. No Apêndice, estará presente o
código fonte das principais classes do projeto, além do seu controle de versão.
10
2 Fundamentação Teórica
Para entender melhor como funciona o Google App Engine, é necessário ter uma base de
conhecimento sobre computação em nuvens. Este capítulo tem como objetivo apresentar os
conceitos de computação em nuvens, e suas principais características.
2.1 Computação em Nuvens
O termo computação em nuvens ou cloud computing surgiu 2006, em uma palestra de Eric
Schmidt, da Google. Computação em nuvens ou clomputing, se trata de usar a infraestrutura de
terceiras atrás da internet, o armazenamento, é feito com serviços que poderão ser acessados de
qualquer lugar do mundo a qualquer hora, atrás do acesso remoto via internet, daí a alusão a
nuvens. [4]
A palavra nuvem sugere uma ideia de ambiente desconhecido, o qual podemos ver apenas seu
início e fim, assim a palavra nuvem foi empregada a este novo conceito de tecnologia, pois toda a
infraestrutura computacional fica a cargo de terceiros, tendo o usuário final, acesso a estes recursos
e serviços.
As nuvens são representadas pela internet, que é a infraestrutura de comunicação dos recursos
disponibilizados de hardware, software, armazenamento, redes de telecomunicações e etc. Tudo isso
é possível, graças a grande informações de usuários armazenados em grandes centros chamados de
“data center”
Com a computação em nuvens, muitos aplicativos, não precisam mais estar instalados em
computadores do usuário final, nem mesmo em servidores e data centers próprio. Este conteúdo
fica disponível nas nuvens, ou seja, na internet. Cabendo ao fornecedor do serviço, todas as tarefas
de uma data center, como armazenamento, segurança, backups, atualizações e etc.
A computação em nuvem surge da necessidade de diminuir os gastos com recursos com
infraestrutura, e também da necessidade de se acessar os dados de qualquer lugar. Além disso,
recursos de computação e hardware são propensos a ficarem obsoletos rapidamente. Assim a
utilização de plataformas computacionais de terceiros é uma solução inteligente para os usuários
lidarem com a infraestrutura de TI, já que passa essa responsabilidade para o fornecedor contratado.
11
2.2 Características
A convergência de uma gama de importantes tecnologias permite à computação na nuvem
prover serviços de forma transparente para o usuário, dentre outras funcionalidades e
particularidades. Campos de tecnologia que são de grande relevância nesta convergência são:
Hardware, com a capacidade de virtualização, Tecnologias de internet, como a Web 2.0, serviços
web; Gerenciamento de Sistemas, como a computação independente(autonomic computing) e a
automação de gerenciamento e manutenção de Data Center; além da computação distribuída, em
especial a utility & grid computing. [1]
A computação na nuvem propicia a ilusão de recursos computacionais infinitos disponíveis para
o uso. Portanto, os usuários têm a expectativa de que a nuvem seja capaz de fornecer rapidamente
recursos em qualquer quantidade e a qualquer momento. É esperado que os recursos adicionais
possam ser providos, possivelmente de forma automática, quando ocorre o aumento da demanda e
retidos, no caso da diminuição desta demanda. [1]
O consumidor de serviços da computação na nuvem espera adquirir recursos computacionais de
acordo com sua necessidade e de forma instantânea. Para suportar este tipo de expectativa, as
nuvens devem permitir o acesso em autoatendimento (self-service) para que os usuários possam
solicitar, personalizar, pagar e usar os serviços desejados sem intervenção humana. [1]
Uma vez que o usuário tem a opção de requisitar e utilizar somente a quantidade de recursos e
serviços que ele julgar necessário, os serviços devem ser precificados com base em um uso de baixa
duração, como por exemplo, medido em horas de uso. Por esta razão, as nuvens devem implementar
recursos que garantam um eficiente comércio de serviços, tais como tarifação adequada,
contabilidade, faturamento, monitoramento e otimização do uso. Esta medição de uso dos recursos
deve ser feita de forma automática e de acordo com os diferentes tipos de serviços oferecidos
(armazenamento, processamento e largura debanda) e prontamente reportada, permitindo uma
maior transparência comercial. [3]
Os recursos devem estar disponíveis através da rede e acessados através de mecanismos padrões
que permitam a utilização dos mesmos por plataformas heterogêneas, como smartfones, laptops,
PDAs, entre outros. [2]
12
2.2.5 Customização
No atendimento a múltiplos usuários verifica-se a grande disparidade entre a necessidades dos
mesmos, tornando essencial a capacidade de personalização dos recursos da nuvem. Desde serviços
de infraestrutura, a serviços de plataforma e serviços de software.
2.3 Modelo de Serviço
O modelo conceitual encontrado na literatura é composto de três camadas, que definem um
padrão para computação em nuvem. Na ilustração 1, podemos verificar as camadas, informando
quem utiliza e o tipo de serviço.
Figura 1: Modelo de Serviço
2.3.1 Infraestrutura como Serviço – IaaS
Nesta camada são oferecidos os serviços de infraestrutura, ou seja, os fornecedores deste
serviço, oferecem recursos de hardwares virtualizados como computação, armazenamento e
comunicação. Está camada é a mais inferior, por este motivo, trabalha como infraestrutura para as
demais camadas.
Exemplo de ferramentas do nicho de serviço como infraestrutura é o Eucalyptus, um software
livre que consiste num framework que utiliza e gerência uma infraestrutura de computadores e
dispositivos de armazenamento com o intuito de disponibilizar um ambiente modular aos
13
prestadores de serviço. Outros exemplos estão o CloudSim (voltado para simulações), Amazon
Elastic Compute Cloud, que é puramente comercial, onde ele provê um ambiente virtual no qual é
possível desenvolver e executar aplicações Linux, para isso o usuário escolhe como sua máquina
virtual deve ser.[3]
2.3.2 Plataforma como serviço – PaaS
O fornecedor oferece um ambiente como serviço, onde pode ser desenvolvido aplicações nas
nuvens, evitando assim algumas preocupações dos desenvolvedores, como processamento e
quantidade de memória utilizada pela aplicação. É a camada intermediaria, e utiliza a camada
inferior para prover seus serviços.
A tecnologia que apresentaremos neste trabalho, o Google App Engine, faz parte desta camada
da computação em nuvens, ela oferece serviços capazes de desenvolver aplicações em Java, Python
ou qualquer outra linguagem de programação, que utilize uma Java Virtual Machine (JVM) ou
Máquina Virtual Java.
2.3.3 Software como Serviço – SaaS
Se trata da camada mais alta da computação e nuvens, e fornece como serviços, aplicações
completas para o usuário final. Essas aplicações são fornecidas através do acesso a Web, permitindo
a execução de programas nas nuvens, através de uma máquina local. O SaaS como camada mais
alta, utiliza o IaaS e PaaS para seus serviços.
O Google com seu Google App, é o mais famoso fornecedor deste serviço, entre os serviços
fornecidos, estão Gmail, Hangout e Google Docs, outros exemplos são o Microsoft Azure, Chrome
OS, Photoshop online e etc.
2.3.4 Demais serviços
Existem outras tipologias de computação em nuvem, tais como, DaaS (Desenvolvimento como
Serviço), CaaS (Comunicação como Serviço), TaaS (Teste como Serviço) e EaaS (Tudo como
Serviço). Utilizados normalmente para diferenciar um tipo de serviço.
14
2.4 Modelo de Implantação
No modelo de implantação,4 dependemos das necessidades das aplicações que serão
implementadas. A restrição ou abertura de acesso depende do processo de negócios, do tipo de
informação e do nível de visão desejado. Percebemos que certas organizações não desejam que
todos os usuários possam acessar e utilizar determinados recursos no seu ambiente de computação
em nuvem. Segue abaixo a divisão dos diferentes tipos de implantação [5].
2.4.1 Privado
Nuvens privadas, são aquelas construídas para um único usuário, por exemplo, uma empresa.
Nela o acesso é restrito, estabelecido pelo usuário, porém por ser uma nuvem privada que permite o
usuário ter este tipo de controle, gera um custo maior.
Característica que diferencia as nuvens privadas é ato da restrição de acesso, pois a mesma se
encontra atrás do firewall da empresa, sendo uma forma de aderir à tecnologia, beneficiando-se das
suas vantagens, porém mantendo o controle do nível de serviço e aderência às regras de segurança
da instituição. [4]
As nuvens privadas são aquelas construídas exclusivamente para um único usuário (uma
empresa, por exemplo). Diferentemente de uma data center privado virtual, a infraestrutura utilizada
pertence ao usuário, e, portanto, ele possui total controle sobre como as aplicações são
implementadas na nuvem. Uma nuvem privada é, em geral, construída sobre um Data
Center privado [5].
A figura 2, mostra um modelo de nuvem privada:
15
Figura 2: Modelo de Nuvem Privada
2.4.2 Pública
As nuvens públicas são aquelas que são executadas por terceiros. As aplicações de diversos
usuários ficam misturadas nos sistemas de armazenamento, o que pode parecer ineficiente a
princípio. Porém, se a implementação de uma nuvem pública considera questões fundamentais,
como desempenho e segurança, a existência de outras aplicações sendo executadas na mesma
nuvem permanece transparente tanto para os prestadores de serviços como para os usuários [5].
A figura 3, mostra um modelo de Nuvem publica.
16
Figura 3: Nuvem Pública
2.4.3 Comunidade
A infraestrutura de nuvem é compartilhada por diversas organizações e suporta uma
comunidade específica que partilha as preocupações (por exemplo, a missão, os requisitos de
segurança, política e considerações sobre o cumprimento). Pode ser administrado por organizações
ou por um terceiro e pode existir localmente ou remotamente [5].
A figura 4, mostra um modelo de Nuvem Comunitária
Figura 4: Nuvem Comunitária
2.4.4 Hibrido
Nas nuvens híbridas temos uma composição dos modelos de nuvens públicas e privadas. Elas
permitem que uma nuvem privada possa ter seus recursos ampliados a partir de uma reserva de
recursos em uma nuvem pública. Essa 8 característica possui a vantagem de manter os níveis de
17
serviço mesmo que haja flutuações rápidas na necessidade dos recursos. A conexão entre as nuvens
pública e privada pode ser usada até mesmo em tarefas periódicas que são mais facilmente
implementadas nas nuvens públicas, por exemplo. O termo “computação em ondas” é, em geral,
utilizado quando se refere às nuvens híbridas [3].
Na figura 5, temos um exemplo de Nuvem Hibrida
Figura 5: Nuvem Hibrida
2.5 Google App Engine
O Google App Engine, permite que os usuários executem os aplicativos na infraestrutura da
Google, assim não é necessário manter servidores, e se preocupar com os gastos que uma estrutura
dessas demandaria. O aplicativo é enviado para nuvens, e está pronto para ser utilizado pelo usuário
final.
Você pode enviar o arquivo para infraestrutura da Google, e manter seu próprio domínio, ou
também pode estar utilizando um nome livre de domínio oferecido pelo próprio Google App, o
appspot.com. O aplicativo enviado para o ambiente da Google, pode ser configurado para ser
acessado apenas por sua organização, ou ter livre acesso.
Os aplicativos podem ser desenvolvidos nas linguagens de programação Java e Python, ou por
qualquer outra linguagem de programação, que utilize uma Máquina Virtual Java. Para auxiliar no
desenvolvimento, é disponibilizado um conjunto de ferramentas chamado Google Web Toolkit
18
(GWT), que podem ser adicionados as principais IDEs do mercado, por exemplo, Eclipse e
Netbeans.
Na figura 6, mostra como funciona o ambiente de desenvolvimento em Java, e que existem
serviços de apoio.
Figura 6: Ambiente de desenvolvimento
Java
2.5.1 Funcionalidades do GAE
O Google App Engine facilita a criação de aplicativos que podem ser executados de forma
confiável mesmo sob uma carga pesada e com grandes quantidades de dados. O Google App Engine
inclui os seguintes recursos:
1.
Serviço da web dinâmico, com suporte completo a tecnologias da web comuns
2.
Armazenamento persistente com consultas, classificação e transações
3.
Escalonamento e balanceamento de carga automática
4.
APIs para autenticação de usuários e envio de e-mails usando Contas do Google
5.
Um ambiente de desenvolvimento local com todos os recursos, simulando o Google App
Engine em seu computador
6.
Filas de tarefas para realizar trabalho fora do escopo de uma solicitação da web
19
7.
Tarefas programadas para iniciar eventos em horários específicos e em intervalos regulares
O aplicativo pode ser executado em um destes dois runtime environments: Java e Python Cada
ambiente oferece protocolos padrão e tecnologias comuns para o desenvolvimento de aplicativos da
web. [6]
Os aplicativos são executados em um ambiente seguro que fornece acesso limitado ao sistema
operacional subjacente. Essas limitações permitem que o Google App Engine distribua solicitações
de web para o aplicativo entre diversos servidores, iniciando e interrompendo servidores para
atender às demandas de tráfego. O sandbox isola o aplicativo em seu próprio ambiente seguro e
confiável, independentemente de hardware, sistema operacional e localização física do servidor da
web.
São exemplos das limitações do ambiente seguro sandbox:
1.
Um aplicativo pode acessar outros computadores na Internet somente por meio dos serviços
de busca de URL e de e-mail fornecidos. Outros computadores podem se conectar ao aplicativo
somente fazendo solicitações HTTP (ou HTTPS) nas portas padrão.
2.
Um aplicativo não pode gravar no sistema de arquivos. Um aplicativo pode ler arquivos,
mas somente os enviados junto com o código do aplicativo. O aplicativo deve usar o
armazenamento de dados, o memcache ou outros serviços do Google App Engine para todos os
dados que persistirem entre solicitações.
3.
O código do aplicativo é executado somente em resposta a uma solicitação da web, a uma
tarefa na fila ou a um trabalho do cron, e deve retornar dados de resposta em 30 segundos,
independentemente do caso. Um manipulador de solicitação não pode gerar um subprocesso nem
executar o código após o envio da resposta. [6]
O Google App Engine, contém um mecanismos de armazenamento de dados distribuído,
baseado em consultas e transações. Assim o armazenamento de dados distribuído, cresce a medida
que o número de dados aumentam.
O armazenamento de dados do Google App Engine, não é de maneira relacional, como grande
parte dos bancos de dados presentes do mercado. As consultas do modelo oferecido pelo Google,
recupera uma entidade de um tipo determinado, filtradas e classificadas de acordo com as
propriedades definidas. As interfaces de Java JPA/JDO e as interfaces de armazenamento de dados
em Python, possuem recursos para implementação em seus aplicativos.
As consultas são executadas sobre objetos de dados, que também são conhecidas como
entidades, as entidades podem conter uma ou várias propriedades onde uma delas é um
identificador único chamado de chave.
O Google App Engine suporta a integração de um aplicativo com as Contas do Google para
20
autenticar um usuário. Seu aplicativo pode permitir que um usuário faça login com uma conta do
Google e acesse o endereço de e-mail e o nome de exibição associado à conta. O uso de Contas do
Google permite que o usuário comece a usar seu aplicativo mais rapidamente, pois talvez não
precise criar uma conta. Isso economiza o esforço de implementar um sistema de contas de usuário
somente para seu aplicativo.
Se seu aplicativo estiver sendo executado no Google Apps, ele pode usar os mesmos recursos
com os membros de sua organização e contas do Google Apps.
A API de usuários também pode informar ao aplicativo se o usuário atual é um administrador
registrado do aplicativo. Isso facilita a implementação de áreas de seu site restritas a
administradores. [6]
Criar um aplicativo no Google App Engine é gratuito, assim é possível desenvolver um
aplicativo e publicar o mesmo na plataforma do Google, sem nenhum custo inicial. Porém a versão
gratuita tem suas limitações, um aplicativo nesta categoria, pode ter apenas 500 MB de capacidade
de armazenamento, e 5 milhões de visualizações de página por mês. Caso necessite de mais
recursos, você pode ativar o faturamento, e escolher um dos planos disponíveis.
Você pode registrar no máximo 10 aplicativos por conta de desenvolvedor, e definir uma
limitação para cada um deles, as chamadas cotas, que define a quantidade de recursos que se pode
usar em um dia, podendo ser configurado posteriormente para aumentar ou até mesmo diminuir está
quantidade de recursos, a medida que seu aplicativo necessite.
2.6 Amazon Web Services (AWS)
Criado em 2006, o Amazon Web Services (AWS), começou a oferecer seus serviços de
computação em nuvens para as empresas de TI. Atualmente o AWS oferece nas nuvens um serviço
de infraestrutura altamente confiável e escalável, presente em mais de 190 pais, com seus Data
centers localizados nos EUA, Europa, Brasil, Cingapura, Japão e Austrália.
2.6.1 Funcionalidades do AWS Elastic Beanstalk
Assim que um aplicativo estiver sendo executado, o Elastic Beanstalk fornecerá vários recursos
de gestão, como:
21
1. Implemente facilmente as novas versões do aplicativo em ambientes em execução (ou
implante em uma versão anterior).
2. Acesse métricas de monitoramento CloudWatch embutidas, como a utilização média da
CPU, a contagem de solicitações e a latência média.
3. Receber notificações por e-mail por meio do Amazon Simple Notification Service (Amazon
SNS) quando o status do aplicativo mudar ou os servidores do aplicativo forem adicionados
ou removidos.
4. Acesse arquivos de log do servidor sem precisar efetuar login nos servidores do aplicativo.
5. Reiniciar rapidamente os servidores do aplicativo em todas as instâncias do EC2 com um
único comando.
Com o Elastic Beanstalk, os desenvolvedores retêm o controle total sobre os recursos da AWS
capacitando seu aplicativo e podem desempenhar uma série de funções simplesmente ao ajustar
definições de configuração padrão do console de gestão do Elastic Beanstalk, incluindo:
1. Seleção do tipo de instância do Amazon EC2 mais apropriado que corresponde aos
requisitos da CPU e de memória do seu aplicativo
2. Escolher entre várias opções de armazenamento e de banco de dados disponíveis, como o
Amazon RDS, Amazon DynamoDB, Amazon SimpleDB, Microsoft SQL Server, Oracle,
IBM DB2 ou o Informix.
3. Habilitação do acesso de login a instâncias do Amazon EC2 para a solução de problemas
imediata e direta
4. Aprimoramento rápido da confiabilidade do aplicativo ao executar em mais de uma Zona de
disponibilidade
5. Aperfeiçoamento da segurança do aplicativo ao habilitar o protocolo HTTPS no load
balancer
6. Ajustar configurações de servidor do aplicativo (p.ex., configurações JVM) e varáveis de
ambiente de passagem
7. Execução de outros componentes do aplicativo, como serviço de armazenamento em cache
da memória, lado a lado no Amazon EC2
8.
Ajustar as definições de Auto Scaling para controlar a métrica e os limites usados para
determinar quando adicionar ou remover instâncias de um ambiente. [7]
22
2.7 GAE x AWS
Apesar das duas tecnologias de computação em nuvens pertencerem a mesma camada, o PaaS,
ambas tem suas particularidades e similaridades que apresentaremos neste trabalho. Focaremos na
comparação referente a linguagem de programação Java, não entrando em detalhes nas demais
linguagens.
2.7.1 Ambiente de Desenvolvimento
Ambas as tecnologias possuem ferramentas que auxiliam o desenvolvimento, e também no
envio das aplicações para as nuvens, no caso da linguagem Java, possuem uma SDK que suporta o
Java 5 e 6.
Existe um Plug-in de desenvolvimento para a IDE Eclipse, o Google Web Toolkit (GWT) e
AWS Toolkit, após instalação do mesmo, sua IDE Eclipse, estará configurada para o criar, testar e
enviar suas aplicações para as nuvens.
O Netbeans, outra importante IDE do mercado, também possui um Plug-in de desenvolvimento
para o SDK, porém o Eclipse é mais recomendado, e citado na documentação de ambas as
tecnologias.
2.7.2 Armazenamento
O Google App Engine inclui suporte a dois padrões de APIs diferentes para o armazenamento
de dados: JDO (Objetos de dados Java) e JPA (API persistente Java). Essas interfaces são oferecidas
pelo DataNucleus Access Platform, uma implementação de código aberto de vários padrões de
persistência Java, com um adaptador para o armazenamento de dados do App Engine. [6]
Criado e oferecido pelo Google, o BigTable é um banco de dados orientando a colunas, salva
objetos de dados, conhecidos como entidades. Uma entidade tem uma ou mais propriedades, valores
nomeados de um dos vários tipos de dados, incluindo números inteiros, valores de ponto flutuante,
strings, datas, dados binários e etc. Cada entidade também tem uma chave que identifica a entidade.
A chave mais simples têm um tipo e um ID de entidade fornecidos pelo armazenamento de dados. O
tipo classifica a entidade para que você possa consultá-la com mais facilidade. O ID da entidade
também pode ser uma string fornecida pelo aplicativo. Ao contrário de banco de dados tradicionais,
o armazenamento de dados usa uma arquitetura distribuída, também é diferente na forma como
23
descrever relacionamentos entre objetos de dados, com o BigTable duas entidades do mesmo tipo,
podem ter propriedades diferentes. Diferentes entidades de dados podem ter propriedades com o
mesmo nome, mas tipos de valores diferentes.
São usadas consultas escritas em Google Query Language (GQL) para recuperar dados do
BigTable, diferente dos bancos de dados tradicionais que utilizam Structured Query Language
(SQL). Caso o desenvolvedor queria utilizar o MySQL, banco de dados modelo relacional mais
utilizado no mundo, é necessário uma outra ferramenta do Google, chamada Google Cloud SQL
que pode ser integrada ao Google App Engine.
O Amazon Elastic Beanstalk, o usuário pode utilizar qualquer um dos bancos relacionais mais
populares do mercado, como MySQL, Oracle e Microsoft SQL, basta utilizar um dos seus serviços
de persistência chamado Amazon RDS. Outros serviços oferecidos pela Amazon, são: O Amazon
DynamoDB é um serviço de banco de dados NoSQL, Amazon SimpleDB é um serviço de banco de
dados NoSQL gerenciado, projetado para conjuntos de dados menores e Amazon ElastiCache é um
serviço web que trabalha com cache na memória na nuvem.
2.7.3 Definição de Preços e Limites
Ambos os serviços apresentados, oferecem opções gratuitas para serem utilizadas, e o
contratante só paga o que exceder este limite gratuito. No caso do Google App Engine, um
aplicativo de uma conta gratuita pode usar até 500 MB de armazenamento e até 5 milhões de
visualizações de página por mês. Além disso, você pode registrar até 10 aplicativos por conta de
desenvolvedor.
Amazon Elastic Beanstalk, você só paga pelos recursos AWS subjacentes, por exemplo, um
recurso mais robusto de armazenamento. Cada recurso do AWS, também possui sua cota gratuita,
que varia de produto para produto. Entretanto, o custo é alto para Web sites com tráfego baixo e
desenvolvedores amadores. É possível criar até 25 aplicativos e 500 versões de aplicativos. Por
padrão, você pode executar até 10 ambientes em todos seus aplicativos.
2.7.4 Plataforma Java
Google App Engine e Amazon Elastic Beanstalk, possuem suporte para a Plataforma Java, nas
24
versões 5 e 6, entretanto há algumas diferenças entre os dois serviços. No caso do primeiro, os
recursos para Java são limitados, e em alguns casos fora dos padrões. Devido a várias restrições
impostas aos seus aplicativos, o Google App Engine não suporta certas APIs da plataforma Java.
As limitações de APIs, acaba prejudicando o uso de alguns frameworks famosos no mercado,
podemos usar como exemplo, o JavaServer Faces (JFS), que requer modificações manualmente no
código de origem do framework para fazer com que ele execute no Google App Engine.
Amazon Elastic Beanstalk, suporta servidor Tomcat completo. Por causa de sua popularidade,
quase todos os frameworks Java corporativos suportam a implementação em Tomcat. Esses
frameworks podem ser iniciados ou inicializados a partir de um arquivo WAR do Tomcat,
oferecendo a você uma ampla variedade de opções de frameworks e bibliotecas.
25
3 Aplicação com Google App Engine
O objetivo deste trabalho, é apresentar a estrutura de desenvolvimento da ferramenta do Google,
além do apresentarmos o desenvolvimento de uma aplicação simples. Após o desenvolvimento, a
aplicação será envidada para as Nuvens.
3.1 Preparando o Ambiente
Para o desenvolvimento da aplicação, precisamos preparar o ambiente, além do Java e da IDE
Eclipse, precisaremos do SDK do Google App Engine.
O SDK inclui software para um servidor web que você pode executar no seu próprio
computador para testar seus aplicativos Java. O servidor simula todos os serviços do App Engine,
incluindo uma versão local do armazenamento de dados, Contas do Google e recursos de busca de
URLs e envio de e-mails pelo computador através das APIs do App Engine. [6]
3.1.1 Java Development Kit
Java Development Kit é um conjunto de utilitários que permitem criar sistemas de software para
plataforma Java. O Google App Engine, tem suporte para as versões 5 e 6, e também suporte
experimental para a versão 7. A versão recomendada para o desenvolvimento de suas aplicações, é a
6.
É necessário realizar o download do JDK para instalação, isso pode ser feito no site do
fornecedor. A instalação depende do sistema operacional utilizado, mas instruções de instalação
podem ser encontrados em: http://docs.oracle.com/javase/7/docs/webnotes/install/index.html
Depois que o JDK estiver instalado, execute os seguintes comandos em um prompt de comando,
java -version e javac -version para confirmar se é possível executar os comandos e para identificar a
versão instalada. Como mostra a figura 7.
26
Figura 7: Verificando instalação do Java
3.1.2 Plug-in do Google para IDE Eclipse
Google Web Toolkit (GWT) é um Plug-in do Google para Eclipse que ajuda no
desenvolvimento de aplicações. O Plug-in permite que você crie, teste e envie aplicativos do App
Engine pelo Eclipse.
Você pode instalar o Plug-in usando o recurso Software Update (Atualização de software) do
Eclipse, instalaremos a versão para a última versão do Eclipse no momento, Eclipse 4.3 (Kepler).
Com o Eclipse aberto, selecione Help (Ajuda) > Install New Software... (Instalar novo software...).
Irá abrir uma janela para informarmos o Plug-in que deve ser instalado, conforme figura número 8.
Figura 8: Adicionando o link do Plug-in
27
Na janela da figura 8, devemos clicar em “Add” para adicionar o nome e o endereço, de onde o
Eclipse
deve
baixar
o
Plug-in.
O
endereço
que
dever
ser
inserido:
https://dl.google.com/eclipse/plugin/4.3 conforme a figura 9.
Figura 9: Adicionando nome e endereço do Download
Após o endereço ser adicionado, uma lista de ferramentas do Google App Engine, será
mostrada. Para o desenvolvimento de aplicações Web, é necessário apenas as opções requeridas e
recomendadas, mas adicionaremos todas as ferramentas, como mostra a figura 10.
Figura 10: Escolhendo as ferramentas
28
A próxima janela que será aberta, mostra os detalhes dos recursos que serão instalados, bastando
clicar em “Next”, como mostra a figura 11.
Figura 11: Detalhes dos recursos
A figura 12, mostra o processo de instalação, que pode levar alguns minutos.
Figura 12: Processo de instalação
29
3.1.3 Testando a instalação
Com a instalação concluída, para testar se tudo está funcionando, pode executar uma das várias
aplicações demos inclusos no SDK Java do App Engine. Se você usa o Eclipse, o SDK estará
localizado
no
diretório
de
instalação,
em
plugins/com.google.appengine.eclipse.sdkbundle_VERSION/, em que VERSION representa o
identificador de versão do SDK.
Para testar a instalação e executar um dos aplicativos demos, uma das opções é usar a linha de
comando, para isso, acesse a pasta do Plug-in no Eclipse, e execute o comando, como mostra as
ilustrações 13 e 14:
Se estiver usando o Mac OS X ou o Linux, execute o seguinte comando:
Figura 13: Comando para Linux e MAC OS, [6]
Se estiver usando o Windows, execute o seguinte comando:
Figura 14: Comando para Windows, [6]
3.2 Criando o primeiro Projeto
Os aplicativos Java do App Engine usam a norma Java Servlet para interagir com o ambiente do
servidor web. Os arquivos de um aplicativo, incluindo classes compiladas, JARs, arquivos estáticos
e de configuração, são organizados em uma estrutura de diretórios no layout padrão WAR para
aplicativos web Java. Você pode usar qualquer processo de desenvolvimento que desejar para
desenvolver servlets web e criar um diretório do WAR. Os arquivos do armazenamento WAR ainda
não são compatíveis com o SDK. [GOOGLE, 2013]
No Eclipse, crie um novo projeto, clicando no botão Web Application Project New na barra de
ferramentas: O botão Web Application Project New:
De um nome para o projeto, e um nome
30
para o pacote do mesmo, clique em finalizar, e será criado um novo projeto com a estrutura
mostrada na figura 15.
Figura 15: Estrutura do Projeto
•
src: Código fonte Java;
•
META-INF: Outras configurações;
•
war: JSP, imagens e arquivos de dados;
•
WEB-INF: Aplicativos de configuração;
•
lib: JARs, onde adicionamos as bibliotecas;
•
classes: Classes compiladas.
3.2.1 Olá Mundo
Os aplicativos em Java do App Engine usam a API Java Servlet para interagir com o servidor
web. Um servlet HTTP é uma classe de aplicativo que pode processar e responder a solicitações da
web.
Essa
classe
estende
javax.servlet.http.HttpServlet. [6]
a
classe
javax.servlet.GenericServlet
ou
a
classe
31
Crie um Servlet dentro do diretório “src” com o código mostrado na figura 16.
Figura 16: Olá Mundo
Após o desenvolvimento do código, execute aplicação em Run > Run As > Web Application.
Eclipse e o Plug-in do Google para Eclipse, o servidor será executado pela porta 8888 por padrão,
como mostra a figura 17.
Figura 17: Execução do Olá Mundo
32
3.3 Mural de Mensagens
O projeto demostrativo deste trabalho, será um Mural de mensagens, onde poderá ser postada
uma mensagem e a mesma será gravada no mural através da persistência utilizando JDO. O usuário
que estiver logado em uma conta do Google, aparecerá seu nome na mensagem, caso contrário, será
postado como anônimo.
3.4 Persistência
O Google App Engine, permite que realize persistência usando duas API Java. O JDO (Objeto
de dados Java) e JPA (API de persistência Java), no exemplo proposto deste trabalho, será utilizada
a primeira API citada.
3.4.1 DataNucleus Access Platform
O Access Platform precisa de um arquivo de configuração que especifique que ele usará o
armazenamento de dados do GAE, este arquivo é chamado jdoconfig.xml. E deve estar no diretório
war/WEB-INF/classes/META-INF/. Caso esteja utilizando o Eclipse com o Plug-in do Google App
Engine, este arquivo deve ser gerado automaticamente, caso o contrário, crie um com as
informações mostradas na figura 18.
Figura 18: Configurações JDO
33
3.4.2 Anotações JDO e POJOs
Devemos agora criar um POJO(Plain Old Java Objects), simples classes Java, com construtor e
Gets e Sets. Porém nestas classes adicionaremos anotações JDO para que possamos persisti-la na
plataforma da Google.
Para declarar uma classe Java como capaz de ser armazenada e recuperada do armazenamento
de dados com JDO, atribua a anotação @PersistenceCapable à classe. [6].
Campos da classe de dados que devem ser armazenados no armazenamento de dados devem ser
declarados como campos persistentes. Para declarar um campo como persistente, dê a ele uma
anotação @Persistent. [6]
Toda a classe deve conter um campo dedicado para a chave primaria, As chaves principais
exigem
uma
anotação
@PrimaryKey
e
uma
IdGeneratorStrategy.IDENTITY).
A figura 19, mostra um exemplo de classe anotada.
Figura 19: Classe com anotação JDO
anotação
@Persistent(valueStrategy
=
34
3.4.3 Fábrica de Conexão e persistence.xml
Cada solicitação que usa o armazenamento de dados cria uma instância nova da classe
PersistenceManager. Para fazer isso, ela usa uma instância da classe PersistenceManagerFactory.
Uma instância da PersistenceManagerFactory demora para ser inicializada. Felizmente, você só
precisa de uma instância para seu aplicativo e ela pode ser armazenada em uma variável estática
para ser usada por várias solicitações e várias classes. Uma maneira fácil de fazer isso através da
criação de uma única classe empacotadora para a instância estática.[6]
As figuras 20 e 21 ilustram nosso modelo de fábrica de conexão e persistência.
Figura 20: Exemplo de fábrica de conexão
O transactions-optional deve estar em seu persistence.xml:
35
Figura 21: persistence.xml
3.4.4 Servlet
A classe BtajdoServlet será responsável por criar e persistir nosso objeto. Para salvar a instância
no
armazenamento
de
dados,
ele
cria
um
PersistenceManager
usando
um
PersistenceManagerFactory e, em seguida, passa a instância para o método makePersistent() do
PersistenceManager. Depois que makePersistent() retorna, o novo objeto é armazenado no
armazenamento de dados.
A figura 22, ilustra nosso modelo.
36
Figura 22: Servlet
3.4.5 View (JSP)
Após a criação do Servlet devemos criar nossa JSP, que será responsável por mostrar as
informações no navegador do usuário, nossa visão deve ser editada com as informações que deseja
apresentar. A figura 23, ilustra nosso formulário.
Figura 23: JSP
3.4.6 JDOSQL
37
A norma JDO define um mecanismo para consultar objetos persistentes chamadas JDOQL. Você
pode usar o JDOQL para realizar consultas de entidades no armazenamento de dados do App
Engine e recuperar resultados como objetos aprimorados pelo JDO.
Realize uma consulta com a interface JDO através da JDOQL, uma linguagem de consultas do
tipo SQL para recuperação de objetos de dados. A linha a seguir define a sequência de caracteres da
consulta JDOQL. [6]
Um exemplo de consulta com JDOSQL pode ser visto na figura 24.
Figura 24: Exemplo de JDOSQL
3.4.7 Como enviar o projeto com a IDE Eclipse
Depois de pronto, para enviar o projeto para a plataforma da Google, é necessário criar um ID
único para o projeto, após a criação deste ID, temos a possibilidade de excluirmos, porém, não
poderemos usar o mesmo ID novamente.
Para criar o ID do projeto, acesse a URL: https://appengine.google.com/ . Será necessário ter
uma conta Google, caso não possua, a mesma pode ser criada preenchendo o formulário da URL:
https://accounts.google.com/SignUp?service=chromiumsync&continue=https%3A%2F
%2Fwww.google.com%2Fintl%2Fpt-BR%2Fchrome%2Fblank.html%3Fsource%3D1
Como mostra a figura 25.
38
Figura 25: Criando uma conta Google
Após finalizar a criação da conta Google, para criar o ID do projeto, clique em “Create
Application” e preenchendo os campos do formulário, como mostra as figuras 26 e 27.
Figura 26: Criando o ID do Projeto
Figura 27, vemos o formulário que deve ser preenchido.
39
Figura 27: Formulário do ID
No projeto edite o arquivo appengine-web.xml e, em seguida, altere o valor do elemento
<application> para corresponder ao ID de aplicativo que registrou. O arquivo deve estar na pasta
WEB-INF de sua aplicação.
A figura 28, mostra onde devemos adicionar o ID no projeto.
Figura 28: Adicionando o ID no Projeto
Pode enviar o código e os arquivos do projeto pelo Eclipse usando o Plug-in do Google. Para
enviar o projeto pelo Eclipse, clique no botão de implementação do App Engine na barra de
40
ferramentas:
.
Quando solicitado, digite o nome de usuário (seu endereço de e-mail) e a senha da Conta do
Google e, em seguida, clique no botão Enviar. O Eclipse coletará as informações de versão e ID do
aplicativo no arquivo appengine-web.xml e enviará os conteúdos do diretório war/. [6]
A figura 29, mostra o processo de envio do projeto no Eclipse.
Figura 29: Enviando o projeto
Em seguida, será aperto uma janela com o projeto já rodando na plataforma da Google, como
mostra a figura 30.
41
Figura 30: Projeto mural de mensagens
42
4 Conclusão
Este trabalho apresentou o que é, e como desenvolver aplicações para o Google App Engine.
Seus recursos também foram comparados com outro concorrente do mercado, assim foi possível
observar as vantagens e desvantagens de cada serviço.
O projeto final foi criado e adicionado na plataforma do Google, o mesmo seguiu os passos
propostos pela própria documentação oficial, e funcionou de acordo com o propósito apresentado
neste trabalho.
As configurações para chegarmos neste ponto, não são complicadas, a IDE Eclipse ajuda
bastante neste quesito, evitando que seja necessário recorrer ao terminal e a linha de comando, que
embora sejam efetivos, é mais sugestivo ao erro.
Na implementação do código fonte, nota-se que para desenvolver para o Google App Engine, é
necessário seguir algumas regras propostas pela tecnologia, principalmente para manter a
escalonamento do projeto. Estas regras acabam deixando o desenvolvimento mais engessado,
evitando que todo o poder das APIs Java sejam utilizadas. Neste ponto, o Elastic Beanstalk, da
Amazon, leva vantagem, pois pode utilizar todo o poder das APIs, porém o mau uso delas, pode
atrapalhar o escalonamento do projeto.
O deploy do projeto, mais uma vez é facilitado pela ajuda da IDE Eclipse, com o auxílio da
ferramenta, o projeto é enviado apenas com alguns poucos passos que deve ser tomados para evitar
problemas no envio.
Ferramenta para o desenvolvimento são oferecidas, e facilitam muito para a criação do projeto,
com a ajuda do Plug-in da Google, o desenvolvedor pode focar mais no projeto, deixando parte de
configurações para a Plug-in. Também é oferecido um framework o Google Tool Kit, que agiliza
ainda mais o desenvolvimento. Caso seja necessário, a ferramenta ainda pode ser utilizada através
da linha de comando, onde se mostra proporcionalmente efetivo.
Já na plataforma do Google App Engine, mesmo sendo um conta de limite gratuito, o projeto
apresentou bom desempenho, e sempre disponível para utilização do mesmo. Mostrando que é um
serviço confiável.
Computação em nuvens está se tornando cada vez mais presente, e Google junto com a
Amazon, foram pioneiras no assunto, e hoje apresentam diversas tecnologias e recursos para
computação em nuvens, e saem na frente neste quesito,
43
Como trabalho futuro, pode ser realizado um projeto utilizando os serviços da Amazon, e
realizar o deploy na infraestrutura oferecida, assim podemos comparar o desempenho e cada uma
das tecnologias, também poderá ser visto o desempenho da IDE Eclipse com o Plug-in oferecido
pela ferramenta Elastic Beanstalk.
44
5 Referência bibliográfica
[1] Pedrosa, Paulo H. C. e Tiago Nogueira. Computação em nuvens. Disponível em
<http://www.ic.unicamp.br/~ducatte/mo401/1s2011/T2/Artigos/G04-095352-120531-t2.pdf>.
Acessado em 10 out 2013 Apud BUYYA, Rajkumar; BROBERG, James; GOSCINSKI, Andrzej.
Cloud Computing Principles and Paradigms; 1. ed New Jersey, U.S. : John Wiley & Sons, Inc.
2011. 664p. ISBN: 978-0-470-88799-8
[2] Pedrosa, Paulo H. C. e Tiago Nogueira. Computação em nuvens. Disponível em
<http://www.ic.unicamp.br/~ducatte/mo401/1s2011/T2/Artigos/G04-095352-120531-t2.pdf>.
Acessado em 10 out 2013 Apud MELL, Peter; GRANCE, Timothy. The NIST Definition of Cloud
Computing (Draft). January 2011.
[3] Pedrosa, Paulo H. C. e Tiago Nogueira. Computação em nuvens. Disponível em
<http://www.ic.unicamp.br/~ducatte/mo401/1s2011/T2/Artigos/G04-095352-120531-t2.pdf>.
Acessado em 10 out 2013 Apud CHIRIGATI, Fernando Seabra. Computação em Nuvem. Rio de
Janeiro, RJ. 2009.
[4] Um estudo sobre os benefícios e os riscos de segurança na utilização de Cloud Computing.Fabrício
Rodrigues.
computing/>. Acessado
Disponível
em
<http://fabriciorhs.wordpress.com/2010/09/28/cloud-
em 15 nov 2013 Apud TAURION, C. Computação em Nuvem:
Transformando o mundo da tecnologia da informação. Rio de Janeiro: Brasport, 2009.
[5]
Cloud
Computing.-
Fabrício
Rodrigues.
Disponível
em
<http://fabriciorhs.wordpress.com/2010/09/28/cloud-computing/>. Acessado em 15 nov 2013
[6] Google App Engine. Disponível em <https://developers.google.com/appengine/?hl=pt-BR>.
Acessado em 9 ago 2013.
[7] AWS Elastic Beanstalk. Disponível em <http://aws.amazon.com/pt/elasticbeanstalk/>.
Acessado em 9 ago 2013.
45
Apêndices
46
Apêndice A – Classe BtajdoServlet
package btajdo;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
@SuppressWarnings("serial")
public class BtajdoServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(BtajdoServlet.class.getName());
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String content = req.getParameter("content");
Date date = new Date();
Mural mural = new Mural(user, content, date);
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(mural);
} finally {
pm.close();
}
47
resp.sendRedirect("/mural.jsp");
}
}
48
Apêndice B – Mural.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="javax.jdo.PersistenceManager" %>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="com.google.appengine.api.users.UserService" %>
<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>
<%@ page import="btajdo.Mural" %>
<%@ page import="btajdo.PMF" %>
<html>
<head>
<title>BRUNO THEDORO DE AQUINO</title>
</head>
<body>
<h1>Trabalho Final - Bruno Theodoro de Aquino</h1>
<%
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
%>
<p>Oi, <%= user.getNickname() %>! (você pode
<a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">sair</a>.)</p>
<%
} else {
%>
<p>Oi!
<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Entre</a>
para incluir o seu nome</p>
<%
}
%>
<%
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + Mural.class.getName();
List<Mural> ms = (List<Mural>) pm.newQuery(query).execute();
if (ms.isEmpty()) {
%>
<p>O livro de visitas não tem mensagens.</p>
<%
} else {
for (Mural g : ms) {
if (g.getAuthor() == null) {
%>
<p>Uma pessoa anônima escreveu:</p>
<%
49
} else {
%>
<p><b><%= g.getAuthor().getNickname() %></b> escreveu:</p>
<%
}
%>
<blockquote><%= g.getContent() %></blockquote>
<%
}
}
pm.close();
%>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Poste no Mural" /></div>
</form>
<form action="/mural.jsp" method="get">
<!-- <div><input type="submit" value="Mudar Livro de Visitas" /></div> -->
</form>
</body>
</html>
50
Apêndice C – Controle de Versão com Git.
Instalando o Git
Acesse o link: http://git-scm.com/book/pt-br/Primeiros-passos-Instalando-Git.
O Git é multiplataforma, e está disponível para Linux, Windows e MacOS. Instale seguindo os
passos para o sistema operacional adequado, mostrado no link.
Criando um Repositório Online
Acesse o link: https://bitbucket.org/
Existe alguns serviços que oferecem Repositórios nas nuvens, onde é armazenado as versões do
projeto. Clique em Sign up for free para criar uma conta gratuita, como mostra a Figura 31.
Figura 31
Acessando o link para criar uma conta, é exibira a tela da Figura 32. Basta preencher os campos
solicitados e clicar no botão Sign Up.
51
Figura 32: Fonte: Bitbucket. 2013
Após se criar uma conta, acesse a mesma com usuário e senha, e clique no botão Criar, e será
exibida a tela da Figura 33, preencha os dados, e clique no botão Criar repositório novo repositório
online.
Figura 33: Fonte: Bitbucket. 2013
52
Criado o repositório, clique em Estou começando do zero, e siga os passos da Figura 34 para
criar uma pasta do seu repositório local, iniciar o controle de versão e sincronizar com seu
repositório nas nuvens.
Figura 34: Fonte: Bitbucket. 2013
Enviando o projeto para Repositório nas nuvens.
Com os repositórios criados, adicionar as mudanças, confirme as mudança e envie o projeto
para o repositório nas nuvens criado. A Figura 35, mostra os passos no terminal de comando.
53
Figura 35
A Figura 36, mostra o projeto já presente no repositório nas nuvens.
Figura 36: Fonte: Bitbucket, 2013
Download