COMPUTAÇÃO NAS NUVENS: ESTUDO DE CASO DE...
-
Upload
duongkhuong -
Category
Documents
-
view
216 -
download
0
Transcript of COMPUTAÇÃO NAS NUVENS: ESTUDO DE CASO DE...
FACULDADE FARIAS BRITO CIÊNCIA DA COMPUTAÇÃO
SÉRGIO CARVALHO DE ABREU
COMPUTAÇÃO NAS NUVENS: ESTUDO DE CASO DE REFATORAÇÃO DE SISTEMA
Fortaleza - 2012
SÉRGIO CARVALHO DE ABREU
COMPUTAÇÃO NAS NUVENS: ESTUDO DE CASO DE REFATORAÇÃO DE SISTEMA
Monografia apresentada para obtenção dos créditos da disciplina Trabalho de Conclusão do Curso da Faculdade Farias Brito, como parte das exigências para graduação no Curso de Ciência da Computação. Orientador: Prof. MSc Leopoldo Soares de Melo Junior
Fortaleza - 2012
COMPUTAÇÃO NAS NUVENS: ESTUDO DE CASO DE REFATORAÇÃO DE SISTEMA
Sérgio Carvalho de Abreu
PARECER: APROVADO
NOTA: 9,0 Data: 16/06/2012
BANCA EXAMINADORA:
___________________________________ Prof. MSc Leopoldo Soares de Melo Junior
(Orientador)
___________________________________ Prof. MSc Maikol Magalhães Rodrigues
(Examinador)
__________________________________ Prof. Dr. Daniel Matos Alves
(Examinador)
RESUMO
A Computação nas Nuvens é um conceito onde várias tecnologias são utilizadas em
conjunto para fornecer serviços e recursos através da rede. Este trabalho pretende mostrar
alguns conceitos de Computação nas Nuvens. Serão mostradas algumas de suas tecnologias,
características, modelos de serviços e modelos de implantação. Também serão abordadas
algumas plataformas que fornecem recursos de nuvens, além de apontar alguns “desafios”.
Realizaremos um estudo de caso de refatoração e migração de sistema. Nele, serão abordados
alguns aspectos tais como: métodos de analise para migração de sistema para as nuvens;
requisitos e características funcionais; e vantagens do processo de migração.
AGRADECIMENTOS
Aos meus pais, Carlos e Marina por sempre me apoiarem e acreditarem em meu sonho e que
sem sua dedicação e incentivo, nada disso seria possível.
Aos meus tios, José e Benedita que me receberam em sua casa como um filho.
Aos meus irmãos, Lucas, Geovane e Hilsa por sempre se orgulharem de mim.
Ao meu orientador, Leopoldo Melo por sua inteligência e competência.
Aos meus colegas de faculdade, Elizeu, Evandir, Juscilando, Heráclito, Jackson, Thamires,
Helem e Charles que estiveram juntos comigo desde o início da jornada. E aos que encontrei
ao longo da estrada Marcela, Álan, Valrimar e Edivan.
À minha namorada Carolina, por seu carinho, apoio e paciência.
À minha “grande” família, por sua torcida e carinho.
Aos meus colegas de trabalho, por seu incentivo.
A todos os meus amigos, que contribuíram com minha formação profissional e pessoal. Em
especial ao Marcelo Teles, que me incentivou a “dar” o primeiro passo.
SUMÁRIO
1 INTRODUÇÃO ......................................................................................................... 11
2 COMPUTAÇÃO NAS NUVENS ............................................................................. 13
2.1 Tecnologias Relacionadas............................................................................... 15
2.2 Características.................................................................................................. 16
2.3 Camadas de Arquitetura.................................................................................. 17
2.4 Modelos de Serviços........................................................................................ 19
2.4.1 Infraestrutura como Serviço (Infrastructure as a Service – IaaS) ......... 20
2.4.2 Plataforma como Serviço (Platform as a Service – PaaS) .................... 20
2.4.3 Software como Serviço (Software as a Service – SaaS) ....................... 21
2.4.4 Tudo como Serviço – XaaS ................................................................... 22
2.5 Modelos de Implantação ................................................................................. 22
2.5.1 Nuvens Privadas .................................................................................... 23
2.5.2 Nuvens Públicas .................................................................................... 23
2.5.3 Nuvens Comunitárias ............................................................................ 24
2.5.4 Nuvens Híbridas .................................................................................... 24
2.6 Principais Plataformas .................................................................................... 24
2.6.1 Amazon ................................................................................................. 24
2.6.2 Google ................................................................................................... 26
2.6.3 Microsoft ............................................................................................... 27
2.7 Desafios .......................................................................................................... 28
3 MIGRAÇÃO DE SISTEMAS PARA AS NUVENS ............................................... 30
3.1 Refatoração ..................................................................................................... 31
3.2 Requisitos da Migração .................................................................................. 32
4 ESTUDO DE CASO ................................................................................................. 34
4.1 Visão Geral ...................................................................................................... 34
4.2 Freedom ERP ................................................................................................... 36
4.3 Plataforma Google ........................................................................................... 40
4.4 Implementação ................................................................................................. 41
4.4.1 Envio de email de Marketing ................................................................ 41
4.4.2 Agendamento de Tarefas ....................................................................... 42
4.5 Análise dos Resultados..................................................................................... 45
4.6 Vantagens e Desvantagens............................................................................... 47
5 CONCLUSÃO .......................................................................................................... 50
5.1 Contribuição e Trabalhos Futuros................................................................... 51
6 REFERÊNCIAS BIBLIOGRÁFICAS ..................................................................... 52
APÊNDICE ................................................................................................................... 57
LISTA DE FIGURAS
Figura 1 – Camadas de Arquitetura.
Figura 2 – Camadas de Serviço.
Figura 3 – Componentes do sistema antes da refatoração.
Figura 4 – Componentes do sistema depois da refatoração.
Figura 5 – Diagrama de componentes.
Figura 6 – Diagrama de pacotes.
Figura 7 – Classes do pacote org.freedom.modulos.crm.view.frame.utility.
Figura 8 – Principais métodos da classe FEnviaMail.
Figura 9 – Diagrama de pacotes do modulo CRM do subsistema freedom-fw1.
Figura 10 – Classes do pacote org.freedom.crm do subsistema freedom-fw1.
Figura 11 – Classe FAgenda.
LISTA DE TABELAS
Tabela 1 – Comunicação Síncrona e Assíncrona.
Tabela 2 – Métodos para acessar o Google Agenda.
Tabela 3 – Números da refatoração.
LISTA DE ABREVIATURAS E SIGLAS
AWS Amazon Web Services
Amazon EC2 Amazon Elastic Compute Cloud
Amazon RDS Amazon Relational Database Service
Amazon SQS Amazon Simple Queue Sevice
Amazon S3 Amazon Simple Storage Service
Amazon VPC Amazon Virtual Private Cloud
API Application Programming Interface
GFS Google File System
HuaaS Human as a Service
HaaS Hardware as a Service
IaaS Infrastructure as a Service (Infraestrutura como Serviço)
JVM Java Virtual Machine
NIST National Institute of Standards and Technology
PaaS Platform as a Service (Plataforma como Serviço)
QoS Quality of Service
SaaS Software as a Service (Software como Serviço)
SLA Service Level Agreements
VM Virtual Machine
XaaS Tudo como Serviço
1 INTRODUÇÃO
Eventualmente surgem no mundo da tecnologia novas tendências e conceitos que são
consideradas promessas e que, de repente, tornam-se realidades. Quando Eric Schmidt do
Google usou pela primeira vez o termo “Computação nas Nuvens”, em 2006, em uma palestra
sobre o gerenciamento de datacenters, ele não sabia como esse termo seria bastante discutido,
e como seria utilizado para a definição de uma ideia simples, mas poderosa (TAURION,
2009).
Computação nas Nuvens é uma ideia que reúne várias tecnologias existentes, de uma
forma inovadora, provendo novos modelos de serviços. Ela pode ser entendida como um
conceito que consiste basicamente em ter acesso à infraestrutura e ferramentas, hoje
disponíveis localmente, através da Internet como um serviço, assim como água, luz e telefone.
(RAMOS; ESES, 2010; SOUSA; MOREIRA; MACHADO, 2009).
Pouco tempo passou, e o conceito ganhou vários adeptos e muitas empresas
começaram a implantar e “fornecer” nuvens, como a Amazon, Google, IBM. Com isso,
pequenas e médias empresas foram beneficiadas, pois elas passaram a dispor de recursos
computacionais ubíquos, sob demanda, podendo reduzir seus custos e se concentrar apenas no
objetivo de seu negócio deixando toda a “responsabilidade” tecnológica nas mãos das
empresas “fornecedoras” de nuvens.
Os usuários também foram beneficiados, pois eles passaram a dispor de recursos
computacionais exatamente na quantidade que precisam pagando somente pelo utilizado.
Além disso, eles passaram a acessar seus dados de qualquer lugar, precisando apenas de um
12 navegador web para acessar seus arquivos e aplicativos. Como exemplo dessa facilidade,
podemos citar os serviços de nuvens da Google, mais conhecidos como Google Drive, onde
processadores de texto, planilhas, correio eletrônico e agenda são disponibilizados
gratuitamente, sem a necessidade de instalação de software local (BOLSONI; CARDOSO;
SOUZA, 2009).
No entanto, por ser um paradigma novo, a Computação nas Nuvens possui inúmeras
definições diferentes, mas todas com muitos pontos em comum que esclarecem e completam
o conceito de nuvens. Essas definições citam características que, em geral, são os benefícios
que as nuvens oferecem como: escalabilidade, desempenho, pagamento somente pelo o que
foi utilizado, facilidade no compartilhamento e acesso aos dados (RAMOS; ESES, 2010).
Além dos benefícios que as nuvens oferecem, ao implantá-la, as empresas devem levar
em consideração um ponto importante: seus recursos tecnológicos atuais. Não apenas os
equipamentos físicos como computadores, servidores e datacenters, mas elas precisam
analisar quais sistemas “perderão” sua utilidade e quais serão “refeitos” para o novo
paradigma. Para isso, pode-se utilizar técnicas de refatoração, que consiste em modificar
partes internas de um sistema sem alterar sua funcionalidade (FOWLER, 2004).
O propósito desse trabalho é realizar um estudo da arquitetura das nuvens, suas
tecnologias, características, conceitos e serviços, e pesquisar a migração de serviços para as
nuvens. Esse estudo vai permitir analisar a viabilidade de sistemas que possam ser refatorados,
para que parte dele, ou o sistema completo, fique nas nuvens e parte em infraestrutura interna.
Com esse objetivo será realizado um estudo de caso de refatoração de sistema.
2 COMPUTAÇÃO NAS NUVENS
O termo Cloud Computing (Computação nas Nuvens ou Computação em Nuvens) tem
ganhado nos últimos tempos grande atenção no mundo da tecnologia. Agora não mais como
uma promessa de um novo modelo computacional, mas como uma realidade já implantada e
utilizada por diversas empresas e usuários.
No entanto, por ainda ser um paradigma novo, não há um consenso que defina de uma
forma clara e universal o conceito de Computação nas Nuvens. Na realidade, ela possui várias
definições e muitas outras ainda podem aparecer ou evoluir (VERDI et. al., 2010). Com isso,
podemos encontrar várias definições diferentes na literatura, mas que possuem muitos pontos
em comum. A seguir mostraremos algumas delas.
Para Sousa; Moreira e Machado (2009, p. 3) Computação nas Nuvens é “uma
metáfora para a Internet ou infraestrutura de comunicação entre os componentes arquiteturais,
baseada em uma abstração que oculta à complexidade de infraestrutura”. Com a utilização da
Internet, a arquitetura das nuvens, como serviços, modelos de implantação e características,
torna-se transparente para os usuários.
No caso de Bolsoni; Cardoso e Souza (2009, p.4), os autores descrevem que a nuvem
“consiste no compartilhamento de dispositivos e ferramentas através da interligação dos
sistemas, sempre disponíveis, em que não há mais ferramentas e softwares locais, mas nas
nuvens”.
14
Para Mell e Grance (2011, p.2), do NIST (National Institute of Standards and
Technology), a Computação nas Nuvens é:
Um modelo que possibilita acesso, de modo conveniente e sob demanda, a
um conjunto de recursos computacionais configuráveis (por exemplo, redes,
servidores, armazenamento, aplicações e serviços) que podem ser
rapidamente adquiridos e liberados com o mínimo de esforço gerencial ou
interação com provedor de serviços.
Cearley (2010, p.2), vice-presidente de pesquisas do GARTNER FELLOW, diz que
Computação nas Nuvens é um “um estilo computacional no qual as capacidades de tecnologia
podem ser massivamente escaláveis, consumidas no padrão como serviço e rodando sobre
plataformas de Internet”.
Além de fazer um amplo levantamento de várias definições de Computação nas
Nuvens, Vaquero et. al. (2009, p.2) propõem a seguinte definição:
Cloud computing é um conjunto de recursos virtuais facilmente usáveis e
acessíveis tais como hardware, plataformas de desenvolvimento e serviços.
Estes recursos podem ser dinamicamente reconfigurados para se ajustarem a
uma carga variável, permitindo a otimização do uso dos recursos. Este
conjunto de recursos é tipicamente explorado através de um modelo pay-per-
use com garantias oferecidas pelo provedor através de acordos de nível de
serviço (Service Level Agreements-SLAs).
Como podemos perceber, existem vários conceitos referentes à tecnologia nas nuvens, e em resumo, podemos dizer que a Computação nas Nuvens “pode ser entendido como um conceito que consiste em, basicamente, ter acesso a serviços, estrutura e ferramentas, hoje presente nos computadores pessoais ou locais, através da Internet” (RAMOS; ESES, 2010, p.2).
15 2.1 TECNOLOGIAS RELACIONADAS
A nuvem é confundida com algumas tecnologias existentes. No entanto a ideia das
nuvens é mais abrangente e chega a englobar muitas dessas tecnologias para prover todos os
serviços advindos de sua definição (ZHANG; CHENG; BOUTABA, 2010). A seguir,
exploraremos as tecnologias mais importantes.
Grid Computing, segundo Bombonato (2002, p. 4) apud Gentzsch (2002) é:
Uma infraestrutura de hardware e software que oferece dependência,
consistência e facilidade de acesso a recursos que possibilitem o
compartilhamento de tais recursos computacionais, computação utilitária,
computação automática, colaboração em um grupo de organizações virtuais
(VOs) e processamento de dados distribuído, dentre outros.
Também conhecida como Computação em Grades, ela contém muitas características
semelhantes com a Computação nas Nuvens como: redução de custos, aumento da
flexibilidade e confiabilidade (VAQUERO, et. al. 2009). Porém, diferentemente da grade, as
nuvens possuem capacidades administrativas, sem a necessidade de gerenciamento,
escalonamento e monitoramento de recursos, sendo que seu fornecimento é realizado de
forma dinâmica (BARBOSA; CHARÃO, 2009; VIEDI et. al., 2010). As nuvens empregam a
tecnologia de grades ao compartilhar recursos virtuais entre as diversas camadas de serviços
(IaaS, PaaS, SaaS) (ZHANG; CHENG; BOUTABA, 2010).
Virtualização (Virtualization) refere-se à abstração de recursos computacionais físicos.
Ela fornece reservas de recursos através de Máquinas Virtuais (VM), que abstraem a parte
física fornecendo recursos virtuais equivalentes como discos virtuais, memórias virtuais,
CPUs virtuais, etc. (HESS; NEWMAN, 2009). As características da virtualização se mostram
fundamentais para as nuvens, pois o provimento adequado das camadas de arquiteturas e
modelos de serviços só é possível graças às técnicas de virtualização. Além disso, a
virtualização torna mais flexível o provimento dinâmico de recursos, gerando uma eficiente
escalabilidade (WANG et. al., 2008). As nuvens utilizam o conceito de virtualização ao
fornecer recursos computacionais dos servidores, clustes e datacenters na camada de
16 hardware (ZHANG; CHENG; BOUTABA, 2010). Diferente da virtualização, as nuvens
fornecem capacidade de gerenciamento.
Utility Computing ou Computação Utilitária é um conjunto de recursos de tecnologia
como servidores e armazenamento, fornecidos como serviços escaláveis dinamicamente sob
demanda e na medida certa, com custo previsível (BUNKER; THOMSON, 2006). Na prática
os usuários obtêm recursos computacionais nas nuvens da mesma forma que os serviços de
água, luz, telefone, etc. Ao fornecer recursos computacionais e cobrar apenas pela quantidade
utilizada, levando em consideração o SLA, a Computação nas Nuvens está utilizando o
conceito de Utility Computing.
Computação autonômica (Autonomic Computing) é uma definição para sistemas com
capacidade de autogerenciamento com o mínimo de intervenção humana. O termo deriva do
sistema nervoso central, um sistema que controla suas funções sem consciência ou
envolvimento (IBM, 2011). O provimento automático de recursos, à medida que o usuário
utiliza, e configurações dinâmicas de hardware e software dentro das nuvens são exemplos de
como a Computação nas Nuvens utiliza a Computação Autonômica.
2.2 CARACTERÍSTICAS
O modelo de nuvens é composto por cinco características essenciais (MELL;
GRANCE, 2011). Elas serão exploradas a seguir.
Self-Service sob demanda: o consumidor pode adquirir novos recursos à medida que
precisar, sem a necessidade de interação humana com o servidor de serviços.
Amplo acesso à rede: os clientes podem acessar os recursos que estão disponíveis na
rede através de ferramentas heterogêneas como navegadores web e celulares.
Conjunto de Recursos: os provedores de recursos podem atender vários consumidores
simultaneamente, alocando recursos dinamicamente de acordo com a demanda.
Armazenamento, processamento e memória são exemplos de conjunto de recursos.
Elasticidade: recursos podem ser adquiridos e liberados rapidamente em qualquer
quantidade e a qualquer momento. São ilimitados para o consumidor.
17
Medição de Serviço: as nuvens provêm controle e otimização automáticos da
utilização dos recursos. Essa automação é realizada de acordo com o serviço, como
armazenamento, processamento, etc. A utilização dos recursos pode ser medido, tornando
claro para o consumidor e para o provedor de nuvens quais os serviços que estão sendo
consumidos.
Outras características importantes que também compõem o modelo de Computação
nas Nuvens são (TAURION, 2009):
Abstração da infraestrutura e a distribuição geográfica dos sistemas: questões
administrativas e gerencias permitem a autonomia dos diversos sistemas.
Heterogeneidade: diversos sistemas com tecnologias diferentes compõem a nuvem.
Escalabilidade: a nuvem pode crescer dinamicamente com a inclusão de novos
sistemas ao sistema existente.
Adaptabilidade: a nuvem possui a capacidade de se manter funcionando mesmo em
caso de falha de alguma parte do sistema.
2.3 CAMADAS DE ARQUITETURA
As nuvens podem ser divididas em quatro camadas: Camada de hardware, de
Infraestrutura, de Plataforma e de Aplicações. Cada camada serve de base para as camadas
superiores, bem como, para os vários serviços oferecidos pelas nuvens tais como: IaaS, PaaS,
SaaS, etc. Esses serviços serão detalhados em seções posteriores.
A Camada de Hardware é composta pela parte física. Nela se encontram os recursos
computacionais propriamente ditos, como por exemplo: servidores, datacenters,
computadores e seus sistemas operacionais, clusters, recursos de memória e processamento.
A Camada de Infraestrutura, por sua vez, é responsável pela virtualização dos recursos.
Ela é uma middleware que gerencia a infraestrutura física e fornece uma visão de alto nível
para as camadas superiores (SOUSA; MOREIRA; MACHADO, 2009).
A seguir temos a Camada de Plataforma, que consiste basicamente
de sistemas operacionais, ambientes de desenvolvimento e
BOUTABA, 2010). Nela é possível construir e executar aplicações nas nuvens.
Por último, temos a Camada de Aplicação. A camada que fornece o maior nível d
abstração para os usuários. Nela “estão os portais de acesso e os programas que exploram a
potencialidade das nuvens” (TAURION, 2009. p.45). As aplicações que executam nessa
camada, podem tirar proveito de recursos como: disponibilidade, custo operaciona
dimensionamento automático (ZHANG; CHENG; BOUTABA, 2010).
A figura 1, baseada no trabalho de Zhang; Cheng e Boutaba (2010), exemplifica as
camadas de arquitetura. Observe como cada camada é responsável por prover um tipo de
serviço (IaaS, PaaS, SaaS).
Figura 1 - Camadas de Arquitetura
A seguir temos a Camada de Plataforma, que consiste basicamente
de sistemas operacionais, ambientes de desenvolvimento e frameworks
BOUTABA, 2010). Nela é possível construir e executar aplicações nas nuvens.
Por último, temos a Camada de Aplicação. A camada que fornece o maior nível d
abstração para os usuários. Nela “estão os portais de acesso e os programas que exploram a
potencialidade das nuvens” (TAURION, 2009. p.45). As aplicações que executam nessa
camada, podem tirar proveito de recursos como: disponibilidade, custo operaciona
dimensionamento automático (ZHANG; CHENG; BOUTABA, 2010).
A figura 1, baseada no trabalho de Zhang; Cheng e Boutaba (2010), exemplifica as
camadas de arquitetura. Observe como cada camada é responsável por prover um tipo de
Camadas de Arquitetura. Fonte: Zhang; Cheng e Boutaba, 2010,
18
A seguir temos a Camada de Plataforma, que consiste basicamente de uma plataforma
frameworks (ZHANG; CHENG;
BOUTABA, 2010). Nela é possível construir e executar aplicações nas nuvens.
Por último, temos a Camada de Aplicação. A camada que fornece o maior nível de
abstração para os usuários. Nela “estão os portais de acesso e os programas que exploram a
potencialidade das nuvens” (TAURION, 2009. p.45). As aplicações que executam nessa
camada, podem tirar proveito de recursos como: disponibilidade, custo operacional baixo e
A figura 1, baseada no trabalho de Zhang; Cheng e Boutaba (2010), exemplifica as
camadas de arquitetura. Observe como cada camada é responsável por prover um tipo de
Zhang; Cheng e Boutaba, 2010, p. 9.
2.4 MODELOS DE SERVIÇOS
Com o advento da Computação nas Nuvens e o seu paradigma
- desenvolveu-se uma forma diferente de consumo de serviços de Tecnologia, os do tipo
pague o que consumir, tornando a capacidade dos serviços oferecidos pelas nuvens “infinitos”
(VERDI et. al., 2010. SOUSA; MOREIRA; MACHADO, 2009).
Os serviços fornecido
serviço SLA (Service Level Agreement
fornecidos pela empresa contratada. O SLA é a garantia do serviço, ou seja, a qualidade do
serviço (QoS – Quality of Service
recursos (VERDI et. al., 2010).
As nuvens não ficam limitadas apenas aos consumidores. Com seu modelo de serviço,
elas proveem suporte não apenas para usuários consumidores de serv
empresas que pretendam colocar toda sua infraestrutura
(SOUSA; MOREIRA; MACHADO, 2009)
A definição de nuvens possui três modelos de serviços (MELL; GRANCE, 2011). A
figura 2 mostra os principais mode
estes modelos.
ODELOS DE SERVIÇOS
Com o advento da Computação nas Nuvens e o seu paradigma -
se uma forma diferente de consumo de serviços de Tecnologia, os do tipo
pague o que consumir, tornando a capacidade dos serviços oferecidos pelas nuvens “infinitos”
(VERDI et. al., 2010. SOUSA; MOREIRA; MACHADO, 2009).
Os serviços fornecidos pelas empresas são acertados através de acordo de nível de
Service Level Agreement), que mostra ao consumidor quais serviços serão
fornecidos pela empresa contratada. O SLA é a garantia do serviço, ou seja, a qualidade do
ity of Service) contratado, e nele se definem preços e características dos
recursos (VERDI et. al., 2010).
As nuvens não ficam limitadas apenas aos consumidores. Com seu modelo de serviço,
elas proveem suporte não apenas para usuários consumidores de serviços, mas também para
empresas que pretendam colocar toda sua infraestrutura de TI, ou parte dela, nas nuvens
(SOUSA; MOREIRA; MACHADO, 2009).
A definição de nuvens possui três modelos de serviços (MELL; GRANCE, 2011). A
figura 2 mostra os principais modelos de serviços das nuvens. As seções a seguir detalham
Figura 2 - Camadas de Serviço
19
recursos como serviço
se uma forma diferente de consumo de serviços de Tecnologia, os do tipo
pague o que consumir, tornando a capacidade dos serviços oferecidos pelas nuvens “infinitos”
s pelas empresas são acertados através de acordo de nível de
), que mostra ao consumidor quais serviços serão
fornecidos pela empresa contratada. O SLA é a garantia do serviço, ou seja, a qualidade do
) contratado, e nele se definem preços e características dos
As nuvens não ficam limitadas apenas aos consumidores. Com seu modelo de serviço,
iços, mas também para
TI, ou parte dela, nas nuvens
A definição de nuvens possui três modelos de serviços (MELL; GRANCE, 2011). A
los de serviços das nuvens. As seções a seguir detalham
20 2.4.1 Infraestrutura como Serviço (Infrastructure as a Service – IaaS).
Segundo Souza; Moreira e Machado (2009, p.7), “IaaS é a parte responsável por
prover toda a infraestrutura necessária para a PaaS e o SaaS”. Seu foco é a distribuição de
recursos de infraestrutura como, hardware, armazenamento e processamento, na forma de
serviço, onde o usuário possui o controle virtual da parte física utilizando ferramentas de
virtualização.
Na prática, os recursos do IaaS são fornecidos como máquinas virtuais (VM – Virtual
Machine). O consumidor, ou empresa, ao contratar um serviço do tipo “IaaS”, define quais as
configurações de sua VM. Por exemplo, ele poderia adquirir uma VM com 2 Gigabytes de
memória RAM, 320 Gigabytes de capacidade de armazenamento e um “processador” com
1,6GHz de capacidade e processamento.
Nesse modelo de serviço, a alocação, o desempenho e a disponibilidade dos recursos
ficam nas nuvens. O consumidor não exerce funções de gerenciamento. Ele obtém uma visão
de alto nível dos recursos disponíveis e apenas decide como utilizá-los.
O IaaS possui duas características importantes: elasticidade e escalabilidade. Isso
permite a construção de ambientes de desenvolvimento e execução de aplicativos,
aumentando ou diminuindo os recursos necessários de acordo com a necessidade, pagando
apenas pela quantidade de serviço utilizado (CHAGANTI, 2010). Assim, o IaaS, fornece
acesso de alto nível à infraestrutura física no modelo de serviço, de forma transparente,
escalar e virtual.
2.4.2 Plataforma como Serviço (Platform as a Service – PaaS).
O PaaS fornece os recursos necessários para o desenvolvimento e execução de
aplicativos e para questões de segurança. Nele, há acesso a linguagens de programação e a
sistemas operacionais (SOUSA; MOREIRA; MACHADO, 2009), bem como opções de banco
de dados.
Nesse modelo de serviço, o desenvolvedor encontra disponível um ambiente de alto
nível, altamente integrado, para construir, testar e executar seus projetos (XU; LIU, 2010).
21 Além disso, o servidores de PaaS, geralmente fornecem para os consumidores, alguma API
(Application Programming Interface) própria, que é incompatível com outras APIs de
terceiros (NAGAPRASAD et. al., 2010).
2.4.3 Software como Serviço (Software as a Service – SaaS).
Entende-se por software como serviço, a capacidade de fornecer aplicações através da
arquitetura das nuvens, utilizado a Internet. O consumidor necessita apenas de uma
ferramenta simples de acesso, como um navegador web (MELL; GRANCE, 2011).
No SaaS, as aplicações não precisam ser instaladas localmente. Elas ficam disponíveis
nas nuvens, onde podem ser acessadas de qualquer lugar através da Internet.
Geralmente implantada sobre os serviços de IaaS e PaaS, uma de suas principais
características é o baixo custo. Nesse modelo de serviço, o consumidor paga somente pelo
percentual utilizado e não comprando licenças completas para utilização do software, como
acontece com o paradigma atual. Outra característica desse serviço, é que o consumidor não
fica responsável pelo gerenciamento dos recursos ou controle da infraestrutura base, podendo
focar todo o seu trabalho no uso do software (SOUZA; MOREIRA; MACHADO, 2009;
MELL; GRANCE, 2011).
Outro ponto importante desse modelo de serviço é escalabilidade para o provimento de
recursos e o tempo reduzido para utilização do serviço contratado. Para começar a utilizar o
serviço, o consumidor e a empresa fornecedora definem um contrato - SLA (Service Level
Agreement) que define quais os direitos do consumidor em caso de falha do fornecedor. Uma
grande vantagem do SaaS, é que o consumidor não precisa montar uma infraestrutura prévia
para começar a utilizar o serviço. E quando existir a necessidade de aumento de recursos, o
consumidor simplesmente paga um pouco há mais por isso. Essa aquisição de novos recursos
e aumento da capacidade é transparente para o consumidor.
22 2.4.4 Tudo como Serviço – XaaS
Computação nas Nuvens é um modelo emergente que provê “Everything as a Service”
(XaaS), ou seja, a nuvem é composta por uma pilha de serviços (LENK et. al., 2009). Os
principais serviços são: IaaS, PaaS, SaaS, que já foram abordados anteriormente. Nesta seção
mostraremos outros serviços fornecidos pelas as nuvens.
Hardware como Serviço (Hardware as a Service - HaaS): Resultado do avanço das
técnicas de virtualização e automação. Os usuários podem adquirir equipamentos de TI no
modelo pay-as-a-go, ou seja, apenas o que precisarem. É escalável, gerenciável e flexível
(WANG et. al., 2008).
Banco de Dados como Serviço (Database as a Service): Fornecimento de serviços de
banco de dados nas nuvens (HOGAN, 2008).
Dados como Serviço (Data as a Service): Os usuários tem acesso, seja local ou através
da rede, a diversas fontes de dados, em formatos e locais diferentes (WANG et. al., 2008).
Humanos como Serviço (Human as a Service- HuaaS): Camada mais alta da pilha de
recursos das nuvens. Quando pessoas utilizam ferramentas, ou recursos, para resolver
problemas e extrair informações de um conjunto de pessoas (WANG et. al., 2008).
Teste como Serviço (Testing as a Service): Recursos de testes de aplicativos em
nuvens (HP, 2011).
2.5 MODELOS DE IMPLANTAÇÃO
Para atender a demanda de seus clientes e funcionários por serviços e recursos, as
empresas podem implantar sua infraestrutura em diferentes modelos, cada um com suas
características e tecnologias próprias. “Tratando-se do acesso e disponibilidade de ambientes
de computação em nuvem, têm-se diferentes tipos de modelos de implantação” (SOUSA;
23 MOREIRA; MACHADO, 2009). Mell e Grance (2011) definem quatro modelos que serão
explorados nas seções a seguir.
2.5.1 Nuvens Privadas
No modelo privado a infraestrutura de nuvem é utilizada exclusivamente pela
organização. Pode ser gerenciada pela própria organização ou por fornecedores externos
(MELL; GRANCE, 2011).
A grande vantagem desse modelo é que a nuvem está instalada dentro das
dependências da empresa. Assim, muitas preocupações com segurança causadas pela
hospedagem fora da infraestrutura da empresa, são eliminadas. Para isso, são utilizados
políticas de segurança, controles de acesso e métodos de autorização e autenticação (SOUSA;
MOREIRA; MACHADO, 2009).
No entanto, por ser instalada em servidores da própria empresa, não oferece os
benefícios de outros modelos de nuvens, como custo reduzido, flexibilidade e escalabilidade.
Uma alternativa seriam as Nuvens Privadas Virtuais, em que possuem os benefícios das
nuvens públicas de terceiros com as restrições internas de segurança (ZHANG; CHENG;
BOUTABA, 2010), ou seja, contrata-se uma nuvem pública, e está deixa a cargo do cliente
toda a responsabilidade com relação a questões de segurança, configuração e gerenciamento,
fornecendo apenas os recursos necessários.
2.5.2 Nuvens Públicas
No modelo público, a infraestrutura é disponibilizada por provedores para empresas e
usuários em geral. Para utilizá-las basta saber a localização física dos recursos e utilizar a
Internet para acessá-la, sem necessidade de investimentos iniciais em infraestrutura.
O ponto fraco desse modelo é com relação à segurança. A privacidade do usuário se
torna mais vulnerável, pois informações pessoais ficam sob a responsabilidade de terceiros
(NAGAPRASAD et. al., 2010).
24 2.5.3 Nuvens Comunitárias
A implantação desse modelo ocorre quando várias empresas possuem algum interesse
em comum, como a mesma missão e políticas de segurança (SOUSA; MOREIRA;
MACHADO, 2009). Nas Nuvens Comunitárias há o compartilhamento de aplicações,
infraestrutura e acesso aos dados.
As empresas em conjunto contratam um serviço de nuvem que pode ser gerenciado
por uma empresa que faz parte da comunidade ou por uma empresa externa ao grupo.
2.5.4 Nuvens Híbridas
São a combinação de dois ou mais modelos de nuvens (privada, comunitária ou
pública), que permanecem independentes, mas unidas por padronização ou tecnologias
proprietárias (MELL; GRANCE, 2011).
Esse modelo combina as vantagens de cada abordagem, como a flexibilidade das
nuvens públicas e a segurança das nuvens privadas, para suprir as limitações de cada tipo de
nuvem (ZHANG; CHENG; BOUTABA, 2010). Por exemplo, sistemas de missão críticas
podem ficar em nuvens privadas enquanto que a escalabilidade e a elasticidade podem ser
resolvidos através de nuvens públicas (NAGAPRASAD et. al., 2010).
2.6 PRINCIPAIS PLATAFORMAS
Esta seção analisa algumas empresas que se destacam com seus produtos e serviços.
2.6.1 Amazon
A Amazon foi uma das pioneiras em adotar e fornecer o conceito de Computação nas
Nuvens. Ela possui um conjunto de serviços que fornecem recursos nas nuvens, para
25 empresas e usuários, chamados de Amazon Web Services (AWS) (AMAZON, 2011). A seguir
serão relacionados os principais serviços de nuvens da Amazon.
Amazon CloudFront é um serviço voltado para a entrega de conteúdo, integrando-se
com outras ferramentas. Ela fornece facilidade de distribuição de conteúdo para usuários e
empresas AWS (AMAZON, 2011).
Amazon Elastic Compute Cloud (Amazon EC2) é um serviço que provê recursos
escaláveis para usuários, como máquinas virtuais. Ela permite uma rápida configuração com o
mínimo de interação humana. Nesse serviço o usuário paga somente pela quantidade de
recursos utilizados (AMAZON, 2011).
Amazon Relational Database Service (Amazon RDS) fornece capacidades de
gerenciamento, escalonamento e configuração de banco de dados relacional nas nuvens. Ela
fornece recursos similares ao MySQL, permitindo que bancos de dados existentes com essa
tecnologia funcionem perfeitamente com o Amazon RDS (AMAZON, 2011).
Amazon SimpleDB é similar ao Amazon RDS, disponibilizando recursos escaláveis e
flexíveis para banco de dados. No entanto essa capacidade é apenas para banco de dados não
relacionais. Ela é altamente disponível e necessita de pouco interação administrativa
(AMAZON, 2011).
Amazon Simple Queue Sevice (Amazon SQS) permite a troca de mensagens entre
aplicações que estão disponibilizadas nas nuvens e entres componentes do AWS. Os
aplicativos que trocam as mensagens não precisam estar disponíveis, permitindo uma maior
flexibilidade (AMAZON, 2011). Além disso, esse serviço é um importante mecanismo
assíncrono de integração entre sistemas.
Amazon Simple Storage Service (Amazon S3) fornece recursos de armazenamento. O
usuário tem acesso a seus dados de qualquer lugar utilizando a Internet. Essa tecnologia foi
desenvolvida para prover escalonamento “simples” para os usuários. Esse serviço também é
utilizado pela própria Amazon para sua infraestrutura de sites (AMAZON, 2011).
26
Amazon Virtual Private Cloud (Amazon VPC) aplica o conceito de nuvem privada
para fornecer uma versão isolada do AWS (AMAZON, 2011). Com o Amazon VPC você
pode configurar uma topologia de rede dentro das nuvens. Além disso, pode criar uma VPN
(Vitual Private Network – Rede Privada Virtual) entre o datacenter da empresa e o serviço.
2.6.2 Google
O Google foi uma das primeiras empresas a fornecer serviços nas nuvens. A seguir
listaremos seus principais serviços.
Google Apps é um conjunto de ferramentas de colaboração disponíveis para os
usuários através da Internet. Dentre as categorias de aplicativos fornecidos estão: soluções de
email (Gmail™), mensagens instantâneas (Google Talk), agendas (Google Agenda), edição e
armazenamento de documentos (Google Drive), intranet e compartilhamento de documentos
(Google Sites) e compartilhamento de vídeos (Google Videos) (GOOGLE, 2011).
Google App Engine é uma plataforma voltada para o desenvolvimento e execução de
aplicativos utilizando a infraestrutura do Google (GOOGLE, 2011). Nela é possível aumentar
a capacidade do seu aplicativo á medida que o armazenamento e o trafego de dados do
aplicativo crescer, fornecendo escalabilidade de recursos. Inicialmente o usuário tem acesso
gratuito aos serviços, e se houver a necessidade de recursos extras ele somente paga pelo o
que ultrapassar a conta gratuita. O Google App Engine fornece dois ambientes de execução. O
primeiro baseado na tecnologia Java, o usuário pode desenvolver seus aplicativos utilizando
recursos da linguagem como a JVM (Java Virtual Machine) e servlets, bem como outras
linguagens que tenha por base o interpretador JVM, como JavaScript e Ruby (GOOGLE,
2011). O segundo ambiente de execução é baseado na tecnologia Phython, fornecendo um
interpretador Python e suas bibliotecas padrões.
Google File System (GFS) é um sistema de arquivos distribuídos e escaláveis
(GHEMAWAT; GOBIOFF; LEUNG, 2003). Fornece recursos de armazenamentos e
processamento de dados.
27
Big Table é um sistema de armazenamento de dados estruturados (CHANG et. al.,
2006). Ele utiliza o GFS para fornecer serviços de gerenciamento e acesso a banco de dados.
No entanto é um banco do tipo “chave-valor”, e não relacional como acontecem como os
bancos de dados tradicionais.
2.6.3 Microsoft
A Microsoft também disponibiliza serviços nas nuvens. A plataforma Windows Azure
Platform é um conjunto de serviços que disponibilizam recursos para o desenvolvimento e
hospedagem de aplicativos nas nuvens (WINDOWS AZURE, 2011). Serão apresentados a
seguir os principais componentes.
O Windows Azure fornece aos usuários recursos computacionais de armazenamento,
rede, hospedagem e desenvolvimento. Com ele é possível escalar e gerenciar os aplicativos
que estão nas nuvens através da Internet.
Microsoft SQL Azure fornece serviço de dados nas nuvens. Ela inclui as capacidades
de comunicação e sincronização, além de prover recursos de banco de dados relacional.
Microsoft SQL Azure Database pertence ao componente Microsoft SQL Azure. Ele é
um banco de dados relacional nas nuvens baseado na tecnologia do SQL Server. Ele fornece
alta disponibilidade e tolerância a falhas. Além disso, não há a necessidade de gerenciamento
ou configuração de aplicativos (WINDOWS AZURE, 2011).
Windows Azure AppFabric é uma plataforma que fornece recursos para o desenvolver,
elaborar, gerenciar e implantar aplicações nas nuvens. Permite a integração de sistemas locais
com os aplicativos das nuvens.
Windows Azure Marketplace é ambiente disponível na web para desenvolvedores
compartilharem, comprarem e venderem aplicativos, serviços e dados.
28 2.7 DESAFIOS
Por ser um novo paradigma, que reúne novas e antigas ideias, a Computação nas
Nuvens traz consigo problemas e desafios para profissionais e acadêmicos que trabalham com
ela. Ao considerar a adoção das nuvens, devem ser considerados aspectos como:
escalabilidade, confiabilidade e segurança (KHAJEH-HOSSEINI; SOMMERVILLE;
SRIRAM, 2010) dentre outro fatores. Essa seção mostra os principais desafios enfrentados
pelas nuvens.
Segurança e Gerenciamento de Dados: é de grande importância o provimento da
segurança. Aspectos como autenticidade, confidencialidade, integridade e auditoria precisam
ser levados em consideração. No entanto algumas técnicas utilizadas para prove-la, como
criptografia, podem acarretar uma perda de desempenho. Além disso, o gerenciamento é um
ponto crítico quando se considera milhares de servidores de dados (SOUSA; MOREIRA;
MACHADO, 2009; ARMBRUST et. al. 2009).
Provimento Automático de Serviços: umas das principais características das nuvens é a
capacidade de fornecimento e aquisição de recursos sob demanda. Prover recursos
dinamicamente, no momento em que o usuário necessitar e ainda garantir a QoS,
redirecionando recursos que estão sendo subutilizados em outro ponto da nuvem de forma
eficiente, pode ser um ponto sensível e comprometer o fornecimento de serviços (ZHANG;
CHENG; BOUTABA, 2010).
Escalabilidade, Disponibilidade e Desempenho: As nuvens precisam ser flexíveis no
fornecimento de serviços. O usuário pode aumentar a qualquer momento a demanda por
recursos consumidos, além de poder acessar seus serviços e dados de qualquer local
utilizando a Internet. Os provedores de nuvens precisam manter uma qualidade satisfatória de
acesso aos recursos, independente da quantidade de clientes acessando o serviço, para garantir
a QoS, e cumprir o SLA (SOUSA; MOREIRA; MACHADO, 2009; ARMBRUST et. al. 2009).
Questões Legais: com a implantação das nuvens nas organizações, as informações e
dados que foram hospedados nas nuvens estarão sujeitos às regulamentações locais onde os
provedores estarão localizados geograficamente. Aspectos relacionados ao direito autoral e de
29 confidencialidade dos dados devem ser considerados a longo prazo. Outro fator que precisa
ser observado é o da TI. Como o “poder” da TI estará sendo transferida para fora das
empresas, a atual equipe de TI será atribuída a um novo papel (KHAJEH-HOSSEINI;
SOMMERVILLE; SRIRAM, 2010), que a deixa responsável pelo o monitoramento do SLA.
Além disso, a implantação das nuvens não é apenas a utilização de novas tecnologias e
ferramentas, é a modificação inteira de formas de trabalho implantas em uma empresa
(GREENWOOD; KHAJEJ-HOSSEINI; SOMMERVILE, 2010).
Armbrust et. al. (2009) cita além dos desafios, alguns já abordados nesta seção, uma
serie de oportunidades que as nuvens oferecem.
3 MIGRAÇÃO DE SISTEMAS PARA AS NUVENS
O processo de migração de aplicações e serviços para as nuvens muitas vezes é
complexo e demorado, exigindo uma análise detalhada da tecnologia e do negócio da empresa.
Muitos fatores influenciam a decisão de levar ou não uma aplicação ou serviço para as nuvens.
DEB (2010, p. 1) faz a seguinte colocação ao analisar as características do legado da empresa
que será migrado:
Existem várias considerações de negócio, tecnologia e riscos que podem ter
efeito profundo no sucesso geral de iniciativas de nuvem em uma empresa,
significando que não existe uma resposta única para a adequação de um
aplicativo para a nuvem [...]. Cada empresa deve avaliar seu portfólio de
aplicativos com base em suas próprias obrigações de negócio, estratégia de
tecnologia e margem de risco.
Assim, refatorar sistemas para migrá-los para as nuvens não é uma tarefa fácil. No
entanto, existem alguns métodos e técnicas que podem auxiliar os profissionais nesse
processo, das quais podemos destacar (UNIPRESS, 2011):
� Troca de hospedagem de aplicações: consiste em redistribuir aplicações para
um ambiente (computacional) diferente sem, no entanto, modificar sua
estrutura, fornecendo uma rápida mudança de paradigma.
� Reestruturação de códigos: permite que os aplicativos sejam executados na
plataforma de nuvens. Fornece aos desenvolvedores a capacidade de utilizarem
frameworks e ambientes nos quais estão familiarizados.
31
� Revisão de aplicações: fornece as organizações a capacidade de reconstruir ou
“evoluir” seus sistemas. Dessa forma, eles são refeitos e/ou modernizados para
aproveitarem os recursos das nuvens.
� Reconstrução de aplicações: nessa abordagem, o sistema é completamente
refeito. Assim, ele pode tirar proveito de todas as capacidades das nuvens.
� Substituição de aplicações: é a troca dos sistemas legados das empresas por
softwares de terceiro no modelo de serviço (SaaS).
Para o estudo de caso proposto, utilizaremos alguns desses métodos em conjunto. O
primeiro é a reestruturação de códigos. Uma das nossas metas é refatorar parte de um sistema
e migrá-lo para as nuvens. Para isso, escolheremos uma plataforma no qual o ambiente seja
“familiar” e forneça ferramentas compatíveis com as utilizadas para desenvolver o sistema. O
segundo é a revisão de aplicações. Nós iremos avaliar partes do sistema para que ele mude de
paradigma, indo para as nuvens. Dessa forma estamos “modernizando” o sistema para
desfrutar dos recursos da nova plataforma.
3.1 REFATORAÇÃO
Segundo Fowler (2004, p. 10) “refatoração é o processo de alteração de um sistema de
software de modo que o comportamento externo do código não mude, mas que sua estrutura
interna seja melhorada”, ou seja, é a modificação de partes do código sem modificar sua
funcionalidade (MURPHY-HILL, 2006).
No processo de evolução de software, a refatoração pode ser aproveitada para melhorar
a qualidade do software em muitas características como extensão, eficiência e reusabilidade
(MENS; TOURWÉ, 2004). No estudo de caso (capitulo 4), a refatoração será utilizada para
modificar parte de um sistema aplicando o paradigma da Computação nas Nuvens, para que
esse sistema possa ser fornecido no modelo de Software como Serviço (SaaS), ou seja,
estamos aumentado a reusabilidade dele.
32 3.2 REQUISITOS DA MIGRAÇÃO
Assim como a análise e o desenvolvimento de software, a migração/refatoração de
sistemas para as nuvens devem seguir as mesmas normas de requisitos, projeto, teste, etc. da
Engenharia de Software. Com isso, podemos destacar alguns requisitos-não funcionais
importantes, para o processo de migração/refatoração, que estão “intimamente ligados” ao
conceito de Computação nas Nuvens.
Segundo SOMMERVILLE (2005), requisitos não funcionais são características
relacionadas ao desempenho, disponibilidade, confiabilidade, etc., ou seja, eles não estão
ligados diretamente às funcionalidades dos sistemas, mas a sua utilidade. A seguir,
descreveremos alguns desses requisitos relacionados ao processo de migração/refatoração.
Um importante requisito funcional que precisa ser avaliado é o desempenho do serviço
que será hospedado nas nuvens. Com relação a esse requisito, YOSHIDA (2011, p. 1) faz a
seguinte observação:
A velocidade de aplicações na web é uma questão de negócios, porque
aplicações que não apresentam um bom desempenho – seja por uma demora
na inicialização, por períodos de instabilidade frequentes ou inconsistência
geral na qualidade – podem trazer impactos negativos à experiência dos
usuários.
Dessa forma, aplicações e serviços que estão hospedados nas nuvens e que recebem um
grande número de requisições, dentro da abordagem híbrida ou não, podem comprometer o
desempenho geral do sistema. Por isso, a decisão de utilizar uma comunicação síncrona ou
assíncrona tem de ser analisada com cautela. REIS et. al. (2006, p. 1) define esses tipos de
comunicação da seguinte forma:
Nos sistemas de comunicação síncrona, os relógios do emissor e do receptor
estão em perfeito sincronismo e são dependentes, enquanto no tipo
assíncrono os relógios do emissor e do receptor apenas têm que estar
suficientemente próximos e são independentes.
33
No trabalho de ALUR (2008), ele faz uma análise desses dois tipos de comunicação.
Ele ressalta em que casos devem-se usar um ou outro tipo. A tabela 1 mostra um resumo das
principais características de uso da comunicação síncrona e assíncrona.
Síncrona Assíncrona
Quando o desempenho for a característica
mais importante.
Processamento em lote com tempo pré-
determinado.
Quando necessitar de troca de dados em
tempo real.
Quando necessitar fazer a troca de uma grande
quantidade de dados.
Quando o tamanho dos dados for pequeno. Troca de mensagens com sistemas legados.
Quando as chamadas ao sistema forem
protegidas por transações.
Sem controle de transação.
Tabela 1 - Comunicação Síncrona e Assíncrona.
Outro principal requisito funcional que precisa ser analisado é a questão da
disponibilidade. Como a aplicação utiliza uma abordagem híbrida de migração, o serviço que
está hospedado nas nuvens pode ficar indisponível temporariamente, tornado o sistema
inconsistente. Assim, o processo de migração do sistema tem de prover, ao usuário e/ou
administrador, alternativas para manter o funcionamento mesmo com a indisponibilidade do
serviço (migrado/refatorado). Além disso, a disponibilidade da rede para acesso as nuvens é
uma característica básica.
4 ESTUDO DE CASO
O estudo de caso a seguir, pretende apontar alguns passos de como refatorar uma
funcionalidade (serviço) de um sistema, para que ele venha a ser implantado na plataforma de
nuvens públicas e o sistema continuar utilizando o mesmo de forma transparente. Além disso,
pretendemos mostrar alguns pontos fortes e fracos desse tipo de abordagem.
4.1 VISÃO GERAL
Funcionalidades de sistemas que manipulam informações de “risco”, como dados dos
clientes, tendem a impedir que eles não sejam migrados para nuvens públicas. Nós
pretendemos mostrar, com essa migração parcial, que é possível aproveitar as facilidades da
Computação nas Nuvens, sem que para isso, tenha de armazená-los nas “mãos” de terceiros.
Assim o foco principal do nosso trabalho é refatorar parte de um sistema, para que ele
venha ser implantado nas nuvens. Dessa forma, o sistema poderá aproveitar os benefícios das
nuvens e ao mesmo tempo manter suas funcionalidades.
Por se tratar de uma migração “parcial”, após a refatoração, partes dos serviços serão
“levados” para as nuvens. A figura 3, elaborada a partir da análise do código do sistema,
mostra os componentes do sistema antes da refatoração, na infraestrutura da empresa,
enquanto que a figura 4 mostra o sistema depois da refatoração, com parte de suas
funcionalidades nas nuvens.
Figura 3
Figura 4
Figura 3 – Componentes do sistema antes da refatoração.
Figura 4 – Componentes do sistema depois da refatoração.
35
36
Dessa forma, podemos destacar que um dos benefícios desse processo de
refatoração/migração parcial, é que o sistema poderá manter suas informações de “risco” e
suas “informações sensíveis” ao negócio da empresa, na sua estrutura interna, enquanto que
os serviços que manipulam as informações não sensíveis sejam hospedados nas nuvens
públicas, beneficiando-se de seus recursos como a escalabilidade.
Contudo, o processo de migração, e consequentemente sua refatoração, de sistemas para
as nuvens tem de ser analisada com cautela. Nem todo sistema deve ser migrado atualmente
para as nuvens. Algumas características como questões legais de armazenamento, segurança e
privacidade dos dados (no caso de nuvens públicas), sistemas que não são favoráveis a
virtualização (dependem de hardware específicos) e latência (CV, 2012) tem de ser
consideradas quando for migrar. Existe um faixa de abordagens que podem ser migrados ou
não. Como exemplo, sistemas altamente customizados e sistemas que trabalham com dados
sensíveis não estão aptos a serem migrados, já os que possuem abordagem colaborativa e de
armazenamento estão preparados para “ir” para as nuvens.
4.2 FREEDOM ERP
Para nossa análise, utilizaremos o sistema FREEDOM ERP (que nós chamaremos
apenas de FREEDOM), que é um software livre de Gestão Empresarial que pode ser utilizado
em estabelecimentos comerciais, varejistas, atacadistas e industriais. Dividido em vários
módulos, atende a diversas necessidades de empresas em diferentes áreas de atuação
(FREEDOM, 2012).
O sistema FREEDOM é composto por vários módulos: standard, financeiro, PDV
(Ponto de venda), PCP (Produção), NFe (Integração com serviços de validação) e CRM.
Cada um dos módulos possui funcionalidades especificas que podem ser utilizadas
individualmente ou em conjunto com os outros módulos.
Para nosso estudo utilizaremos o módulo CRM, que fornece
usuário como abertura de chamado, envio de email de
agendamento de tarefas, cadastro de cliente, etc. (FREEDOM, 2012).
O sistema FREEDOM
Firebird. Ele está dividido em quatro partes principais no qual “freedom” é onde se encontra
os módulos do sistema (standard,
suporte para as funcionalidades do sistema.
sistema FREEDOM que foram
mostra o diagrama de componente do sistema.
Já a figura 6 mostra o digrama de pacotes do subsistema “freedom”. Com ela temos
uma visão completa dos pacotes que o compõe. Nele podemos ver o pacote do módulo CRM
(org.freedom.modulos.crm), alvo de nosso análise.
Para nosso estudo utilizaremos o módulo CRM, que fornece vários serviços para o
como abertura de chamado, envio de email de marketing
agendamento de tarefas, cadastro de cliente, etc. (FREEDOM, 2012).
O sistema FREEDOM é construído na plataforma JAVA e utiliza o banco de dados
dividido em quatro partes principais no qual “freedom” é onde se encontra
standard, CRM, etc.) propriamente ditos. As outras partes forne
suporte para as funcionalidades do sistema. A seguir, mostraremos alguns diagramas do
sistema FREEDOM que foram elaborados a partir da análise do código do sistema.
mostra o diagrama de componente do sistema.
Figura 5 - Diagrama de componentes.
mostra o digrama de pacotes do subsistema “freedom”. Com ela temos
uma visão completa dos pacotes que o compõe. Nele podemos ver o pacote do módulo CRM
), alvo de nosso análise.
37
vários serviços para o
marketing para os clientes,
é construído na plataforma JAVA e utiliza o banco de dados
dividido em quatro partes principais no qual “freedom” é onde se encontra
CRM, etc.) propriamente ditos. As outras partes fornecem
A seguir, mostraremos alguns diagramas do
partir da análise do código do sistema. A figura 5
mostra o digrama de pacotes do subsistema “freedom”. Com ela temos
uma visão completa dos pacotes que o compõe. Nele podemos ver o pacote do módulo CRM
Dentro do pacote
org.freedom.modulos.crm.view.frame.utility
classe é responsável pelo o serviço
para as nuvens. A figura 7 mostra as classes contidas nesse pacote.
Figura 6 - Diagrama de pacotes.
Dentro do pacote org.freedom.modulos.crm, podemos destacar o subpacote
org.freedom.modulos.crm.view.frame.utility, onde se encontra a classe
classe é responsável pelo o serviço de envio de email de marketing. Esse
mostra as classes contidas nesse pacote.
38
, podemos destacar o subpacote
, onde se encontra a classe FEnviaMail. Essa
sse serviço será migrado
Figura 7 –
A classe FEnviaMail
envio de email de marketing
Figura 8
O módulo CRM do sistema Freedom também possui um serviço de agendamento de
tarefas. Esse serviço também será migrado para
verificam as pendências abertas pelos clientes. O serviço de agendamento de tarefas se
encontra no subsistema freedom
componentes do sistema FREEDOM onde podemos ver o su
mostra o diagrama de pacotes das classes que fornecem suporte ao módulo CRM.
Classes do pacote org.freedom.modulos.crm.view.frame.utility
FEnviaMail, possui vários métodos que são responsáveis pelo serviço de
marketing. A figura 8 mostra os principais métodos.
Figura 8 – Principais métodos da classe FEnviaMail.
O módulo CRM do sistema Freedom também possui um serviço de agendamento de
Esse serviço também será migrado para as nuvens. Nesse serviço, os usuários
verificam as pendências abertas pelos clientes. O serviço de agendamento de tarefas se
freedom-fw. A figura 5 vista anteriormente, mostra o diagrama de
componentes do sistema FREEDOM onde podemos ver o subsistema feedom
mostra o diagrama de pacotes das classes que fornecem suporte ao módulo CRM.
39
org.freedom.modulos.crm.view.frame.utility.
, possui vários métodos que são responsáveis pelo serviço de
O módulo CRM do sistema Freedom também possui um serviço de agendamento de
. Nesse serviço, os usuários
verificam as pendências abertas pelos clientes. O serviço de agendamento de tarefas se
vista anteriormente, mostra o diagrama de
bsistema feedom-fw1. A figura 9
mostra o diagrama de pacotes das classes que fornecem suporte ao módulo CRM.
Figura 9 – Diagrama de pacotes do modulo CRM do subsistema freedom
Baseando-se no diagrama de pacotes acima podemos f
classes do subpacote org.freedom.modulos.crm.agenda.visoes.listas
visualização das listas do agendamento (listas de eventos). Já as do pacote
org.freedom.modulos.crm.agenda.visoes
org.freedom.modulos.crm.agenda
org.freedom.crm são responsáveis por
4.3 PLATAFORMA GOOGLE
Para o ambiente de nuvens foi utilizado o
aborda brevemente no capitulo 2. Ela foi escolhida por oferecer suporte à tecnologia Java, que
é a mesma utilizada para construir o sistema FREEDOM e por
uso. Além disso, a plataforma
Google Agenda que também
serviço de agendamento de tarefas do sistema FREEDOM.
Diagrama de pacotes do modulo CRM do subsistema freedom
se no diagrama de pacotes acima podemos fazer as seguintes
org.freedom.modulos.crm.agenda.visoes.listas são responsáveis pela
visualização das listas do agendamento (listas de eventos). Já as do pacote
org.freedom.modulos.crm.agenda.visoes constroem a interface gráfica. O pacot
org.freedom.modulos.crm.agenda lida com a lógica dos agendamentos. E a
são responsáveis por algumas configurações do módulo CRM.
OOGLE
Para o ambiente de nuvens foi utilizado o Google App Engine. Essa
aborda brevemente no capitulo 2. Ela foi escolhida por oferecer suporte à tecnologia Java, que
ara construir o sistema FREEDOM e por fornece
a plataforma Google fornece aplicações prontas para o usu
também foi utilizado no estudo por fornecer funcionalidades similares ao
serviço de agendamento de tarefas do sistema FREEDOM.
40
Diagrama de pacotes do modulo CRM do subsistema freedom-fw1.
azer as seguintes observações: as
são responsáveis pela
visualização das listas do agendamento (listas de eventos). Já as do pacote
constroem a interface gráfica. O pacote
lida com a lógica dos agendamentos. E as classes do pacote
algumas configurações do módulo CRM.
. Essa tecnologia já foi
aborda brevemente no capitulo 2. Ela foi escolhida por oferecer suporte à tecnologia Java, que
fornecer cotas gratuitas para
s prontas para o usuário como o
funcionalidades similares ao
41 4.4 IMPLEMENTAÇÃO
No nosso estudo serão analisados dois serviços do módulo CRM do sistema FREEDOM:
o Envio de Email de Marketing e o Agendamento de tarefas. Primeiramente abordaremos o
funcionamento e em seguida analisaremos como estava a implementação antes e depois da
refatoração e migração para as nuvens.
4.4.1 Envio de email de Marketing
Atualmente, quando o usuário necessita informar aos seus clientes de um novo
produto ou serviço, ele inicia uma nova “campanha”, que consiste de fornecer ao sistema
informações sobre o que ele pretende enviar para seus clientes e então “solicita” ao sistema o
envio do email da campanha. O sistema então recupera os emails dos clientes, que estão
previamente cadastrados em sua base de dados, e envia o email.
Nessa abordagem, após ser solicitado pelo o usuário para enviar o email, o sistema fica
responsável por enviar um email para cada usuário. Após a refatoração do serviço, quando o
usuário solicitar ao sistema para enviar um email, o sistema irá recuperar da base de dados o
email do cliente e então realizará uma solicitação para o serviço de envio de email de
campanha, que está nas nuvens, que envie o email para o cliente.
Do ponto de vista de codificação, antes o sistema chamava o método
mandaMail(sMail, se), no qual recebia os dados do usuário e da campanha e uma seção como
parâmetro e em seguida enviava o email. O código completo do método antes da refatoração
se encontra no apêndice I. Esse método utiliza chamada internas do próprio sistema para a
realização do serviço. Primeiro, ele adiciona os dados a serem enviados (linhas 5 – 9 do
apêndice I), em seguida “monta” a mensagem a ser enviada, (linhas 15-16 e 27 do apêndice I)
e por fim envia o email (linha 29 do apêndice I).
Após a refatoração, o método mandaMail faz uma chamada a um serviço que está nas
nuvens para o envio de email. Para isso ele realiza os seguintes passos:
42
1. Cria uma chamada especificando o endereço do serviço:
Call call = (Call) service.createCall();
call.setTargetEndpointAddress("
http://envioemailmarketing.appspot.com/envioemailmarketing");
2. Identifica o nome do serviço:
call.setOperationName(new QName("enviarEmail"));
3. Envia os dados para o serviço:
call.invoke(new Object[] {endereçoEmail, campanha}.
Após realizar essa sequência de passos, o serviço que está hospedado nas nuvens fica
responsável por enviar o email para os clientes.
O serviço de envio de email foi hospedado em nuvem pública e utiliza a tecnologia do
Google App Engine. Foi feito uma aplicação que fornecesse o mesmo serviço de envio de
email que o anterior, que ficava internamente ao sistema. No apêndice II encontra-se a
codificação do método enviarEmail. Esse método realiza a mesma funcionalidade de envio
de email, adiciona (linhas 10-12 do apêndice II), “monta” (linhas 16-17 do apêndice II) e
envia (linha 18 do apêndice II) as informações. A diferença é que esse método se encontra nas
nuvens.
4.4.2 Agendamento de Tarefas
O serviço de agendamento de tarefas fornece aos usuários do sistema uma visão das
listas de pendências e seus respectivos responsáveis. No serviço atual, para saber se há novas
pendências, o usuário precisa acessar o sistema localmente e verificar se existem novas
requisições. Caso o usuário esteja em uma atividade externa e surgir outra tarefa, o mesmo
não será informado adequadamente. O mesmo acontece para o administrador que fica
responsável pela a abertura das tarefas. Caso ele necessite iniciar um novo chamado não
poderá realizar de forma eficiente.
A lógica responsável pelo o provimento desse serviço foi divida entre as diversas
classes do pacote org.freedom.crm
análise dos códigos do sistema FREEDOM)
Figura 10 – Classes do pacote org.freedom.crm do subsistema freedom
No processo de refato
uma aplicação equivalente para prover a funcionalidade nas nuvens:
Google Agenda é uma ferramenta que faz parte do
tarefas e agendas (GOOGLE, 2011
Google Calendar Data API
desenvolvedores, várias interfaces para a interação de aplicações de terceiros com os serviços
do Google, além de pacotes clientes conhecidos como
Para que o sistema pudesse ter sua funcionalidade de tarefas levadas para as nuvens e
seus clientes pudessem acessá
implementando as principais funcionalidades do serviço,
visualização de tarefas. Dessa forma, o usuário poderá acessar suas tarefas através da
interface do sistema, quando estiver internamente na empresa, ou através da Google Agenda
em qualquer dispositivo, quando estiver em atendimento externo.
Em termos de codificação, para acessar os serviços o cliente deve manter uma instância
da classe CalendarService. Essa classe é responsável por fazer toda a interação entre o cliente
A lógica responsável pelo o provimento desse serviço foi divida entre as diversas
org.freedom.crm do subsistema freedom-fw1. A figura 1
análise dos códigos do sistema FREEDOM) mostra as classes desse pacote.
Classes do pacote org.freedom.crm do subsistema freedom
No processo de refatoração do serviço (agendamento de tarefas), foi possível utilizar
uma aplicação equivalente para prover a funcionalidade nas nuvens:
é uma ferramenta que faz parte do Google Apps, e fornece funcionalidades de
(GOOGLE, 2011). Para fazer o acesso aos seus serviços utilizamos o
Google Calendar Data API (API de Dados do Google Agenda). Essa API fornece aos
desenvolvedores, várias interfaces para a interação de aplicações de terceiros com os serviços
m de pacotes clientes conhecidos como Java Client Library
Para que o sistema pudesse ter sua funcionalidade de tarefas levadas para as nuvens e
seus clientes pudessem acessá-las através do Google Agenda, foi criado um pacote
as principais funcionalidades do serviço, criação, atualização
de tarefas. Dessa forma, o usuário poderá acessar suas tarefas através da
interface do sistema, quando estiver internamente na empresa, ou através da Google Agenda
ualquer dispositivo, quando estiver em atendimento externo.
Em termos de codificação, para acessar os serviços o cliente deve manter uma instância
. Essa classe é responsável por fazer toda a interação entre o cliente
43
A lógica responsável pelo o provimento desse serviço foi divida entre as diversas
. A figura 10 (elaborada a partir
mostra as classes desse pacote.
Classes do pacote org.freedom.crm do subsistema freedom-fw1.
ração do serviço (agendamento de tarefas), foi possível utilizar
uma aplicação equivalente para prover a funcionalidade nas nuvens: Google Agenda. O
, e fornece funcionalidades de
). Para fazer o acesso aos seus serviços utilizamos o
(API de Dados do Google Agenda). Essa API fornece aos
desenvolvedores, várias interfaces para a interação de aplicações de terceiros com os serviços
Library (GOOGLE, 2011).
Para que o sistema pudesse ter sua funcionalidade de tarefas levadas para as nuvens e
las através do Google Agenda, foi criado um pacote
atualização, exclusão e
de tarefas. Dessa forma, o usuário poderá acessar suas tarefas através da
interface do sistema, quando estiver internamente na empresa, ou através da Google Agenda
Em termos de codificação, para acessar os serviços o cliente deve manter uma instância
. Essa classe é responsável por fazer toda a interação entre o cliente
e os serviços do Google Agenda. Já para a manipulação do evento contamos com a classe
CalendarEventEnty. A tabela
Método
CalendarService.insert()
CalendarService.query()
CalendarEventEnty.delete()
CalendarEventEnty.update()
Tabela 2 - Métodos para acessar o Google Agenda.
A seguir comentaremos a implementação das funcionalidades de criação e modificação
de tarefas (chamadas também de eventos).
refatoração. As outras funcionalidades
No pacote org.freedom.crm
pelas as funcionalidades do agendamento. Na figura 1
do sistema FREEDOM) podemos observar alguns de seus métodos.
O método novoAgd
método utilitário insertAgd
mostram a implementação dos método
novoAgd realiza algumas validações
válida (linha 10 do apêndice III
e os serviços do Google Agenda. Já para a manipulação do evento contamos com a classe
tabela 2 mostra alguns de seus métodos.
Função
Cria um novo evento.
Realiza consultas.
Remove um evento.
.update() Atualiza os dados do evento.
Métodos para acessar o Google Agenda.
A seguir comentaremos a implementação das funcionalidades de criação e modificação
de tarefas (chamadas também de eventos). Abordaremos como era o antes e o depois da
funcionalidades possuem implementação semelhante
reedom.crm do subsistema freedom-fw1a classe FAgenda
pelas as funcionalidades do agendamento. Na figura 11 (elaborada a partir análise dos códigos
podemos observar alguns de seus métodos.
Figura 11 – Classe FAgenda.
cria uma nova tarefa. Ele obtém os dados do usuário e utiliza o
insertAgd para persistir as informações no banco.
mostram a implementação dos métodos novoAgd e insertAgd respectivamente.
gd realiza algumas validações, como verificar se o período de execução é uma data
10 do apêndice III), antes de invocar o método insertAgd (linha 31
44
e os serviços do Google Agenda. Já para a manipulação do evento contamos com a classe
Cria um novo evento.
Realiza consultas.
Remove um evento.
Atualiza os dados do evento.
A seguir comentaremos a implementação das funcionalidades de criação e modificação
como era o antes e o depois da
ossuem implementação semelhante.
FAgenda é responsável
(elaborada a partir análise dos códigos
cria uma nova tarefa. Ele obtém os dados do usuário e utiliza o
nformações no banco. O apêndice III e IV
novoAgd e insertAgd respectivamente. O método
como verificar se o período de execução é uma data
antes de invocar o método insertAgd (linha 31 do apêndice
45 III) para persistir as informações. Outras chamadas ao método insertAgd podem ser realizadas
ao longo da lógica do método novoAgd (linhas 50, 61, 74, 87, 98, 109, 120 do apêndice III).
Após receber as informações, o método insertAgd prepara o sql (linhas 8-9 do apêndice IV),
monta a persistência (linhas 14-32 do apêndice IV) e persiste os dados (linha 43 do apêndice
IV).
Depois da refatoração a mesma funcionalidade é feita com o método criarEvento (O
apêndice V mostra sua implementação). Primeiro ele identifica o serviço de calendário que
está nas nuvens (linhas 6-8 do apêndice V), monta um objeto como as informações (linhas 9-
10 do apêndice V) e em seguida realiza a criação da tarefa com uma chamada ao método
insert(postUrl, entry) (linha 11 do apêndice V) da classe CalendarService, da API do Google
Agenda. Nessa chamada o argumento postUrl identifica o calendário do evento e o entry
representa um objeto da classe CalendarEventEntry, que encapsula as informações de um
evento.
Para alterar um evento o sistema utiliza o método editaAgd. O apêndice VI mostra a
implementação deste método. Primeiro ele monta o SQL (linhas 72-73 do apêndice VI),
depois adiciona os dados (linhas 75-105 do apêndice VI) e em seguida persiste os dados
(linha 107 do apêndice VI). Depois da refatoração a mesma funcionalidade é feita com o
método editarEvento (Apêndice VII). Primeiro ele obtém o objeto que contém as
informações para atualizar (linhas 6-7 do apêndice VII) e em seguida chama o método update
da classe CalendarEventEntry (linha 8 do apêndice VII).
4.5 ANÁLISE DOS RESULTADOS
Na seção 4.4 mostramos a refatoração de partes de um sistema, para que seus serviços
fossem hospedados nas nuvens. Nela abordamos o código de vários métodos que em conjunto,
proveem os serviços de envio de email de marketing e agendamento de tarefas.
Destacamos as principais partes da implementação dos métodos, mostrando como eles
forneciam o serviço antes, internamente ao sistema, e depois, com o os serviços já hospedados
nas nuvens.
46
Para refatorar o serviço de envio de email de marketing, foi criado um aplicativo para
enviar email equivalente ao que funcionava dentro do sistema. Esse aplicativo foi hospedado
nas nuvens e internamente o sistema foi modificado para acessá-lo como serviço.
Já para o agendamento de tarefas a abordagem foi diferente. Como o serviço era
semelhante ao aplicativo Google Agenda, que faz parte dos serviços de nuvens do Google
Apps, foi criado um cliente para que os usuários usem o serviço de agendamento, podendo
acessá-lo normalmente. Dessa forma, o usuário passou a utilizar o Google Agenda como
serviço de agendamento de tarefa, através da interface do sistema quando estiver dentro da
empresa, ou através de qualquer cliente quando estiver em atendimento externo.
A abordagem de refatorar os serviços para poder aproveitar os recursos das nuvens
oferece muitas vantagens. A seguir destacaremos alguns benefícios:
• Redução da infraestrutura, pois o sistema terá partes de suas funcionalidades
hospedadas nas nuvens, com isso, diminui a quantidade de recursos utilizados
para fornecer essas funcionalidades.
• Aumento da disponibilidade dos serviços. Como eles estão hospedados nas
nuvens, as informações estão sempre disponíveis para serem acessados de
diferentes formas por diversos clientes.
• Redução da quantidade de erros. Os serviços refatorados estão utilizando
recursos e plataformas das nuvens. Essas plataformas já foram testadas e
homologadas antes de tornarem-se disponíveis.
• Redução da quantidade de manutenção. A equipe de desenvolvimento precisa
preocupar-se apenas com o acesso ao serviço.
• Redução de código proprietário. Como os serviços foram refatorados e
migrados para as nuvens, a quantidade de código para realizar a mesma
funcionalidade, dentro do sistema, diminuiu consideravelmente.
Baseando-se nessa última observação, a tabela 3 mostra alguns dados
referentes ao processo de refatoração.
47
Critério Antes Depois Resultado
Quantidade total de
linhas de código do
módulo CRM.
10515 2635
Redução de 75%
da quantidade de
linhas de código.
Quantidade de Classes
do módulo CRM. 87 82
Redução de 6% da
quantidade de
classes.
Tabela 3 – Números da refatoração.
Podemos ver que houve uma grande redução da quantidade de código. Isso ocorreu
principalmente por dois motivos: o primeiro foi por conta da utilização do serviço Google
Agenda. Com isso, algumas classes responsáveis pelas interfaces gráficas deixaram de existir.
Isso mostra que utilizar aplicações disponíveis na plataforma das nuvens pode diminuir a
complexidade do sistema e sua posterior manutenção. O segundo foi pela a construção de
métodos mais concisos. Como a lógica responsável pela criação, edição, recuperação e
atualização está toda dentro da API do Google Agenda, foi necessário apenas criar métodos
que realizassem chamadas para os serviços.
4.6 VANTAGENS E DESVANTAGENS
De uma forma mais geral, o processo de migração de sistemas para as nuvens fornece
muitos benefícios para as empresas e usuários. A seguir algumas vantagens de utilizar as
nuvens:
� Redução dos custos. Como a empresa vai pagar apenas pelos os recursos
utilizados, o valor gasto para manter aplicações e serviços é bem vantajoso
comparado ao de manter uma infraestrutura interna. Além disso, o
48
investimento para montar uma infraestrutura inicial é pequeno e o tempo para
iniciar seu funcionamento é rápido.
� Recursos ilimitados. Com sua capacidade de alocação dinâmica de recursos, as
nuvens podem fornecer recursos “ilimitados”. Assim o usuário não precisa se
preocupar com o desempenho da sua aplicação, pois à medida que necessitar
de mais capacidade de processamento, armazenamento, etc., os recursos
podem aumentar “infinitamente”.
� Flexibilidade. O usuário não precisa se preocupar se o sua aplicação vai
funcionar ou não. Como ela está hospedada nas nuvens ela é independente de
plataforma. O usuário também pode escolher em qual plataforma de nuvens
deseja armazenar suas aplicações e arquivos.
� Compartilhamento. As nuvens fornecem grandes capacidades de
compartilhamento de arquivos e aplicativos. Como os recursos estão
hospedados nas nuvens e não na infraestrutura interna ou computador pessoal,
para ter acesso a esses recursos, precisa-se ter apenas acesso as nuvens.
� Variedade de Aplicações. Os usuários possuem acesso a um grande número de
aplicações, podendo escolher rapidamente uma aplicação para suprir alguma
necessidade. Além disso, ele pode testar a aplicação antes de adquirir, podendo
elaborar uma estratégia melhor para a resolução do seu problema.
Mesmo com todas as vantagens, existem alguns pontos contrários que precisam ser vistos
para utilizar e/ou migrar para as nuvens. A seguir comentaremos alguns.
� Segurança. Um aspecto importante das nuvens é com relação à segurança.
Como seus dados e aplicações estão fora da empresa, eles podem sofrer
acessos indevidos ao mesmo tempo em que, são pessoas externas ao ambiente
da empresa que serão responsáveis por elas.
� Indisponibilidade de acesso. Para acessar os recursos que estão nas nuvens, o
usuário precisa fazer o uso da rede. Caso o usuário não tenha algum cliente
49
para acessar a rede ou a mesma esteja indisponível, não será possível fazer o
uso das nuvens.
� Provedor de recursos. Como a maioria das nuvens é um serviço adquirido, há
o risco de o provedor deixar de fornecer os recursos ou deixar de cumprir o
contrato, deixando os usuários sem acesso aos arquivos e aplicativos.
� Portabilidade. A capacidade de migrar um aplicativo de uma nuvem para outra
também é um fator negativo. Isso muitas vezes não acontece de uma forma
simples, pois, precisam de implementação extra para funcionar adequadamente.
5 CONCLUSÃO
Conforme mostrado neste trabalho, a Computação nas Nuvens é um conceito inovador
que combina diversas tecnologias para prover serviços e recursos através da rede. Ela possui
muitas características importantes, tais como self-service de recursos, elasticidade,
escalabilidade, dentre outros. Combinando as características com suas camadas de arquitetura
(Hardware, Infraestrutura, Plataforma e Aplicação), as nuvens fornecem camadas de serviços
(Software (SaaS), Plataforma (PaaS) e Infraestrutura (IaaS)).
O conceito de Computação nas Nuvens pode ser implantada internamente em
empresas, como Nuvens Privadas, contratadas de provedores externos, como Nuvem Pública,
ou ainda pode se utilizar uma combinação dos dois tipos, Nuvens Híbridas. Apesar de seus
recursos, o uso das nuvens requer cuidados. Questões como segurança, gerenciamento de
dados, escalabilidade, disponibilidade, desempenho e questões legais devem ser avaliados.
Já no processo de migração de software para as nuvens, podem-se utilizar
alguns métodos e técnicas, tais como, reestruturação de códigos e revisão de aplicações, para
auxiliar a avaliação dos sistemas. Além disso, é preciso verificar alguns requisitos como
desempenho, disponibilidade, comunicação entre aplicações, etc.
No estudo realizado, podemos avaliar que refatorar sistemas e/ou serviços e
migrá-los para as nuvens pode ser vantajoso, ou seja, utilizar o ambiente das nuvens para
hospedar os serviços fornece muitos benefícios, tais como: redução de infraestrutura, aumento
da disponibilidade, redução de erros, manutenção e redução de código utilizado.
51 5.1 CONTRIBUIÇÃO E TRABALHOS FUTUROS
O presente trabalho mostrou alguns aspectos da tecnologia da Computação nas
Nuvens. Mostramos algumas de suas tecnologias, características, plataformas, modelos de
serviços e modelos de implantação. Falamos também de algumas plataformas que fornecem
recursos de nuvens, além de apontar alguns “desafios” para as nuvens.
Também mostramos como refatorar uma aplicação para que ela seja migrada
para as nuvens. Analisamos alguns métodos e requisitos importantes desse processo. E
também mostramos os benefícios dessa abordagem.
Muitos pontos podem ser explorados com a Computação nas Nuvens. Em trabalhos
posteriores, podemos estender o processo de migração para outras plataformas, avaliando a
metodologia de implantar uma mesma funcionalidade em diferentes nuvens. Além disso,
critérios de segurança, desempenho e de acesso podem ser avaliados.
6 REFERÊNCIAS BIBLIOGRÁFICAS
ALUR, Sandeep J. Integração corporativa e computação distribuída: fenômeno onipresente. 2008. Disponível em: <http://msdn.microsoft.com/pt-br/library/ff394091.aspx>. Acesso em: 15/05/2012. AMAZON. Amazon Web Services. 2011. Disponível em: < http://aws.amazon.com/>. Acesso em: 12/05/2011. AMAZON. Amazon CloudFront. 2011. Disponível em: < http://aws.amazon.com/cloudfront/>. Acesso em: 12/05/2011. AMAZON. Amazon Elastic Compute Cloud (Amazon EC2). 2011. Disponível em: < http://aws.amazon.com/ec2/>. Acesso em: 12/05/2011. AMAZON. Relational Database Service (Amazon RDS). 2011. Disponível em: < http://aws.amazon.com/rds/>. Acesso em: 12/05/2011. AMAZON. Amazon SimpleDB. 2011. Disponível em: < http://aws.amazon.com/simpledb/>. Acesso em: 12/05/2011. AMAZON. Amazon Simple Queue Sevice. 2011. Disponível em: < http://aws.amazon.com/sqs/>. Acesso em: 12/05/2011. AMAZON. Amazon Simple Storage Service (Amazon S3). 2011. Disponível em: < http://aws.amazon.com/s3/>. Acesso em: 12/05/2011. AMAZON. Amazon Virtual Private Cloud (Amazon VPC). 2011. Disponível em: < http://aws.amazon.com/vpc/ >. Acesso em: 12/05/2011. ARMBRUST, Michael; FOX, Armando; GRIFFITH, Rean; JOSEPH, Anthony D.; KATZ, Randy H.; KONWINSKI, Andrew; LEE, Gunho; PATTERSON, David A.; RAVKIN, Ariel; STOICA, Ion; ZAHARIA, Matei. Above the Clouds: A Berkeley View of Cloud Computing. 2009. Disponível em: <http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf>. Acesso em: 10/05/2011.
53 BARBOSA, Fernando P.; CHARÃO, Andrea S. Grid Computing e Cloud Computing – Uma Relação de Diferenças, Semelhanças, Aplicabilidade e Possibilidades de Cooperação entre os dois Paradigmas. 2009. Disponível em: <http://www-usr.inf.ufsm.br/~andrea/elc888/artigos/artigo4.doc>. Acesso em: 16/05/2011. BOLSONI, Evandro Paulo; CARDOSO, Carla; SOUZA, Carlos Henrique Medeiros de. Computação Ubíqua, Cloud Computing e PLC para Continuidade Comunicacional diante de Desastres. 2009. Disponível em: <http://www.defesacivil.uff.br/defencil_5/Artigo_Anais_Eletronicos_Defencil_14.pdf>. Acesso em: 15/03/2011. BOMBONATO, Fábio. Computação em GRID: Uma Introdução. 2002. Disponível em: <http://www.lsi.usp.br/~paiva/sd/grid_computing.pdf>. Acesso em: 16/05/2011. BUNKER, Guy; THOMSON, Darren. Delivering Utility Computing: Business-driven IT Optimization. 2006. Disponível em: <http://ebookee.org/Delivering-Utility-Computing-Business-driven-IT-Optimization_1564.html>. Acesso em: 16/05/2011. CEARLEY, David W. Cloud Computing, Key Initiative Overview. Gartner Fellow. 2010. Disponível em: <http://www.gartner.com/it/initiatives/pdf/KeyInitiativeOverview_CloudComputing.pdf>. Acesso em: 12/03/11. CHAGANTI, Prabhakar. Serviços em nuvem para sua infraestrutura virtual, Parte 1: Infrastructure-as-a-Service (IaaS) e Eucalyptus. IBM. 2010. Disponível em: <http://www.ibm.com/developerworks/br/library/os-cloud-virtual1/>. Acesso: 15/03/11. CHANG, Fay; DEAN, Jeffrey; GHEMAWT, Sanjay; HSIEH, Wilson C.; WALLCH, Deborah A.; BURROWS, Mike; CHANDRA, Tushar; FIKES, Andrew; GUBER, Robert E. Bigtable: A Distributed Storage System for Structured Data. 2006. Disponível em: <http://static.googleusercontent.com/external_content/untrusted_dlcp/labs.google.com/pt-BR//papers/bigtable-osdi06.pdf >. Acesso: 11/05/11. CV, Convergência Digital. Quem precisa da computação nas nuvens? Disponível em: <http://convergenciadigital.uol.com.br/cgi/cgilua.exe/sys/start.htm?infoid=30588&sid=97 >. Acesso: 30/05/12. DEB, Brijesh. Avalie aplicativos corporativos para migração para a nuvem. IBM. 2010. Disponível em: <http://www.ibm.com/developerworks/br/cloud/library/cl-assessport/>. Acesso: 04/05/12. FOWLER, Martin. Refatoração: Aperfeiçoando o Projeto de Código Existente. Porto Alegre: Bookman, 2004. FREEDOM. Freedom-ERP. 2012. Disponível em: < https://sites.google.com/a/stpinf.com/freedom-erp/Home>. Acesso em: 11/05/2011. GOOGLE. Google Apps. 2011. Disponível em: <http://www.google.com/apps/intl/pt-BR/business/index.html>. Acesso em: 11/05/2011.
54 GOOGLE. Google App Engine. 2011. Disponível em: <http://code.google.com/appengine>. Acesso em: 11/05/2011. GOOGLE. Google Calendar API. 2012. Disponível em: <http://code.google.com/apis/calendar>. Acesso em: 15/05/2012. GHEMAWAT, Sanjay; GOBIOFF, Howard; LEUNG, Shun-Tak. The Google File System. 2003. Disponível em: < http://static.googleusercontent.com/external_content/untrusted_dlcp/labs.google.com/pt-BR//papers/gfs-sosp2003.pdf >. Acesso em: 11/05/11. GREENWOOD, David; KHAJEJ-HOSSEINI, Ali; James Smith, SOMMERVILE, Ian; The Cloud Adoption Toolkit: Addressing the Challenges of Cloud Adoption in Enterprise. 2010. Disponível em: <http://arxiv.org/ftp/arxiv/papers/1003/1003.3866.pdf>. Acesso em: 15/03/11. HESS, Kenneth; NEWMAN, Amy. Practical Virtualization Solutions: Virtualization from the trenches. Boston: Pearson Education, 2009. (Negus software solutions series). Disponível em: <http://www.amazon.com/Practical-Virtualization-Solutions-Trenches/dp/0137142978/ref=sr_1_2?s=books&ie=UTF8&qid=1305662008&sr=1-2#reader_0137142978>. Acesso em: 17/05/2011. HOGAN, Mike. Cloud Computing & Databases: How databases can meet the demands of cloud computing. 2008. Disponível em: < http://www.scaledb.com/pdfs/CloudComputingDaaS.pdf>. Acesso em: 09/05/2011. HP. Testing as a Service (TaaS). 2011. Disponível em: <https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&cp=1-23^42007_4000_100__>. Acesso em: 12/05/2011. IBM. Autonomic Computing Q&A v1.1. 2011. Disponível em: <http://www.research.ibm.com/autonomic/overview/faqs.html#1>. Acesso em: 17/05/2011. KHAJEH-HOSSEINI, Ali; SOMMERVILE, Ian; SRIRAM, Ilango. Research Challenges for Enterprise Cloud Computing. 2010. Disponível em: < http://arxiv.org/ftp/arxiv/papers/1001/1001.3257.pdf >. Acesso em: 27/04/2011. LENK, Alexander; KLEMS, Markus; NIMIS, Jens; TAI, Stefan; SANDHOLM, Thomas. What’s Inside the Cloud? An Architectural Map of the Cloud Landscape. 2009. Disponível em: <http://portal.acm.org/citation.cfm?id=1564625>. Acesso em: 05/05/2011. MELL, Peter; GRANCE, Timothy. The NIST Definition of Cloud Computing (Draft) . 2011. NIST (National Institute of Standards and Technology). Disponível em: <http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf>. Acesso em: 14/03/11. MENS, Tom; TOURWÉ, Tom. A Survey of Software Refactoring. 2004. Disponível em: < http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F32%2F28308%2F01265817.pdf%3Farnumber%3D1265817&authDecision=-203>. Acesso em: 14/05/11.
55 MURPHY-HILL, Emerson. Improving Usability of Refactoring Tools. 2006. Disponível em: < http://portal.acm.org/citation.cfm?id=1176705 >. Acesso em: 14/05/11. NAGAPRASAD. S.; VINAYABABU, A.; MADHUKAR, K; VERGHESE, D. Marlene G.; MALLAIAH, V.; SREELATHA, A. REVIEWING SOME PLATFORMS IN CLOUD COMPUTING . 2010. Disponível em: <http://www.enggjournals.com/ijet/docs/IJET10-02-05-31.pdf>. 17/05/2011. RAMOS, Robson da Silva; ESES, Nicholas Istenes. O Impacto do Cloud Computing no Processo de Perícia Digital. 2010. Disponível em: < http://foren6.files.wordpress.com/2010/04/o-impacto-do-cloud-computing-no-processo-de-pericia-digital.pdf >. Acesso em: 15/03/2011. REIS, António D.; ROCHA, José F.; GAMEIRO, Atilio S.; CARVALHO, José P. Sistemas de Comunicação Síncrona e Assíncrona de Dados. 2006. Disponível em: <http://www2.fis.ua.pt/fisica2006_CD/pdf/FAP28%20-%20SISTEMAS%20DE%20COMUNICA%C3%87%C3%83O%20S%C3%8DNCRONA%20E%20ASS%C3%8DNCRONA%20DE.pdf>. Acesso em: 28/04/2012. SOUSA, Flávio R. C.; MOREIRA, Leonardo O.; MACHADO, Javam C. Computação em Nuvem: Conceitos, Tecnologias, Aplicações e Desafios. 2009. Disponível em: <http://www.es.ufc.br/~flavio/files/Computacao_Nuvem.pdf>. Acesso em: 15/03/2011. VAQUERO, Luis M.; RODERO-MERINO, Luis; CACERES, Juan; LINDNER, Maik. A Break in the Clouds: Towards a Cloud Definition. 2009. Disponível em: <http://ccr.sigcomm.org/drupal/files/p50-v39n1l-vaqueroA.pdf>. Acesso em: 28/04/2011. VERDI, Fábio Luciano; ROTHENBERG, Christian; MAGALHÃES, Rafael Pasquini e Maurício F. Novas Arquiteturas de Data Center para Cloud Computing. 2010. Disponível em: < http://www.dca.fee.unicamp.br/~chesteve/pubs/MC-DATA-CENTER-NETWORKS-SBRC2010.pdf>. Acesso em: 15/03/2011. SOMMERVILLE, Ian. Engenharia de Software. 8. ed. São Paulo: Pearson Education do Brasil, 2005. TAURION, Cezar. Cloud Computing: Computação em Nuvem: Transformando o mundo da Tecnologia da Informação. Rio de Janeiro: Brasport, 2009. UNIPRESS. Estratégias para migrar aplicações para a nuvem. 2011. Disponível em: <http://uni.com.br/knowledge_base/?p=1017>. Acesso: 16/04/12. XU, Dong; LIU, Hui. Reviewing some Cloud Computing Platforms. 2010. Disponível em: <http://www.academypublisher.com/proc/isnns10/papers/isnns10p161.pdf>. Acesso em: 05/05/2011. WANG, Lizhe; VON LASZEWSKI , KUNZE, Gregor Marcel; TAO, Jie; Cloud Computing: a Perspective Study. 2008. Disponível em: <https://ritdml.rit.edu/bitstream/handle/1850/7821/LWangConfProc11-16-2008.pdf?sequence=1>. Acesso em: 05/05/2011.
56 WINDOWS AZURE. What is the Windows Azure platform?. 2011. Disponível em: <http://www.microsoft.com/windowsazure/>. Acesso em: 13/05/2011. YOSHIDA, Takahiko. Desempenho de aplicações na nuvem. 2011. Disponível em: <http://informationweek.itweb.com.br/5331/desempenho-de-aplicacoes-na-nuvem/>. Acesso: 16/04/12.
ZHANG, Qi; CHENG, Lu; BOUTABA, Raouf. Cloud computing: state-of-the-art and
research challenges. 2010. Disponível em: <http://cloud.pubs.dbs.uni-
leipzig.de/sites/cloud.pubs.dbs.uni-leipzig.de/files/fulltext.pdf >. Acesso em: 28/04/2011.
57
APÊNDICE
Apêndice I – Código em Java do Método mandaMail
Apêndice II – Código em Java do Método enviarEmail
Apêndice III – Código em Java do Método novoAgd
Apêndice IV – Código em Java do Método insertAgd
Apêndice V – Código em Java do Método criarEvento
Apêndice VI – Código em Java do Método editaAgd
Apêndice VII – Código em Java do Método editarEvento
58
I – Código em Java do Método mandaMail
1 private void mandaMail( String sTo, Session se ) { 2 3 state( "Preparando envio para: '" + sTo + "'" ); 4 try { 5 MimeMessage mes = new MimeMessage( se ); 6 mes.setFrom( new InternetAddress( txtDe.getVlrString() ) ); 7 mes.setSubject( txtAssunto.getVlrString() ); 8 mes.setSentDate( new Date() ); 9 mes.addRecipient( RecipientType.TO, new InternetAddress( sTo ) ); 10 11 BodyPart parte = new MimeBodyPart(); 12 13 parte.setText( txaMen.getVlrString() ); 14 15 Multipart multipart = new MimeMultipart(); 16 multipart.addBodyPart( parte ); 17 18 if ( fArq != null ) { 19 parte = new MimeBodyPart(); 20 FileDataSource orig = new FileDataSource( fArq ); 21 parte.setDataHandler( new DataHandler( orig ) ); 22 parte.setFileName( fArq.getName() ); 23 parte.setDisposition( rgTipo.getVlrStrin g().equals( "A" ) ? 24 Part.ATTACHMENT : Part.INLINE ); 25 multipart.addBodyPart( parte ); 26 } 27 mes.setContent( multipart ); 28 state( "Enviando dados..." ); 29 Transport.send( mes ); 30 state( "Envio OK..." ); 31 } catch ( MessagingException err ) { 32 Funcoes.mensagemErro( this , "Erro ao enviar mensagem para: " + 33 sTo + " \n" + err.getMessage() ); 34 err.getStackTrace(); 35 state( "Aguardando reenvio." ); 36 } 37 }
59
II – Código em Java do Método enviarEmail
1 public void enviarEmail(List<String> emailAdressList, String a ssunto, 2 String campanha) 3 { 4 Properties props = new Properties(); 5 Session session = Session.getDefaultInstance (props, null ); 6 7 try { 8 Message msg = new MimeMessage(session); 9 10 msg.setFrom( new InternetAddress( "[email protected]" , "FREEDOM")); 11 msg.setSubject(assunto); 12 msg.setText(campanha); 13 14 for (String email: emailAdressList) 15 { 16 msg.addRecipient(Message.RecipientTy pe.TO, 17 new InternetAddress(email)); 18 Transport.send(msg); 19 } 20 21 } catch (AddressException e) { 22 // ... 23 } catch (MessagingException e) { 24 // ... 25 } catch (UnsupportedEncodingException e) { 26 // TODO Auto-generated catch block 27 e.printStackTrace(); 28 } 29 }
60
III – Código em Java do Método novoAgd
1 private void novoAgd(Date dtini, Date dtfim) { 2 3 HashMap<?, ?> periodicidade = null ; 4 5 if (txtIdUsu.getVlrString().equals( "" ) || iCodAge == 0) { 6 Funcoes.mensagemInforma( this , 7 "O usuário ou o agente não foi identificado!" ); 8 return ; } 9 10 if (dtini == null && dtfim == null ) { 11 if (calendarpanel.getValue() == null ) { 12 Funcoes.mensagemInforma( this , 13 "Selecione uma data no painel!" ); 14 return ; 15 } 16 dtini = ( Date ) calendarpanel.getV alue(); 17 } 18 String sRets[]; 19 DLNovoAgen dl = new DLNovoAgen(txtIdUsu.getVlrString(), 20 txtIdUsu.getVlrString(), dtini, dtf im, this , true ); 21 dl.setConexao(con); 22 dl.setVisible( true ); 23 24 if (dl.OK) { 25 sRets = dl.getValores(); 26 periodicidade = dl.getPeriodicidade(); 27 String tipo = ( String ) periodicidade. get( "TIPO" ); 28 29 try { 30 if ( "NR" .equals(tipo)) { 31 insertAgd(sRets[1]+ ":00" ,sRets[3]+ ":00" , sRets[4],sRets[5], 32 sRets[6], sRets[7], sRets[8], sRets [9],sRets[10], 33 iCodFilialAge, iCodAge, sTipoAge, s Rets[11],sRets[12], 34 sRets[13],Funcoes.strDateToSqlDate( sRets[0]), 35 Funcoes.strDateToSqlDate(sRets[2]), false ,0, null ,sRets[14]); 36 } else { 37 Integer codagdar = null ; 38 Date dtlimite = ( Date ) periodicid ade.get( "LIMITE" ); 39 40 Calendar clrepete = new GregorianCalendar(); 41 clrepete.setTime(Funcoes.strDateToD ate(sRets[0])); 42 43 long numdias = Funcoes.getNumDias(clrepete.getTime(), d tlimite); 44 45 int cont = 0; 46 47 while (numdias > 0) { 48 numdias = Funcoes.getNumDias(clrepe te.getTime(), dtlimite); 49 if ( "TD" .equals(tipo)) { 50 codagdar= insertAgd(sRets[1]+ ":00" ,sRets[3]+ ":00" ,sRets[4], 51 sRets[5], sRets[6], sRets[7], sRets[8] , sRets[9], sRets[10], 52 iCodFilialAge,iCodAge,sTipoAge,sRets[1 1],sRets[12],sRets[13], 53 Funcoes.dateToSQLDate(clrepete.getTime ()), 54 Funcoes.dateToSQLDate(clrepete.getTime ()), true , cont,codagdar, 55 sRets[14]); 56 clrepete.add(Calendar.DAY_OF_MO NTH, 57 ( Integer ) periodicida de.get( "INTERVALO" )); 58 } 59 else if ( "TS" .equals(tipo)){
61
60 if (clrepete.get(Calendar.DAY_OF_WEEK) < Calendar.SATU RDAY) { 61 codagdar = insertAgd(sRets[1] + ":00" , sRets[3] + ":00" , 62 sRets[4], sRets[5], sRets[6], sRet s[7],sRets[8], sRets[9], 63 sRets[10],iCodFilialAge,iCodAge,sT ipoAge,sRets[11], 64 sRets[12],sRets[13],Funcoes.dateToSQLD ate(clrepete.getTime()), 65 Funcoes.dateToSQLDate(clrepete.getTime ()), true ,cont,codagdar, 66 sRets[14]); 67 } 68 clrepete.add(Calendar.DAY_OF_MO NTH, 1); 69 } 70 else if ( "T1" .equals(tipo)){ 71 if ((clrepete.get(Calendar.DAY_OF_WEEK) == Calendar.M ONDAY) || 72 (clrepete.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)|| 73 ( clrepete.get(Calendar.DAY_OF_WEEK ) == Calendar.FRIDAY )){ 74 codagdar = insertAgd(sRets[1] + ":00" ,sRets[3] + ":00" , 75 sRets[4], sRets[5],sRets[6],sRe ts[7],sRets[8],sRets[9], 76 sRets[10], iCodFilialAge, i CodAge, sTipoAge, 77 sRets[11], sRets[12], sRets [13], 78 Funcoes.dateToSQLDate(clrepe te.getTime()), 79 Funcoes.dateToSQLDate(clrepe te.getTime()), true ,cont, 80 codagdar, sRets[14]); 81 } 82 clrepete.add(Calendar.DAY_OF_MO NTH, 1); 83 } 84 else if ( "T2" .equals(tipo)) { 85 if( (clrepete.get(Calendar.DAY_OF_WEEK)==Calendar.TUESD AY) || 86 (clrepete.get(Calendar.DAY_OF_WEEK )== Calendar.THURSDAY)){ 87 codagdar = insertAgd(sRets[1 ]+ ":00" ,sRets[3]+ ":00" , 88 sRets[4],sRets[5],sRets[ 6],sRets[7],sRets[8], 89 Rets[9],sRets[10],iCodFil ialAge,iCodAge,sTipoAge, 90 sRets[11], sRets[12], sR ets[13], 91 Funcoes.dateToSQLDate(cl repete.getTime()), 92 Funcoes.dateToSQLDate(clrepet e.getTime()), true , cont, 93 codagdar, sRets[14]); 94 } 95 clrepete.add(Calendar.DAY_OF_MO NTH, 1); 96 } 97 else if ( "SE" .equals(tipo)) { 98 codagdar = insertAgd(sRets[1]+ ":00" ,sRets[3]+ ":00" ,sRets[4], 99 sRets[5], sRets[6], sRets [7], sRets[8], sRets[9], 100 sRets[10], iCodFilialAge, iCodAge, sTipoAge, 101 sRets[11], sRets[12], sRe ts[13], 102 Funcoes.dateToSQLDate(clr epete.getTime()), 103 Funcoes.dateToSQLDate(clrepete .getTime()), true , cont, 104 codagdar, sRets[14]); 105 clrepete.add(Calendar.WEEK_OF_Y EAR, ( Integer ) 106 periodicidade.get( "INTERVALO" )); 107 } 108 else if ( "ME" .equals(tipo)){ 109 codagdar = insertAgd(sRets[1]+ ":00" ,sRets[3]+ ":00" ,sRets[4], 110 sRets[5], sRets[6], sRets [7], sRets[8], sRets[9], 111 sRets[10],iCodFilialAge,iCod Age, sTipoAge,sRets[11], 112 sRets[12], sRets[13], 113 Funcoes.dateToSQLDate(c lrepete.getTime()), 114 Funcoes.dateToSQLDate(clrepet e.getTime()), true , cont, 115 codagdar, sRets[14]); 116 clrepete.add(Calendar.M ONTH, ( Integer ) 117 periodicidade.g et( "INTERVALO" )); 118 } 119 else if ( "AN" .equals(tipo)) { 120 codagdar = insertAgd(sRets[1] + ":00" , sRets[3] + ":00" ,
62
121 sRets[4], sRets[5], sRets [6], sRets[7], sRets[8], 122 sRets[9], sRets[10], iCodFilia lAge, iCodAge, sTipoAge, 123 sRets[11], sRets[12], s Rets[13], 124 Funcoes.dateToSQLDate(clr epete.getTime()), 125 Funcoes.dateToSQLDate(clrepete .getTime()), true , cont, 126 codagdar, sRets[14]); 127 clrepete.add(Calendar.YEAR, ( I nteger ) 128 periodicidade.get( "INTERVALO" )); 129 } 130 cont++; 131 } 132 } 133 134 if ( "S" .equals(sRets[15])) { // Enviar email 135 enviarEmail(sRets[9], sRets[10], sR ets[4], // Assunto 136 sRets[5], // Descrição do atendimento 137 sRets[0], // Data Inicial 138 sRets[2], // Data Final 139 sRets[1], // Hora Inicial 140 sRets[3] // Hora Final 141 ); 142 } 143 144 con.commit(); 145 146 } 147 catch (SQLException err) { 148 Funcoes.mensagemErro( this , "Erro ao salvar o agendamento! \n" + 149 err.getMessage(), true , con, err); 150 err.printStackTrace(); 151 } 152 153 setaPeriodo(rgPeriodo.getVlrString()); 154 } 155 dl.dispose(); 156 }
63
IV – Código em Java do Método insertAgd
1 private Integer insertAgd(String hini, String hfim, String assunto, 2 String descricao, String codfilialagd,String ti poagd,String prioridade, 3 String codagente, String tipoagente,Inte ger codfilialagt, 4 Integer codagentee, String tipoagentee, String controleacesso, 5 String status, String motivo, Date dtini, Dat e dtfim, boolean repete, 6 int cont, Integer codagdar,String diatodo) { 7 8 String sql = "SELECT IRET FROM " 9 + "SGSETAGENDASP(0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?)" ; 10 ResultSet rs = null ; 11 Integer ret = codagdar; 12 try { 13 14 PreparedStatement ps = con.prepareSt atement(sql); 15 ps.setInt(1, Aplicativo.iCodEmp); 16 ps.setDate(2, Funcoes.dateToSQLDate( dtini)); 17 ps.setString(3, hini); 18 ps.setDate(4, Funcoes.dateToSQLDate( dtfim)); 19 ps.setString(5, hfim); 20 ps.setString(6, assunto); 21 ps.setString(7, descricao); 22 ps.setString(8, codfilialagd); 23 ps.setString(9, tipoagd); 24 ps.setString(10, prioridade); 25 ps.setString(11, codagente); 26 ps.setString(12, tipoagente); 27 ps.setInt(13, codfilialagt); 28 ps.setInt(14, codagentee); 29 ps.setString(15, tipoagente); 30 ps.setString(16, controleacesso); 31 ps.setString(17, status); 32 ps.setString(18, motivo); 33 34 if (repete && cont > 0 && codagdar != null ) { 35 ps.setInt(19, codagdar); 36 } 37 else { 38 ps.setNull(19, Types.INTEGER ); 39 } 40 41 ps.setString(20, diatodo); // indica se é de dia todo. 42 43 rs = ps.executeQuery(); 44 45 if (rs.next() && cont == 0) { 46 ret = rs.getInt( "IRET" ); 47 } 48 49 ps.close(); 50 } 51 catch (Exception e) { 52 e.printStackTrace(); 53 } 54 return ret; 55 }
64
V – Código em Java do Método criarEvento
1 public Evento criarEvento(Evento evento, Calendario calen dario) 2 { 3 Evento result = evento; 4 try 5 { 6 String urlString = EVENTS_FEED_BASE_URL.re placeAll( "#CalendarId#" , 7 getShortCalendarId(calendario.ge tId())); 8 URL postUrl = new URL(urlString); 9 CalendarEventEntry entry = new CalendarEventEntry(); 10 buildEventEntry(entry, evento); 11 entry = CalendarService.insert(postUrl, entry); 12 evento = parseEvent(entry); 13 } 14 catch (Exception e) 15 { 16 e.printStackTrace(); 17 } 18 return result; 19 }
65
VI – Código em Java do Método editaAgd
1 public void editaAgd(String codagd, int codageemit, String tipoageemit, 2 DbConnection con, Component cOrig) { 3 try { 4 String sSQL = "SELECT A.DTAINIAGD, A.HRINIAGD, A.DTAFIMAGD,A.HRFI MAGD," 5 + "A.ASSUNTOAGD, A.DESCAGD, A.CAAGD, A.PRIORAGD, " 6 + "A.CODTIPOAGD, A.CODAGE, A.RESOLUCAOMOTIVO," 7 + "U1.IDUSU IDUSUEMIT,A.SITAGD, U2.IDUSU, A.CODAGEEMI T, " 8 + "A.DIATODO FROM SGAGENDA A, SGUSUARIO U1, SGUSUARIO U2 " 9 + "WHERE A.CODEMP=? AND A.CODFILIAL=? AND A.CODAGD=? " 10 + "AND U1.CODEMPAE=A.CODEMPAE AND " 11 + "U1.CODFILIALAE=A.CODFILIALAE " 12 + "AND U1.CODAGE=A.CODAGEEMIT AND U1.TIPOAGE=A.TIPOAGEEMIT " 13 + "AND U2.CODEMPAE=A.CODEMP AND U2.CODFILIALAE=A.CODFILIAL" 14 + "AND U2.CODAGE=A.CODAGE AND U2.TIPOAGE=A.TIPOAGE " ; 15 16 PreparedStatement ps = con.prepareState ment(sSQL); 17 ps.setInt(1, Aplicativo.iCodEmp); 18 ps.setInt(2, ListaCampos.getMasterFilia l( "SGAGENDA")); 19 ps.setInt(3, Integer.parseInt(codagd)); 20 21 ResultSet rs = ps.executeQuery(); 22 23 if (rs.next()) { 24 Calendar calIni = new GregorianCalendar(); 25 Calendar calFim = new GregorianCalendar(); 26 27 DLNovoAgen dl = new DLNovoAgen(rs.getString( "IDUSUEMIT" ), 28 rs.getString( "IDUSU" ), rs.getDate( "DTAINIAGD" ), 29 rs.getDate( "DTAFIMAGD"), cOrig, false ); 30 dl.setConexao(con); 31 32 calIni.setTime(rs.getTime( "HRINIAGD" )); 33 calFim.setTime(rs.getTime( "HRFIMAGD")); 34 35 String codage = rs.getString( "CODAGE"); 36 String dtainiagd = 37 StringFunctions.sqlDateToStrDate(rs .getDate( "DTAINIAGD" )); 38 String hiniagd = 39 StringFunctions.strZero( "" + 40 alIni.get(java.util.Calendar. HOUR_OF_DAY), 2) + ":" + 41 StringFunctions.strZero( "" + 42 calIni.get(java.util.Calend ar.MINUTE), 2); 43 String dtafimagd = 44 StringFunctions.sqlDateToStrDate(rs .getDate( "DTAFIMAGD")); 45 String hfimagd = StringFunctions.st rZero( "" + 46 calFim.get(java.util.Calendar. HOUR_OF_DAY), 2) + ":" + 47 StringFunctions.strZero( "" + 48 calFim.get(java.util.Calend ar.MINUTE), 2); 49 String assuntoagd = rs.getString( "ASSUNTOAGD"); 50 String descagd = rs.getString( "DESCAGD"); 51 String caagd = rs.getString( "CAAGD"); 52 String prioragd = rs.getString( "PRIORAGD"); 53 String codtipoagd = rs.getString( "CODTIPOAGD"); 54 String sitagd = rs.getString( "SITAGD" ); 55 String motivoagd = rs.getString( "RESOLUCAOMOTIVO"); 56 int codageemitagd = rs.getInt( "CODAGEEMIT"); 57 String diatodo = rs.getString( "DIATODO" ); 58 59 dl.setValores( new String[]{codage,dtainiagd,hiniagd, dtafimagd,
66
60 hfimagd, assuntoagd, descagd, caagd , prioragd, codtipoagd, 61 sitagd, motivoagd, diatodo }); 62 63 dl.setVisible( true ); 64 65 if (dl.OK) { 66 String[] sRets = dl.getValores( ); 67 68 if (Integer.parseInt(codage) == iCodAge || 69 codageemit == codageemitagd) { 70 71 try { 72 sSQL = "EXECUTE PROCEDURE SGSETAGENDASP" 73 + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ; 74 PreparedStatement ps2 = con. prepareStatement(sSQL); 75 ps2.setInt(1, Integer.parseI nt(( String ) codagd)); 76 ps2.setInt(2, Aplicativ o.iCodEmp); // código da 77 // empresa 78 ps2.setDate(3, Funcoes.strDa teToSqlDate(sRets[0])); 79 // inicial 80 ps2.setString(4, sRets[1] + ":00" ); // hora inicial 81 ps2.setDate(5, Funcoes.strDa teToSqlDate(sRets[2])); 82 // final 83 ps2.setString(6, sRets[3] + ":00" ); // hora final 84 ps2.setString(7, sRets[4]); // assunto 85 ps2.setString(8, sRets[5]); // descrição 86 ps2.setString(9, sRets[6]); // filial do tipo de 87 // agendamento 88 ps2.setString(10, sRets[7]); // tipo 89 ps2.setString(11, sRets[8]); // prioridade 90 ps2.setString(12, sRets[9]); // código do agente 91 ps2.setString(13, sRets[10]) ; // tipo do agente 92 ps2.setInt(14, 93 ListaCampos.getMasterFilial( "SGAGENTE")); 94 // do 95 // agente 96 // emitente 97 ps2.setInt(15, codageemit); // código do agente 98 // emitente 99 ps2.setString(16, tipoageemi t); // tipo 100 // emitente 101 ps2.setString(17, sRets[11]) ; // controle acesso 102 ps2.setString(18, sRets[12]) ; // status 103 ps2.setString(19, sRets[13]) ; // status 104 ps2.setNull(20, Types.INTEGE R); 105 ps2.setString(21, sRets[14]) ; // status 106 107 ps2.execute(); 108 ps2.close(); 109 110 con.commit(); 111 } 112 catch (SQLException err) { 113 Funcoes.mensagemErro( null , 114 "Erro ao salvar o agendamento! \n" + 115 err.getMessage( ), true , con, err); 116 } 117 } 118 } 119 dl.dispose(); 120 }
67
121 rs.close(); 122 ps.close(); 123 124 con.commit(); 125 } 126 catch (SQLException err) { 127 Funcoes.mensagemErro( null , "Erro ao buscar informações! \n" + 128 err.getMessage(), true , con, err); 129 err.printStackTrace(); 130 } 131 }
68
VII – Código em Java do Método editarEvento
1 public Evento editarEvento(Evento evento) 2 { 3 Evento result = evento; 4 try 5 { 6 CalendarEventEntry entry = getUpdatedEnt ry(evento); 7 buildEventEntry(entry, evento); 8 entry = entry.update(); 9 evento = parseEvent(entry); 10 } 11 catch (Exception e) 12 { 13 e.printStackTrace(); 14 } 15 return result; 16 }