Você está na página 1de 609

DESENVOLVIMENTO WEB

Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

HIBERNATE

O Hibernate é uma tecnologia já consolidada para trabalho com bancos de dados. A sua
função básica é permitir a comunicação entre um programa Java e um banco de dados de
uma maneira mais simples, isso por meio de uma visão orientada a objetos, que trabalha com
banco de dados relacional e abstrair muitas das operações feitas nele. Assim, o Hibernate
será o responsável por fazer a tradução dos comandos da alto nível oriundos da linguagem
Java e o banco de dados relacional.

Bibliografia
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é Hibernate?
É um serviço de consulta e persistência Objeto/Relacional de alto desempenho, de
código-fonte aberto.
5m
Nesse sentido, o usuário poderá fazer consultas em seu banco de dados, ou seja, recu-
perar entidades que estão nesse banco de dados. Ele transforma objetos em comandos rela-
cionais e vice-versa.
O Hibernate não apenas cuida do mapeamento de classes Java para tabelas de banco
de dados (e de tipos de dados Java para tipos de dados SQL), mas também fornece recursos
de consulta e recuperação de dados.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é JDBC?
JDBC significa Java Database Connectivity. Ele fornece um conjunto de APIs Java para
acessar os bancos de dados relacionais a partir de um programa Java. Essas APIs Java per-
mitem que programas Java executem instruções SQL e interajam com qualquer banco de
dados compatível com SQL.
O JDBC é considerado a forma mais simples de acessar um banco de dados. Assim,
quando não se está trabalhando com o Hibernate, se está trabalhando diretamente sobre o
JDBC. Na realidade, o Hibernate será uma abstração sobre o JDBC.
10m
O JDBC fornece uma arquitetura flexível para escrever um aplicativo independente de
banco de dados que pode ser executado em diferentes plataformas e interagir com diferentes
DBMS sem qualquer modificação (desde que não sejam utilizados comandos SQL que são
específicos de um determinado banco de dados).

Vantagens do JDBC

• Processamento SQL limpo e simples;


• Bom desempenho com grandes volumes de dados;
• Muito bom para pequenas aplicações; e
• Sintaxe simples, logo é fácil de aprender.

Desvantagens do JDBC

• Complexo se for usado em grandes projetos (isso porque será necessário escrever
muitas SQLs diferentes);
• Grande sobrecarga de programação;
• Sem encapsulamento;
• Difícil de implementar o conceito MVC;
• A consulta é específica do DBMS.

Ao utilizar o Hibernate, o programador possui menos controle sobre o SQL que está sendo
gerado. Assim, existem casos em que pode ocorrer algum tipo de queda de performance se o
Hibernate não for bem utilizado, pois ele pode começar a fazer algumas consultas um pouco
bagunçadas ou corrigidas. No entanto, é possível corrigir esses problemas.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Arquitetura básica do Hibernate


De uma forma simples, as camadas são:

Aplicação Java → Hibernate → JDBC Driver → Banco de dados

Por que Object Relational Mapping (ORM)?


Quando trabalhamos com um sistema orientado a objeto, há uma incompatibilidade entre
o modelo de objeto e o banco de dados relacional.
Os RDBMSs representam dados em um formato tabular, enquanto linguagens orientadas
a objetos, como Java ou C#, representam-no como um grafo interconectado de objetos.
15m

Exemplos
Java:

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Banco de dados relacional:

As nomenclaturas, as estruturas e a forma de representar uma entidade ou ideia são


muito diferentes entre a linguagem Java orientada a objetos e uma linguagem do SQL em um
banco de dados relacional.

CONFLITOS

Granularidade: pode existir um modelo de objeto, que tem mais classes do que o número
de tabelas correspondentes no banco de dados.
Herança: os RDBMSs não definem nada semelhante a herança, que é um paradigma
natural em linguagens de programação orientadas a objeto.
Identidade: um RDBMS define exatamente uma noção de 'igualdade': a chave primária.
Java, no entanto, define tanto a identidade do objeto (a == b) quanto a igualdade do objeto
(a.equals(b)).
Associações: linguagens orientadas a objetos representam associações usando refe-
rências de objetos, enquanto um RDBMS representa uma associação como uma coluna de
chave estrangeira.
20m
Navegação: as formas de acessar objetos em Java e em RDBMS são fundamentalmente
diferentes.
O Object-Relational Mapping (ORM) é a solução para lidar com as incompatibilidades
descritas. O ORM não existe apenas para o Java. Há várias linguagens que possuem o seu
ORM definido.

O que é ORM?
ORM significa Object-Relational Mapping (ORM) é uma técnica de programação para
converter dados entre bancos de dados relacionais e linguagens de programação orientada
a objetos, como Java, C# etc.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o Hibernate é uma espécie de ORM.

Vantagens de um ORM

• Permite que o código de negócio acesse objetos em vez das tabelas do banco de dados;
• Oculta detalhes de consultas SQL da lógica OO;
• Baseado no JDBC;
• Elimina a necessidade de lidar com a implementação do banco de dados;
• Entidades baseadas em conceitos de negócios em vez de estrutura de banco de dados;
• Gerenciamento de transações e geração automática de chaves;
• Desenvolvimento rápido da aplicação.

A utilização de um ORM aumenta bastante a velocidade de desenvolvimento de uma apli-


cação, pois isso evitaria que o programador precisasse escrever os SQL’s, que tomaria boa
parte do tempo da programação.

Composição de um ORM
Uma API para executar operações CRUD (Create/Retrieve/Update/Delete) básicas em
objetos de classes persistentes. Uma linguagem ou API para especificar consultas que se
25m
referem a classes e propriedades de classes. Um recurso configurável para especificar meta-
dados de mapeamento. Uma técnica para interagir com objetos transacionais para execu-
tar dirty checking, lazy fetching, e outras funções de otimização. O dirty checking verifica a
necessidade de fazer a atualização de um objeto no banco de dados após alguma alteração.
Já o lazy fetching permite que a busca de endereços no SLQ não seja feita de forma prévia,
isso para não sobrecarregar demais a memória do sistema.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Frameworks ORM Java


• Enterprise JavaBeans Entity Beans;
• Java Data Objects;
• Castor;
• TopLink;
• Spring DAO;
• Hibernate.

JPA – Java Persistence API


Define o gerenciamento de persistência e mapeamento objeto/relacional nos ambientes
Java Enterprise Edition (Java EE) e Java Standard Edition (Java SE).
Representa uma simplificação do modelo de programação de persistência. O JPA geren-
cia a persistência e o mapeamento objeto/relacional na especificação Java EE para o Enter-
prise Java Beans 3.0. A especificação JPA define o mapeamento objeto/relacional dentro de
suas próprias diretrizes, em vez de depender de implementações de mapeamento especí-
ficas do fornecedor. Esses recursos tornam os aplicativos que usam o JPA mais fáceis de
implementar e gerenciar.

Hibernate
Hibernate é uma solução Object-Relational Mapping (ORM) para JAVA.
O Hibernate mapeia classes Java para tabelas de banco de dados e de tipos de dados
Java para tipos de dados SQL, liberando o desenvolvedor da maioria das tarefas comuns de
programação relacionadas à persistência de dados.
O Hibernate localiza-se entre os objetos Java e o servidor de banco de dados para lidar
com todos os trabalhos de persistir esses objetos com base nos mecanismos e padrões de
O/R apropriados.
30m

Vantagens do Hibernate

• Cuida do mapeamento de classes Java para tabelas de banco de dados usando arqui-
vos XML e/ou anotações;
• Fornece APIs simples para armazenar e recuperar objetos Java diretamente para e do
banco de dados;
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Se houver uma alteração no banco de dados ou em qualquer tabela, você precisará


alterar apenas as propriedades de mapeamento;
• Abstrai os tipos de SQL desconhecidos e fornece uma maneira de contornar Objetos
Java familiares;
• O Hibernate não requer um application server para operar;
• Lida com associações complexas de objetos do banco de dados (em geral, fazendo
operações lazy/tardias);
• Minimiza o acesso ao banco de dados com estratégias de busca inteligente;
• Fornece consulta simples de dados.

Bancos de Dados Suportados

• HSQL Database Engine;


• DB2/NT;
• MySQL;
• PostgreSQL;
• FrontBase;
• Oracle;
• Microsoft SQL Server Database;
• Sybase SQL Server;
• Informix Dynamic Serve.

DIRETO DO CONCURSO
1. (2010/FCC/TRT – 22ª REGIÃO (PI)/TÉCNICO JUDICIÁRIO – TECNOLOGIA DA IN-
FORMAÇÃO) Hibernate é um framework

35m
a. que separa as funções que envolvem a construção de aplicações Web, através da
associação dos eventos do lado cliente com os manipuladores dos eventos do lado
do servidor.
b. pelo qual o programador utiliza a infraestrutura do servidor de aplicação voltada
para o desenvolvimento de aplicações de missão crítica e de aplicações empresa-
riais em geral.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

c. no qual as questões de infraestrutura, segurança, disponibilidade e escalabilidade


são responsabilidade do servidor de aplicações, permitindo que o programador se
concentre, apenas, nas necessidades do negócio do cliente.
d. que permite ao desenvolvedor de páginas para internet produzir aplicações que aces-
sem o banco de dados, manipulem arquivos no formato texto e capturem informações
a partir de formulários.
e. cujo objetivo é diminuir a complexidade entre os programas Java que precisam traba-
lhar com um banco de dados do modelo relacional.

COMENTÁRIO
O objetivo do Hibernate é diminuir a complexidade entre os programas Java que precisam
trabalhar com um banco de dados do modelo relacional.

GABARITO
1. e

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

HIBERNATE II

Arquitetura
O Hibernate possui uma arquitetura em camadas que ajuda o usuário a operar sem pre-
cisar conhecer as APIs profundamente.
O Hibernate faz uso do banco de dados e dados de configuração para fornecer serviços
de persistência (e objetos persistentes) para o aplicativo.

Obs.: essas camadas irão refletir na própria API do Hibernate e na forma como serão feitos
os acionamentos. Além disso, o Hibernate precisa de alguns metadados (ou informa-
ções adicionais) para saber como realizar os mapeamentos.

5m
Objeto Configuration
É o primeiro objeto do Hibernate que se cria e, geralmente, é criado apenas uma vez
durante a inicialização do aplicativo. Representa um arquivo de configuração ou proprieda-
des requerido pelo Hibernate.
O objeto Configuration fornece dois componentes de chaves:
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Conexão do banco de dados – Isso é feito através de um ou mais arquivos de confi-


guração suportados pelo Hibernate. Esses arquivos são hibernate.properties e hiber-
nate.cfg.xml;
• Configuração de Mapeamento de Classe – Esse componente cria a conexão entre
as classes Java e as tabelas de banco de dados.

Objeto SessionFactory
O objeto Configuration é usado para criar um objeto SessionFactory que, por sua vez,
configura o Hibernate para o aplicativo usando o arquivo de configuração fornecido e permite
que um objeto Session seja instanciado. O SessionFactory é um objeto seguro para threads
e usado por todas as threads de um aplicativo.
O SessionFactory é um objeto pesado; geralmente é criado durante o início do aplicativo
e mantido para uso posterior. É necessário um objeto SessionFactory por banco de dados
usando um arquivo de configuração separado. Portanto, se forem usados vários bancos de
dados, será necessário criar vários objetos SessionFactory.

Objeto Session
É utilizado para obter uma conexão física com um banco de dados. O objeto Session é
leve e projetado para ser instanciado toda vez que uma interação é necessária com o banco
de dados. Objetos persistentes são salvos e recuperados através de um objeto Session.
Não devem ser mantidos por um longo tempo, pois eles geralmente não são seguros
para threads e devem ser criados e destruídos conforme necessário.
10m

Objeto Transaction
Representa uma unidade de trabalho com o banco de dados e a maior parte do RDBMS
suporta a funcionalidade de transação. As transações no Hibernate são tratadas por um
gerenciador de transações (de JDBC ou JTA).
Este é um objeto opcional e os aplicativos do Hibernate podem optar por não usar essa
interface, em vez de gerenciar transações em seu próprio código de aplicativo.

Obs.: a grande vantagem do uso do objeto transaction é a possibilidade de realizar um


rollback em caso de aparecer alguma exception durante o uso da aplicação. Nesse
sentido, o programa desfaz tudo aquilo que foi feito até o surgimento da exception e
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

volta ao estado original. Exemplo: uma pessoa faz uma compra e, após isso, o sis-
tema dá baixa no estoque, faz o pagamento e gera o pedido. Caso se esteja dentro
de uma transaction, se alguma dessas operações falhar, o sistema automaticamente
desfaz as demais operações dentro do banco de dados ou não persiste com essas
operações.

Objeto Query
Usam SQL ou Hibernate Query Language (HQL) para recuperar dados do banco de
dados e criar objetos.
Uma instância de Query é usada para vincular parâmetros de consulta, limitar o número
de resultados retornados pela consulta e, finalmente, executar a consulta.

Configuration
O Hibernate precisa conhecer antecipadamente onde encontrar as informações de mape-
amento que definem como as classes Java se relacionam com as tabelas do banco de dados.
O Hibernate também requer um conjunto de configurações relacionadas ao banco de
dados e outros parâmetros relacionados.
Todas essas informações são geralmente fornecidas como um arquivo de propriedades
padrão do Java chamado hibernate.properties ou como um arquivo XML denominado hiber-
nate.cfg.xml.
A maioria das propriedades recebe seus valores padrão e não é necessário especificá-los
no arquivo de propriedades, a menos que seja realmente necessário. Esse arquivo é mantido
no diretório raiz do caminho de classe do aplicativo.
15m
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Principais propriedades:

Sessions
É a principal interface de runtime entre um aplicativo Java e o Hibernate. Essa é a classe
de API central que abstrai a noção de um serviço de persistência.
O ciclo de vida de uma sessão é limitado pelo início e final de uma transação lógica.
(Transações longas podem abranger várias transações do banco de dados.).
A principal função da Sessão é oferecer operações de criação, leitura e exclusão para
instâncias de classes de entidades mapeadas.
Instâncias podem existir em um dos três estados a seguir em um determinado momento:
• transient – Uma nova instância de uma classe persistente, que não está associada a
uma Sessão e não possui representação no banco de dados, e nenhum valor de iden-
tificador é considerado transitório pelo Hibernate;
• persistent – Uma instância transiente pode se tornar persistente, associando-a a uma
sessão. Uma instância persistente tem uma representação no banco de dados, um
valor identificador e está associada a uma sessão;
• detached – Assim que é fechada a sessão do Hibernate, a instância persistente se
tornará uma instância desanexada.
20m

Obs.: é muito importante conhecer esses três estados de uma instância, pois são cobra-
dos em prova. Assim, vale lembrar que o estado transient é aquele que não possui
nenhum tipo de ligação, o estado persistent é quando está ligado a alguma sessão e
que o estado detached ocorre quando está ligada, mas a sessão já encerrou.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo:

Classe Persistente
O objetivo principal do Hibernate é pegar os valores dos atributos de classe Java e per-
sisti-los em uma tabela de banco de dados. Um documento de mapeamento ajuda o Hiber-
nate a determinar como extrair os valores das classes e mapeá-los com a tabela e os campos
associados.
As classes Java cujos objetos ou instâncias serão armazenados em tabelas de banco de
dados são chamadas de classes persistentes no Hibernate. O Hibernate funciona melhor se
essas classes seguirem algumas regras simples, também conhecidas como modelo de pro-
gramação Plain Old Java Object (POJO).

Classe Persistente – Regras


Todas as classes Java que serão persistidas precisam de um construtor padrão.
Todas as classes devem conter um ID para facilitar a identificação de seus objetos dentro
do Hibernate e do banco de dados. Essa propriedade é mapeada para a coluna de chave
primária de uma tabela de banco de dados.
Todos os atributos que serão persistidos devem ser declarados como privados e ter os
métodos getXXX e setXXX definidos no estilo JavaBean.
Um recurso central do Hibernate, proxies, depende da classe persistente não ser final ou
da implementação de uma interface que declare todos os métodos públicos.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: nesse sentido, o Hibernate cria uma espécie de “envelope” ao redor da classe e é
importante que essa classe não seja declarada como final, pois, caso isso aconteça,
o Hibernate não conseguirá fazer o seu trabalho.

Exemplo:

DIRETO DO CONCURSO
25m
1. (CESPE/TCE-PA/AUDITOR DE CONTROLE EXTERNO–ÁREA INFORMÁTICA–ANA-
LISTA DE SISTEMA/2016) No que se refere ao desenvolvimento de sistemas e às lin-
guagens de programação Java e JavaScript, julgue o item a seguir.
Empresa de desenvolvimento que opte pela utilização do Hibernate em seus sistemas
enfrentará dificuldades à medida que seus projetos forem crescendo, devido ao fato de
o Hibernate ser considerado inapropriado para a execução de trabalhos em uma arqui-
tetura altamente escalável.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
Quanto maior é o projeto, mais recomendado é utilizar o Hibernate, pois, dessa forma, é
possível fazer correções de código de uma forma muito mais simples e sem a necessidade
de manipular uma grande quantidade de instruções SQL.

2. (CESPE/STJ/ANALISTA JUDICIÁRIO–ANÁLISE DE SISTEMAS DE INFORMA-


ÇÃO/2015) Julgue o próximo item, relacionado ao funcionamento dos frameworks para
a camada de persistência.
O Hibernate define um objeto transient com uma instância de um objeto que tenha per-
sistido e que esteja em transição para consulta e utilização pela aplicação.

COMENTÁRIO
Caso o objeto já tenha persistido, na realidade, ele estará em outro estado. Um objeto tran-
sient é aquele que ainda não foi persistido.

GABARITO
1. E
2. E

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

HIBERNATE III

Configurações do Hibernate

• Qual banco de dados será conectado;


• O tipo de banco de dados (MySQL, PostgreSQL, Oracle, …);
• Configurações específicas do Hibernate;
• Classes ou arquivos de mapeamento XML contendo os mapeamentos.

Para fazer isso, haverá um arquivo no projeto chamado hibernate.cfg.xml no diretório src/
main/java.

Exemplo de código:

5m
Nesse sentido, são duas as configurações principais:
• hibernate.cfg.xml, que será a configuração do banco de dados; e
• Configurações de cada classe: a forma mais simples é mapear uma classe para uma
tabela do banco de dados. Por padrão, uma classe estará relacionada a uma tabela no
banco de dados que foi configurado.

Existem duas formas de fazer essa configuração. A mais antiga é a que utiliza arquivos
XML, que é suportada até hoje. A outra forma é via anotation, que será estudada mais adiante.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Arquivos de Mapeamento

Mapeamentos Objeto/Relacional podem ser definidos em um documento XML.


Este arquivo de mapeamento instrui o Hibernate como mapear as classes para as tabelas
do banco de dados.

Exemplo:
Empregado.java

Empregado.hbm.xml

10m
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SQL:

Exemplo.java
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SQL

Com base nesse código, percebe-se que o Hibernate cuidou de toda a parte de persistên-
cia do projeto, montando o SQL e criando as tabelas dentro da estrutura do banco de dados.

Detalhando:
Empregado.hbm.xm

O documento de mapeamento é um documento XML com <hibernate-mapping> como o


elemento-raiz, que contém todos o elemento <class>.
O elemento <class> é utilizado para definir mapeamentos específicos de classes Java
para as tabelas do banco de dados. O nome da classe Java é especificado usando o atributo
name do elemento class e o nome da tabela do banco de dados é especificado usando o
atributo table.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O elemento <id> mapeia o atributo de ID exclusivo da classe para a chave primária da


tabela do banco de dados. O atributo "name" do elemento "id" refere-se à propriedade na
classe e o atributo "column" refere-se à coluna na tabela do banco de dados. O atributo "type"
contém o tipo de mapeamento do Hibernate. Esses tipos de mapeamento converterão do tipo
de dados Java para SQL.
15m
O elemento <generator> dentro do elemento "id" é usado para gerar automaticamente os
valores da chave primária. O atributo "class" do elemento generator é definido como native
para permitir que o Hibernate utilize o algoritmo de identidade ou sequência para criar a
chave primária, dependendo dos recursos do banco de dados utilizado.

Obs.: é comum que o próprio banco de dados tenha um mecanismo de geração de ID.

O elemento <property>é usado para mapear uma propriedade de classe Java para uma
coluna na tabela do banco de dados. O atributo "name" do elemento refere-se à propriedade
na classe e o atributo "column" refere-se à coluna na tabela do banco de dados. O atributo
"type" contém o tipo de mapeamento do Hibernate. Esses tipos de mapeamento converterão
do tipo de dados Java para SQL.

Obs.: atualmente, não é mais recomendado utilizar a estratégia de mapeamento por XML.
A preferência é para o mapeamento via anotações. Isso porque os arquivos XML
são criados como arquivos separados, o que gera bastante verbosidade e pode ocor-
rer algum desencontro entre os arquivos. Já no caso das anotações, não será criado
esse arquivo de mapeamento para todas as classes, sendo que na própria classe
serão utilizadas várias anotações, que serão os metadados do Hibernate.

Mapeamento por Anotações

As anotações são a maneira mais recente de definir mapeamentos sem o uso de


arquivo XML.
É a maneira poderosa de fornecer os metadados para o mapeamento Objeto/Relacional.
Todos os metadados são impostados no arquivo Java POJO juntamente com o código,
o que ajuda a entender a estrutura da tabela e o POJO simultaneamente durante o desen-
volvimento.

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo:
Empregado.java

Anotação @Entity
20m
As anotações padrão do EJB 3 estão contidas no pacote javax.persistence, portanto
importamos este pacote como a primeira etapa.
Segundo, usamos a anotação @Entity para a classe Empregado, que marca essa classe
como um bean de entidade, portanto ela deve ter um construtor sem argumento que seja
visível com pelo menos escopo protegido.

Anotação @Table
A anotação @Table permite que se especifique os detalhes da tabela que será usada
para persistir a entidade no banco de dados.
A anotação @Table fornece quatro atributos, permitindo que se substitua o nome da
tabela, seu catálogo e seu esquema e imponha restrições exclusivas às colunas na tabela.
Por simplicidade, no exemplo consta apenas o nome da tabela, que é empregado.

Anotação @Id e @GeneratedValue


Cada bean de entidade terá uma chave primária, que deve ser anotada na classe com @
Id. A chave primária pode ser um único campo ou uma combinação de vários campos, depen-
dendo da estrutura da tabela.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Por padrão, a anotação @Id determinará automaticamente a estratégia de geração de


chave primária mais apropriada a ser usada, mas pode-se substituir isso aplicando a anota-
ção @GeneratedValue.

Anotação @Column
A anotação @Column é usada para especificar os detalhes da coluna na qual um campo
ou propriedade será mapeado. Pode-se usar a anotação de coluna com os seguintes atributos:
• name: permite que o nome da coluna seja explicitamente especificado;
• length: permite definir o tamanho da coluna usada para mapear um valor particular-
mente para um valor String;
• nullable: permite que a coluna seja marcada como NOT NULL quando o
esquema é gerado;
• unique: permite que a coluna seja marcada como contendo apenas valores únicos.
25m

Tipos de Mapeamento

Quando se constrói um mapeamento, o Hibernate descobre e mapeia os tipos de dados


Java para tipos de dados RDBMS.
Os tipos declarados e usados nos arquivos de mapeamento não são tipos de dados Java
e nem são tipos de banco de dados SQL.
Esses tipos são chamados de tipos de mapeamento do Hibernate, que podem ser con-
vertidos de tipos de dados Java para SQL e vice-versa.

Tipos de Mapeamento Primitivos

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tipos de Mapeamento Data e Tempo

Tipos de Mapeamento Binário e Objetos Grandes

Tipos de Mapeamento JDK

É importante saber que o mapeamento tenta converter um tipo de dado do Java para um
tipo de dado do banco de dados, sendo que esses tipos não se “casam” diretamente, sendo
necessário realizar alguns tipos de conversões.

Projeto de Exemplo Completo:


https://github.com/tiagolpadua/hibernate-test.git
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (2013/CESPE/TCE-RO/AUDITOR DE CONTROLE EXTERNO – TECNOLOGIA DA IN-
FORMAÇÃO) A seguir, é apresentada parte de um arquivo XML de mapeamento (map-
ping), correspondente às linhas de 21 a 32, cuja numeração não compõe o arquivo.
30m

21. <class name="Pessoa" table="PESSOA">


22. <id name="id" column="ID_PESSOA ">
23. <generator class="native"/>
24. </id>
25. <property name="idade"/>26.<property name="nome"/>
27. <property name="sobrenome"/>
28. <set name="Eventos" table="Evento_Pessoa">
29. <key column="ID_PESSOA"/>
30. <many-to-many column="ID_EVENTO" class="Evento"/>
31. </set>
32. </class>

Tendo como referência as informações acima, julgue o item subsequente a respeito do


Hibernate 4.2.

De acordo com os padrões do Hibernate 4.2, nas linhas 25, 26 e 27, o correto seria
utilizar attribute em vez de property.

COMENTÁRIO
Item errado, pois deve-se utilizar property e não attribute.

2. (2016/FAURGS/HCPA/ANALISTA DE TI – DESENVOLVIMENTO) Qual é a anotação no


Hibernate que permite marcar uma propriedade como identificador?
a. @Entity
b. @Id
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Hibernate III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

c. @Identifier
d. @Person
e. @Key

COMENTÁRIO
A propriedade que permite marcar uma propriedade como identificador é @Id.

GABARITO
1. E
2. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ADO.NET

REFERÊNCIAS

A Microsoft possui uma documentação extensa e de boa qualidade sobre as ferramentas


que desenvolve e comercializa, portanto a principal referência é o site oficial da Microsoft:
https://docs.microsoft.com/pt-br/

Assim, esta aula irá se basear nessa documentação. Qualquer dúvida ou necessidade de
aprofundamento, o material citado pode ser livremente consultado.

INTRODUÇÃO

• O ADO.NET é um conjunto de classes que expõem serviços de acesso a dados para


desenvolvedores do .NET Framework;

 Obs.: assim, o ADO.NET é equivalente ao JDBC do Java.

• O ADO.NET fornece um conjunto rico de componentes para criar aplicativos distribuí-


dos e de compartilhamento de dados;

Obs.: o ADO.NET é, portanto, o ponto central entre a aplicação e o banco de dados na


plataforma .NET.

• Faz parte do .NET Framework, fornecendo acesso a dados de aplicativos relacio-


nais e XML;
5m

Obs.: o ADO.NET pode ser utilizado tanto para acessar um banco de dados relacional,
quanto para fazer acesso a algum arquivo XML. Assim, o ADO.NET é uma abstra-
ção para manipulação de dados independente da fonte e do fornecedor do ban-
co de dados.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O ADO.NET oferece suporte a uma variedade de necessidades de desenvolvimento,


incluindo a criação de clientes front-end de banco de dados e objetos comerciais de
camada intermediária usados por aplicativos, ferramentas, linguagens ou navegado-
res da Internet;
• O ADO.NET fornece acesso consistente a fontes de dados como o SQL Server e o
XML, e a fontes de dados expostas através do OLE DB e do ODBC;
• Aplicativos que consomem dados podem usar o ADO.NET para se conectar a essas
fontes de dados, para recuperar, manipular e atualizar os dados nelas contidos;
• O ADO.NET inclui os provedores de dados do .NET Framework para se conectar a
um banco de dados, executar comandos e recuperar resultados. Esses resultados são
processados diretamente, colocados em um objeto DataSet do ADO.NET para serem
expostos para o usuário, combinados com dados de várias fontes ou passados entre
as camadas;
• As classes do ADO.NET estão no System.Data.dll e são integradas às classes XML
encontradas no System.Xml.dll;
• O ADO.NET fornece o método mais direto de acesso a dados no .NET Framework;
• Para uma abstração mais alta que permite que os aplicativos funcionem em um
modelo conceitual em vez do modelo de armazenamento, utiliza-se o ADO.NET Entity
Framework.

Obs.: o Entity Framework pode ser comparado ao Hibernate do Java ou a outras tecnolo-
gias de ORM em outras linguagens.

Portanto, o ADO.NET permite um acesso primariamente direto através de comandos SQL


ou através do DataSet, e também permite uma abstração em um nível mais elevado utili-
zando o EntityFramework.

Provedores de dados.NET Framework

• São componentes criados explicitamente para manipulação de dados;


• O objeto Connection fornece conectividade a uma fonte de dados;
10m
• O objeto Command permite o acesso aos comandos de banco de dados para retornar
dados, modificar dados, executar procedimentos armazenados, e enviar ou recuperar
informações de parâmetros;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O DataAdapter faz a ponte entre o objeto DataSet e a fonte de dados usa os objetos
Command para executar comandos SQL, a fim de carregar o DataSet com dados e
reconciliar as alterações que foram feitas nos dados no DataSet com a fonte de dados;

Assim, há uma série de classes (Connection, Commando e DataAdapter), todas ligadas


ao ADO.NET, cada uma com uma funcionalidade distinta, mas todas relacionadas ao acesso
ao banco de dados.

Command

• O objeto de Command usa o objeto Connection para executar comandos SQL;


• Os comandos podem estar no formato de texto, Stored Procedures ou acesso
direto à tabela;
• Um recurso importante do objeto Command é que ele pode ser usado para executar
consultas e Stored Procedures com parâmetros;

Obs.: os parâmetros servem para evitar, principalmente, situações de injeção de SQL.

• Quando uma consulta é efetuada, o conjunto de resultados retornado geralmente será


armazenado em um objeto DataSet ou DataReader;

Obs.: assim, o ADO.NET oferece as duas opções de trabalho: DataSet e DataReader.

Propriedades da classe SqlCommand

Segue abaixo a relação de cada propriedade seguida de sua descrição:

• Connection
– O objeto SqlConnection que é usado pelo objeto command para executar comandos
SQL ou Stored Procedure;

• CommandText
– Representa a instrução T-SQL ou o nome do Stored Procedure;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: a linguagem Transact-SQL é uma extensão ao padrão SQL-92, sendo a linguagem


utilizada por desenvolvedores na construção de aplicações que manipulam dados
mantidos no SQL Server.

• CommandType
– Indica como a propriedade CommandText deve ser interpretada. Os valores pos-
síveis são:

1. Text
2. StoredProcedure
3. TableDirect

• CommandTimeout
– Esta propriedade indica o tempo de espera ao executar um comando específico;
15m
– O tempo padrão para a execução do comando é 30 segundos;
– O comando é abortado após expirar o tempo e uma exceção é lançada.

Métodos da classe SqlCommand

Abaixo, uma breve relação de cada método e sua descrição:

• ExecuteNonQuery
– Este método executa o comando especificado e retorna o número de linhas afetadas;

• ExecuteReader
– O método ExecuteReader executa o comando especificado e retorna uma instância
da classe SqlDataReader;

• ExecuteScalar
– Este método executa o comando especificado e retorna a primeira coluna da pri-
meira linha do conjunto de resultados. As linhas e colunas restantes são ignoradas;

• ExecuteXMLReader
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– Este método executa o comando especificado e retorna uma instância da classe


XmlReader. Esse método pode ser usado para retornar o conjunto de resultados na
forma de um documento XML;

 Obs.: dependendo da resposta desejada do ADO, um comando diferente deve ser execu-
tado. Alguns exemplos desses comandos podem ser consultados abaixo:

ExecuteNonQuery
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[“connString”].Con-
nectionString;
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = “DELETE FROM EMP WHERE DEPTNO = 40”;
cmd.CommandType = CommandType.Text;
conn.Open();
Int32 RowsAffected = cmd.ExecuteNonQuery();
MessageBox.Show(RowsAffected + “ linhas afetadas”, “Mensagem”);
cmd.Dispose();
conn.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
App.config
<?xml version=”1.0” enconding=”utf”-8”?>
<configuration>
<connectionStrings>
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<add name =”connString” connectionString = “Data Source=ServerName;InitialCatalo-


g=DatabaseName;User Id=User Name; Password=password;”providerName=”System.Data.
SqlClient:/>
</connectionStrings>
</configuration>

ExecuteReader
20m

• O objeto DataReader é um cursor somente para leitura;


• Requer uma conexão ativa com a fonte de dados;
• O objeto DataReader não pode ser diretamente instanciado. Em vez disso, devemos
chamar o método ExecuteReader() do objeto de command para obter um objeto Data-
Reader válido;

 Obs.: assim, com o ExecuteReader, um DataReader será retornado, funcionando como um


cursor para o banco de dados. Desse modo, a conexão ainda está ativa, retornando
os dados aos poucos, sendo possível interagir com eles à medida em que eles vão
sendo retornados.

Abaixo, outro exemplo de código:


SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[“connString”].Con-
nectionString;
try {
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = “SELECT EMPNO,ENAME FROM EMP”;
cmd.CommandType = CommandType.Text;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (reader.HasRows) {
while (reader.Read()) {
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

MessageBox.Show(“No Empregado: “ + reader[“EMPNO”].ToString() + “ Nome:” + rea-


der[“ENAME”].ToString());
}
cmd.Dispose();
conn.Dispose();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
Aqui foi usado o DataReader para iterar sobre o conjunto de respostas depois de efetuar
um comando sobre o banco de dados.

ExecuteScalar

• O método ExecuteScalar do SqlCommandObject retorna a primeira coluna da primeira


linha depois de executar a consulta na fonte de dados;
• Se o conjunto de resultados contiver mais de uma coluna ou linhas, será recuperada
apenas a primeira coluna da primeira linha. Todos os outros valores são ignorados;
• Se o conjunto de resultados estiver vazio, retornará null;

 Obs.: assim, o ExecuteScalar serve não retornar uma lista de resultados após a utiliza-
ção de um comando Sql. Nesse caso, o comando irá retornar um resultado único
que representa o comando feito, como uma soma de valores, uma contagem ou
uma média.

Abaixo, o exemplo de comando:


SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[“connString”].Con-
nectionString;
try {
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = “SELECT SUM(SAL) SAL FROM EMP”;
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

cmd.CommandType = CommandType.Text;
conn.Open(); Int32 TotalSalary = Convert.ToInt32(cmd.ExecuteScalar());
MessageBox.Show(“O total de salários é: “ + TotalSalary.ToString());
cmd.Dispose();
conn.Dispose();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
Assim, o ExecuteScalar é utilizado para quando se obtiver uma resposta única, geral-
mente cálculos de operações, médias e afins.
25m

ExecuteXmlReader

• É utilizado quando precisamos do conjunto de resultados na forma de um


documento XML;
• O método ExecuteXmlReader retorna uma instância da classe XmlReader;

 Obs.: em geral, este comando é utilizado ao trabalhar com XMLs ou quando o resultado
persiste em XML.

Observar o exemplo de código a seguir:


SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[“connString”].Con-
nectionString;
try {
SqlCommand cmd = new SqlCommand(“SELECT * FROM EMP FOR XML RAW(‘EM-
PLOYEE’), ROOT(‘EMP’), ELEMENTS”, conn);
conn.Open();
XmlReader xmlreader = cmd.ExecuteXmlReader();
XmlDocument xdoc = new XmlDocument();
while (xmlreader.Read()) {
xdoc.Load(xmlreader);
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Ado.Net
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

}
xdoc.Save(“C:\\Empregados.xml”);
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
Essa situação é útil ao trabalhar com exportação de dados.

DIRETO DO CONCURSO
1. (2016/CESPE/TCE-PA/INFORMÁTICA – ANALISTA DE SISTEMA) Com relação ao de-
senvolvimento de aplicações que utilizam o.NET Framework, julgue o item subsequente.
O ADO.NET é uma linguagem de scripts que fornece funcionalidades similares ao Ja-
vaScript para os desenvolvedores do.NET Framework.

COMENTÁRIO
O ADO está relacionado ao banco de dados e não tem relação com o JavaScript.
Além disso, o ADO não é uma linguagem.

2. (2011/CESPE/TRE-ES/PROGRAMADOR DE COMPUTADOR – ESPECÍFICOS) Por


não ser extensível, o ADO.NET não possibilita a criação de novos objetos que permi-
tam operações com a origem dos dados, como a execução de comandos SQL para a
comunicação com outras fontes de dados não disponíveis na configuração original.

COMENTÁRIO
O ADO é bastante expansível, sendo constituído por uma série de classes e interfaces
feitas para serem adaptadas a novas fontes de dados que podem surgir.

GABARITO
1. E
2. E

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
ANOTAÇÕES

preparada e ministrada pelo professor Tiago Lage Payne de Pádua.


A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva
deste material.

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ADO.NET II

Como foi visto anteriormente, o ADO.NET fornece dois métodos de acesso aos dados: o
DataReader e o DataSet. Como o DataReader foi estudado na aula anterior, esta aula partirá
do estudo do DataSet:

DataSet

• O DataSet do ADO.NET é criado explicitamente para o acesso independente aos dados


de qualquer fonte de dados.
• Consequentemente, ele pode ser usado com várias fontes de dados diferentes, usado
com dados XML ou usado para gerenciar o local dos dados no aplicativo.

Obs.: assim, o DataSet pode ser utilizado para gerenciar os dados locais de um aplicativo,
de uma aplicação web ou fazer acesso a tabelas. Apesar disso, o DataSet tem a ca-
racterística de fazer todo o carregamento do modelo de dados de uma só vez, o que
pode ser danoso em termos de performance.

• O DataSet contém uma coleção de um ou mais objetos DataTable que consiste em


linhas e em colunas de dados, e também em chave primária, chave estrangeira, restri-
ção e informações de relação sobre os dados nos objetos DataTable.

Obs.: o DataTable carrega as tabelas do banco de dados para dentro do DataSet, criando
um clone desse banco de dados, mas com características específicas de lógica de
programação.

Diante disso, é importante entender que existe toda uma hierarquia de classes, com algu-
mas delas representadas abaixo:
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É possível observar o objeto Dataset, que pode ter uma DataTableCollection, por exem-
plo, onde cada uma das DataTables pode ter uma DataView, elencando uma PrimaryKey,
além de ter Constraints, Coleções e Relações. Há, ainda, uma DataRowCollection e a Data-
Row, que representa cada uma das linhas.

• O objeto DataSet dá suporte a cenários de dados desconectados e distribuídos com


o ADO.NET.

Obs.: o fluxo de funcionamento do DataSet consiste em ler os dados da fonte de dados, se


desconectar da fonte, fazer as alterações e manipulações e, depois, fazer o merge
com a base de dados. Diferentemente do DataReader, que opera ainda em estado
de conexão com o banco de dados.
5m

•O DataSet é uma representação residente na memória que fornece um modelo de pro-


gramação relacional consistente independentemente da fonte de dados.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: ou seja, ele traz para a memória a estrutura do banco de dados.

• Ele pode ser usado com várias e diferentes fontes de dados, com dados XML ou para
gerenciar dados locais do aplicativo.
• Ele representa um conjunto completo de dados, incluindo tabelas relacionadas, restri-
ções e relacionamentos entre as tabelas.

Obs.: mesmo as restrições das informações entre as tabelas também são aplicadas
ao DataSet.

• Os métodos e objetos em um DataSet são consistentes com aquelas no modelo de


banco de dados relacional.
• O DataSet também pode persistir e recarregar seu conteúdo como XML e seu esquema
como um XSD – XML Schema Definition.

Obs.: o ADO.NET tem um suporte intrínseco com o XML. Assim, tanto o DataReader quanto
o DataSet podem ser utilizados para iterar com o XML.

Escolhendo um DataReader ou um DataSet

• Para decidir se um aplicativo deve usar um DataReader ou uma DataSet, deve-se con-
siderar o tipo de funcionalidade que o aplicativo requer. Use um DataSet para fazer
o seguinte:

• Armazenar dados em cache localmente no aplicativo para que se possa manipulá-lo.


Para ler somente os resultados de uma consulta, o DataReader será a melhor opção.

Obs.: é a melhor opção manter dados que mudam pouco ao longo do tempo em cache
dentro do DataSet, de modo a manipulá-los dentro do DataSet. Caso o objetivo seja
apenas ler o resultado de uma resposta, o DataReader é uma opção melhor, pois ele
gasta menos memória do que o DataSet.

• Estabelecer a comunicação remota dos dados entre camadas ou em um serviço Web XML.
• Interagir com os dados dinamicamente, por exemplo, fazendo a associação a um con-
trole do Windows Forms ou combinando e relacionando dados de várias fontes.
10m
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o DataSet pode ser utilizado para carregar dados de várias fontes e exibi-los em tela.

• Executar um processamento extensivo nos dados sem precisar de uma conexão aberta
com a fonte de dados, o que libera a conexão a ser usada por outros clientes.
• Usando o DataReader, pode-se melhorar o desempenho porque economiza-se a
memória que poderia ser consumido pela DataSet e evitar o processamento que é
necessário para criar e preencher o conteúdo do DataSet.

Assim, dependendo da especificidade de cada cenário deve-se escolher o DataReader


ou o DataSet.
Agora serão estudados alguns objetos presentes no DataSet:

DataTableCollection

• ADO.NET DataSet contém uma coleção de zero ou mais tabelas representadas por
DataTable objetos.
• O DataTableCollection contém todos os objetos DataTable em um conjunto de dados.
• Um DataTable é definido no namespace System.Data e representa uma única tabela de
dados residentes na memória.
• Ele contém uma coleção de colunas representadas por DataColumnCollection e restrições
representadas por ConstraintCollection, que definem em conjunto o esquema da tabela.
• Um DataTable também contém uma coleção de linhas representadas pelo DataRow-
Collection, que contém os dados na tabela.
• Juntamente com seu estado atual, um DataRow retém sua versão atual e sua versão
original para identificar alterações em valores armazenados na linha.

DataView

• Um DataView permite que se crie diferentes exibições dos dados armazenados em um


DataTable, um recurso que é geralmente usado em aplicativos de vinculação de dados.
• Ao usar uma classe DataView, pode-se expor os dados em uma tabela com diferentes
ordens de classificação e filtrar os dados por estado de linha ou com base em uma
expressão de filtro.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: ou seja, o DataView define uma restrição sobre os dados que foram colecionados para
que eles possam ser exibidos de uma forma diferente.

DataRelationCollection

• Um DataSet contém relações em seu objeto DataRelationCollection.


15m
• Uma relação associa linhas em um objeto DataTable com linhas em outra DataTable.
Uma relação é análoga a um caminho de união que possa existir entre colunas primá-
rias e colunas de chave estrangeira em um banco de dados relacional.
• Um DataRelation identifica colunas correspondentes em duas tabelas de uma con-
junto de dados.
• As relações permitem a navegação de uma tabela para outra em um DataSet.
• Os elementos essenciais de um DataRelation são o nome da relação, o nome das tabe-
las que estão sendo relacionadas e as colunas relacionadas em cada tabela.
• As relações podem ser construídas com mais de uma coluna por tabela especificando
uma matriz de objetos DataColumn como colunas-chave.
• Quando se adiciona uma relação com o DataRelationCollection, opcionalmente, pode-
-se adicionar uma UniqueKeyConstraint e uma ForeignKeyConstraint para impor res-
trições de integridade quando alterações são feitas para a coluna relacionada valores.

XML

• Pode-se preencher um DataSet de um fluxo XML ou documento.


• Pode-se usar o fluxo ou documento XML para fornecer para o DataSet dados, informa-
ções de esquema ou ambos.
• As informações fornecidas do fluxo XML ou documento podem ser combinadas com
dados existentes ou informações de esquema já presentes no conjunto de dados.

Obs.: assim, é possível adicionar informações de XML em um DataSet já pré populado.

ExtendedProperties

• O DataSet, DataTable, e DataColumn têm uma propriedade chamada ExtendedProperties.


ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• ExtendedProperties é um PropertyCollection onde se pode colocar informações perso-


nalizadas, como a instrução SELECT que foi usada para gerar o conjunto de resulta-
dos ou a hora quando os dados foram gerados.
• O ExtendedProperties será persistido com as informações de esquema para o con-
junto de dados.

Obs.: o ExtendedProperties vai representar metadados opcionais para que possam eventu-
almente ser utilizados ou persistidos.

Outro ponto importante a estudar são os eventos emitidos pelo DataSet:

Eventos do DataSet

•O objeto DataSet fornece três eventos: Disposed, Initialized e MergeFailed.


• MergeFailed: É o evento mais comumente usado do objeto DataSet e ocorre quando o
esquema dos objetos DataSet que estão sendo mesclados está em conflito.
• Isso ocorre quando um DataRow de destino e de origem tem o mesmo valor de chave
primária e a propriedade EnforceConstraints está definida como true.
• Por exemplo, se as colunas de chave primária de uma tabela que está sendo mesclada
forem as mesmas entre as tabelas nos dois objetos DataSet, uma exceção será lan-
çada e o evento MergeFailed será gerado.
• Initialized: ocorre após o construtor do DataSet inicializar uma nova instância do DataSet.
• Disposed: pode-se usar o evento Disposed de um DataSet quando se quiser executar
o código quando o método Dispose for chamado.

O mais importante desses eventos é o MergeFailed, que ocorre quando há uma falha na
tentativa de fazer o Merge entre o DataSet com alterações com o banco de dados original.
20m
Abaixo há um exemplo de código que usa o DataSet:
string sConnectionString;
sConnectionString = “Password=myPassword;User ID=myUserID;Initial Catalog=pubs;-
Data Source=(local)”;
SqlConnection objConn = new SqlConnection(sConnectionString);
objConn.Open();
SqlDataAdapter daAuthors = new SqlDataAdapter(“Select * From Authors”, objConn);
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DataSet dsPubs = new DataSet(“Pubs”);


daAuthors.FillSchema(dsPubs, SchemaType.Source, “Authors”);
daAuthors.Fill(dsPubs, “Authors”);
DataTable tblAuthors;
tblAuthors = dsPubs.Tables[“Authors”];
foreach (DataRow drCurrent in tblAuthors.Rows) {
Console.WriteLine(“{0} {1}”,
drCurrent[“au_fname”].ToString(),
drCurrent[“au_lname”].ToString());
}
Assim, é possível observar o fluxo de trabalho no DataSet: primeiro é criada a conexão,
depois é criado o DataSet separado da conexão do banco de dados, preenche-se com o
esquema e com os dados de autores e, assim, é possível trabalhar com a conexão fechada.

DIRETO DO CONCURSO
1. (FCC/DPE-SP/PROGRAMADOR DE COMPUTADOR/2013) O ADO.NET é um conjunto de
classes que fazem parte do.NET Framework e que expõem serviços de acesso a dados
para programadores da plataforma.NET. Sobre o componente DataSet do ADO.NET
no.NET Framework 4.5 é correto afirmar:
a. É possível criar uma instância de um DataSet chamando o construtor da classe Data-
Set, porém, não é possível criar um novo DataSet baseado em um DataSet existente.
b. A única maneira de se trabalhar com um DataSet é preenchendo o DataSet com tabe-
las de dados de uma fonte de dados relacional existente usando um DataAdapter.
c. Para permitir a navegação de um DataSet para outro dentro de um DataTable utiliza-
-se um objeto DataRelation.
d. Um DataSet pode conter uma coleção de um ou mais objetos DataTable que consis-
tem em linhas e colunas de dados, e também chave primária, chave estrangeira, e
informações sobre as relações dos dados nos objetos DataTable.
e. Um objeto DataSet fornece apenas os eventos Disposed e Initialized. O evento Dis-
posed é usado para executar algum código quando o método Dispose for chamado.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Ado.Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
a) Existem várias opções para criar um DataSet a partir de uma cópia dele. Essa cópia
pode ser uma clonagem completa, pode ser uma cópia só do conteúdo, ou, ainda, uma
cópia do esquema apenas.
25m
b) Um fluxo XML não é uma base relacional, de modo que ele não precisa ser obrigatoria-
mente a partir de uma base relacional.
c) O DataRelationCollection permite a navegação de uma tabela para a outra em um DataSet.
d) Um DataTableCollection contém uma coleção de colunas representadas por DataCo-
lumnCollection e restrições representadas por ConstraintCollection. Além disso, ele con-
tém também uma coleção de linhas representadas pelo DataRowCollection.
e) São três os eventos do objeto DataSet: Disposed, Initialized e MergeFailed.

GABARITO
1. d

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DESENVOLVIMENTO WEB

.NET – CONCEITOS

Bibliografia

https://docs.microsoft.com/pt-br/dotnet/

O que é.NET

• O.NET é uma plataforma para desenvolvimento de código aberto gratuita e multiplata-


forma para a criação de vários tipos de aplicativos.

Deste modo, o.NET não é uma linguagem de programação.


Há autores que dizem ser um framework, mas, na verdade, o.NET fornece um ambiente
para desenvolver. Inclusive, podem ser utilizadas várias linguagens de programação no .NET.

• .NET, permite a utilização de várias linguagens de programação, editores e bibliotecas


para criar aplicações Web, Mobile, desktop, jogos e IoT.

IoT é a internet das coisas.


Neste sentido, o.NET trata-se de uma plataforma para múltiplos objetivos.
Existem algumas linguagens de programação, a exemplo do OR, que são mais voltadas
para estatísticas. O .NET, no entanto, é voltado para desenvolver qualquer coisa, possuindo
múltiplos objetivos.

• Todo e qualquer código gerado para.NET pode ser executado em qualquer dispositivo
que possua um framework de tal plataforma.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A título de exemplo, o.NET é muito semelhante ao Java, ou seja, tem o objetivo de escre-
ver o código uma vez e compilá-lo para, depois, ser utilizado em plataformas com runtime ou
“tempo de execução”, como traduzido por algumas bancas.
5m
Logo, em qualquer lugar que houver runtime do.NET será possível executá-lo.
Não obstante, é muito comum o.NET estar associado à plataforma da Microsoft do Win-
dows, mas nada impede de rodar em outras plataformas.
Fazendo paralelos, o Java tem um conceito muito mais multiplataforma que o .NET, pois
seu software, basicamente, roda em qualquer plataforma. Já o software .NET terá algumas
implementações específicas, mas em sua maior parte, funciona em qualquer ambiente,
apesar de haver funções que só servirão para o Windows e outras funções que só servirão
para outras plataformas.

• O .NET é uma plataforma de desenvolvimento de uso geral.

Exemplos: jogos, desktop, site ou qualquer coisa que se deseja fazer com programação.

• Possui suporte para várias linguagens de programação, modelos de programação


assíncronos e simultâneos, além de interoperabilidade nativa, o que possibilita uma
ampla variedade de cenários em várias plataformas.

É muito comum trabalhar com o Java, mas surgiram outras linguagens posteriormente,
como é o caso do .NET, que já iniciou com foco muito maior em ter outras linguagens.
O .NET permite um modelo de programação assíncrono e simultâneo, que só chegou no
Java recentemente.
Da mesma forma que é possível desenvolver vários tipos de aplicativos pelo .NET,
também é possível desenvolver para vários tipos de dispositivos como celular, televisão etc.

• De forma semelhante à plataforma Java, o programador deixa de escrever o código


para um sistema ou dispositivo específico, e passa a escrever para a plataforma .NET.

O conceito do .NET é muito mais próximo do Java. Porém, no Java, confunde-se a pró-
pria linguagem com o runtime, enquanto no .NET isso é um pouco mais separado, pois o
.NET é a plataforma, enquanto a linguagem poderá ser diversificada.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

LINGUAGENS

• O .NET dá suporte a várias linguagens de programação.


• Uma implementação .NET implementa o CLI (Common Language Infrastructure), que,
entre outras coisas, especifica um runtime independente de linguagem e possibilita
interoperabilidade entre estas linguagens.

O .NET possui mais um conceito como plataforma, mas existem implementações volta-
das para diversos outros dispositivos, como para o celular, para multiplataformas ou para o
Windows. Essas implementações conseguem executar a mesma base de código, mudando
apenas o suporte de algumas bibliotecas.

• O código-fonte é compilado para Common Intermediate Language (CIL) que é inter-


pretado pela máquina virtual Common Language Runtime (CLR).

Esse fator é bastante parecido com o Java: ao escrever o código, será gerado um código
intermediário. O código intermediário não é o código-fonte que foi escrito na linguagem e nem
é o código de máquina para poder ser compreendida pelo processador.
10m
Quando o código for executado numa máquina, sofrerá um segundo processo de com-
pilação para que seja executado corretamente na máquina. Deste modo, o mesmo código
escrito para rodar no Windows ou no Linux poderá rodar também numa implementação de
celular, que tem um outro tipo de processador, ou numa televisão, por exemplo.

• A Microsoft desenvolve ativamente e dá suporte a três linguagens de .NET:

C#
F#
– VB (Visual Basic).

A listagem de linguagens suportadas pelo .NET é muito grande, de 10 a 20, mas a Micro-
soft o desenvolveu para dar suporte principalmente a essas três linguagens.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

C#

• O C# é simples, fortemente tipado e orientado ao objeto, mantendo a expressividade


e elegância das linguagens de estilo C.

Esta é a linguagem que é mais parecida com Java, com cerca de 80% de semelhança.

• Qualquer pessoa familiarizada com C e linguagens semelhantes encontra poucos pro-


blemas para adaptar-se ao C#.
• Embora aplicações C# se destinam a ser econômicas no que diz respeito à memória
e requisitos de processamento, o C# não foi concebido para competir diretamente no
desempenho e tamanho com C ou linguagem Assembly.

Neste sentido, consegue-se uma performance muito boa para utilizar o C#, mas não há
o objetivo de competir com linguagens do tipo mais baixo, como C ou Assembly, que são lin-
guagens mais performáticas.
Isso não é um defeito do C#, pois foi planejado para ter outras features e não ser focado
tanto na performance.
A performance do.NET é muito parecida com a do Java.
Na atualidade, com os computadores mais rápidos, a diferença para rodar programas
comuns será muito baixa, programas comuns do dia a dia, mas para programas muito espe-
cíficos, pode ser que haja a necessidade de, a depender de cada caso, não se utilizar o C#,
mas sim a linguagem C ou Assembly.
Observe o seguinte código em C#:
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Há a definição de “using”, há a definição de um “namespace” que é um ambiente onde o


código será executado, a definição de uma classe e de um método “main” e, por fim, a utili-
zação de um “console.WhiteLine”.

Este código é apenas um modelo de demonstração.

F#

• F# é uma linguagem de programação de plataforma cruzada com prioridade para


a parte funcional e que também dá suporte à programação imperativa e orientada
a objetos.
• Pertence à família das linguagens ML, e é em grande parte compatível com a lin-
guagem OCaml.

Essa já é uma linguagem com viés mais acadêmico e vem trazer uma tendência atual de
mercado, que é a utilização de linguagens funcionais.
As linguagens funcionais são fortemente baseadas em algumas estruturas da matemá-
tica que são as funções.
No entanto, o F# não é uma linguagem puramente funcional como, por exemplo, o RASP.
O F# é um meio termo entre a linguagem interativa e dentro do objeto com características
muito fortes de uma linguagem funcional.
Observe o seguinte código em F#:
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Trata-se de um código bem diferente. Possui “open System” para a função do console,
além do let, main, argv e print.
15m
É uma sintaxe bem diferente, nada parecida com o Java ou C#, justamente por que essa
linguagem deriva do ML, que é mais antiga e funcional. Porém, possui características bem
modernas e também orientadas ao objeto.
Este código é apenas um modelo de demonstração.

Visual Basic

• Visual Basic é uma linguagem fácil de aprender, utilizada para criar uma variedade de
aplicativos executados no .NET.
• Entre as linguagens de .NET, a sintaxe da VB é a mais próxima da linguagem humana
comum, geralmente sendo mais fácil para pessoas iniciantes no desenvolvimento
de software.

O VB é uma linguagem que tem o foco e o viés de ser fácil, no entanto, não dá tanta per-
formance, pela simplicidade, permitindo que pessoas sem tanto conhecimento de programa-
ção e de desenvolvimento de software possam desenvolver algum programa.
Observe o seguinte código em Visual Basic:
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Há uma estrutura de módulos, uma sub-rotina que chama o console. Após, termina a sub
rotina e termina o módulo de linguagem.
Este código é apenas um modelo de demonstração.

Multiplataforma

Independentemente de a implementação ser realizada em C#, F# ou Visual Basic, o


código será executado nativamente em qualquer sistema operacional compatível. Existem
diferentes implementações .NET de acordo com o caso de uso:

• O .NET Core é uma implementação.NET de multiplataforma para sites, servidores e


aplicativos de console no Windows, Linux e macOS.
• O .NET Framework oferece suporte a sites, serviços e aplicativos de área de trabalho
no Windows.
• O Xamarin/Mono é uma implementação do .NET para executar aplicativos em todos
os principais sistemas operacionais móveis.

Deste modo, .NET Core é voltado para máquinas desktop, sendo multiplataforma e open-
source para qualquer sistema operacional, o .NET Framework é voltado exclusivamente para
o Windows, e o Mono ou Xamarin é a versão para sistemas operacionais móveis.

API Consistente

• O .NET Standard é um conjunto básico de APIs comuns a todas as implementa-


ções do .NET.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Além das três implementações principais, existe um padrão que é chamado de .NET
Standard, que declara uma série de bibliotecas ou de funcionalidades que são básicas.
20m
Deste modo, se utilizar os recursos básicos, o programa funcionará em qualquer das três
implementações.

• Cada implementação também pode expor APIs adicionais específicas dos sistemas
operacionais em que é executada. Por exemplo, o .NET Framework é uma implemen-
tação .NET somente do Windows que inclui APIs para acessar o registro do Windows.

O registro é uma estrutura de dados que só existe no Windows, não existindo no Linux
ou no MacOS.

Bibliotecas

• Para permitir a extensão de funcionalidades, a Microsoft e outros mantêm um ecossis-


tema de pacotes baseado no .NET Standard.
• O NuGet é um gerenciador de pacotes criado especificamente para .NET que contém
mais de 90.000 pacotes.

O NuGet é o equivalente ao NPM ou ao Maven do mundo Javascript.


Neste sentido, o NuGet é um gerenciador de pacotes. Se o programador depender de
uma série presente em outra biblioteca para que o programa funcione, o NuGet acessa a
internet e faz o download dessa biblioteca. Se a biblioteca estiver trabalhando com o padrão
da .NET Standard, poderá ser utilizada em qualquer uma das implementações do .NET.

Ferramentas

• O Visual Studio é a IDE oficial de desenvolvimento em .NET e tem versões para Win-
dows, Linux e macOS.
• Também é possível utilizar outros editores em conjunto com ferramentas e plugins de
linha de comando .NET.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Em um ambiente de desenvolvimento é muito importante possuir as ferramentas adequa-


das. A ferramenta oficial da Microsoft é o Visual Studio – não confundir com o Vs Code, de
nome parecido, mais voltado para o desenvolvimento do Javascript.
Há ainda ferramentas de linha de comando que também permitem, por exemplo, a exe-
cução de algum código num ambiente de integração contínua ou num servidor de compilação
de código.
Se o programador não quiser utilizar o Visual Studio ou o Vs Code, basta usar direta-
mente a ferramenta de linha de comando.

Gerenciamento automático de memória

• O .NET usa a (GC) coleta de lixo para fornecer gerenciamento automático de memória
para os programas.
• A GC opera em uma abordagem lenta no gerenciamento de memória, dando priori-
dade à taxa de transferência do aplicativo em relação à coleta imediata da memória.

O garbage collector é uma estratégia de colégio que ficou muito famosa depois do
Java, que era muito trabalhoso e muito propenso aos bugs relacionados ao gerenciamento
de memória.
Ao utilizar um objeto, o programador tinha que desalocar aquela memória e, geralmente,
quando se esquecia deste procedimento, ocorria o chamado vazamento de memória, de
modo que o programa entrava em colapso.
Isso não acontece quando o programa é desenvolvido pelo .NET, pois o gerenciamento
dessa memória é automático: ao terminar de utilizar uma variável – lista ou string ou bloco de
memória, por exemplo – automaticamente o garbage collector libera essa memória.
Há, portanto, uma priorização da performance do sistema em detrimento ao consumo
de memória.
A lógica do sistema seria o programa funcionar mais rápido do que consumir pouca
memória, pois a memória seria para ser usada mesmo.
25m
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Gerenciamento automático de memória

Não há nenhuma palavra-chave análoga para desalocar memória, pois a desalocação


ocorre automaticamente quando o coletor de lixo recupera a memória por meio de sua exe-
cução agendada.
Exemplo:

A desocupação da memória do código acima é automática.

Ao terminar de utilizar a variável, sai do método que estava utilizando e automaticamente,


em algum momento, o garbage collector vai liberar a memória de acordo com o algoritmo.

Gerenciamento automático de memória

• O coletor de lixo é um dos serviços que ajudam a garantir a segurança da memória.


Um programa é considerado de memória segura se ele acessa somente a memória
alocada. Por exemplo, o runtime garante que um aplicativo não acesse memória não
alocada além dos limites de uma matriz.

Exemplo em C#:

No caso, o último índice era o índice 41. O sistema não permitiu que fosse feito um
acesso no local que estava fora dos limites daquela lista.
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Trabalhando com recursos não gerenciados

• Alguns objetos fazem referência a recursos não gerenciados.


• Os recursos não gerenciados são recursos que não são mantidos automaticamente
pelo runtime do.NET.
• Por exemplo, um identificador de arquivo é um recurso não gerenciado.
• Um objeto FileStream é um objeto gerenciado, mas ele faz referência a um identifica-
dor de arquivo, que não é gerenciado.
• Quando você termina de usar o FileStream, é necessário liberar o identificador
de arquivo.

Existem alguns recursos que possuem tempo, como abrir um arquivo e depois ter que
liberar o mesmo arquivo, caso em que o próprio.NET vai ajudar a fazer este procedimento.

Trabalhando com recursos não gerenciados

• No.NET, objetos que fazem referência a recursos não gerenciados implementam a


interface IDisposable.
• Quando o uso do objeto é encerrado, chama-se o método Dispose() do objeto, respon-
sável por liberar quaisquer recursos não gerenciados.
• As linguagens do.NET fornecem uma sintaxe using conveniente para esses objetos.

Exemplo em C#:

Ao fazer a abertura de um arquivo para leitura, por exemplo, haverá operações no fluxo.
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO DE SISTEMAS
Desenvolvimento Web
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Uma vez que o bloco “using” é concluído, o runtime do.NET automaticamente chama o
método Dispose() do objeto stream, que libera o identificador de arquivo.
Isto também ocorre se uma exceção fizer com que o controle deixe o bloco.
Quando terminar o bloco, portanto, será liberado o arquivo automaticamente.
Se ocorrer um erro no programa, chamado de exceção, por exemplo durante a leitura do
arquivo, este também será liberado, ou seja, tenta-se evitar que o arquivo fique travado fora
do momento que deveria ser aberto no computador. É o exemplo de haver a mensagem de
que o arquivo já está sendo utilizado por um outro processo, caso que, automaticamente,
o.NET fará o processo ajudando ao framework, ajudando a tornar a programação mais fácil
e menos propensa a erros.
30m

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

NET II

SEGURANÇA DOS TIPOS

• Um objeto é uma instância de um tipo específico;


• As únicas operações permitidas para um determinado objeto são aquelas do seu tipo;
• Um tipo Cachorro pode ter os métodos Pular e AbanarCauda, mas não um método
Totalizar;

O Dot. Net tem o foco em orientação a objetos, trazendo a segurança dos tipos. Só é per-
mitido que os métodos sejam acionados se forem métodos específicos do objeto. As únicas
ações permitidas são as que o objeto contém.
No Java é comum começar os métodos com letra minúscula. No Dot. Net é comum come-
çar os métodos com letra maiúscula.

• Um programa só pode acionar os métodos que pertencem a um determinado tipo;


• Todas as outras chamadas resultam em um erro em tempo de compilação ou uma
exceção em tempo de execução (no caso de usar recursos dinâmicos ou object);

Quando é chamado um método que não existe em uma classe, é gerado um erro em
tempo de compilação, ou seja, enquanto se está desenvolvendo. Existem estratégias para
acionar dinamicamente métodos em objetos, e esse acionamento dinâmico ocorre em tempos
de execução. Porém, mesmo em tempos de execução, se for acionado um método que não
existe no objeto é lançado uma exceção específica estabelecendo isso.

• As linguagens do.NET são orientadas a objeto, com hierarquias de classes base e


classes derivadas;

No Java há alguns tipos de dados que não são da hierarquia do Object, sendo os tipos
primitivos. No C# todos os tipos herdam de uma classe base chamada Object. Além disso,
possui hierarquias de classe, com herança, polimorfismo, e outros elementos da orienta-
ção a objeto.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O runtime do.NET só permite conversões de objeto e chamadas alinhadas à hierarquia


do objeto;

Se tentar converter um objeto de um tipo para outro tipo será verificado se o tipo está na
hierarquia do objeto, e garantirá que isso ocorra de forma correta.
5m

• Todos os tipos definidos em qualquer linguagem.NET derivam do tipo base Object.

Exemplo de código em C#:

Dog dog = AnimalShelter.AdoptDog(); // Retorna um objeto do tipo Dog.

É declarado um objeto chamado ‘dog’, que chama o método AnimalShelter.AdoptDog.

Pet pet = (Pet)dog; // Dog deriva de Pet. pet.ActCute();

É feita uma conversão de ‘dog’ para ‘pet’, visto que o cachorro é um tipo de animal. O
método é o ActCute.

Car car = (Car)dog; // Erro será lançado – não há relação entre um Car e um Dog.
object temp = (object)dog; // Legal - um Dog é um object.

Na conversão de ‘dog’ para ‘car’ ocorrerá um erro, pois não há relação entre eles. A con-
versão de ‘dog’ para object é permitida, pois toda classe é do tipo Object.

VISIBILIDADE DE MEMBROS

• A segurança de tipos também é usada para ajudar a forçar o encapsulamento, garan-


tindo a fidelidade através palavras-chave modificadoras de acesso;
• Palavras-chave modificadoras de acesso são artefatos que controlam o acesso a
membros de um determinado tipo por outro código;
• Elas geralmente são usadas para vários tipos de dados dentro de um tipo para geren-
ciar seu comportamento;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo:

// C#
private Dog _nextDogToBeAdopted = AnimalShelter.AdoptDog()
Existem métodos do objeto públicos, que podem ser acionados de fora da classe, e pri-
vados, que só podem ser acionados pela própria classe.

INFERÊNCIA DE TIPOS

C#, VB e F# dão suporte à inferência de tipo de variável local;

• Inferência de tipos significa que o compilador deduz o tipo da expressão no lado


esquerdo da expressão com base na expressão do lado direito;
• Isso não significa que a segurança de tipos é interrompida ou evitada;
• O tipo resultante realmente tem um tipo forte com tudo o que a expressão implica.

Exemplo:

// C# var dog = AnimalShelter.AdoptDog(); var pet = (Pet)dog; pet.ActCute();


O ‘dog’ tem o tipo dog. O próprio compilador consegue inferir o tipo. A inferência de tipos
permite que se digite menos código, e automaticamente realiza as conversões de tipo. Se
houver qualquer ambiguidade, é pedido para declarar o tipo de forma completa. A inferência
de tipos também existe nas últimas versões do Java.
10m

DELEGADOS E LAMBDAS

• Um delegado é representado por uma assinatura de método. Qualquer método com


essa assinatura pode ser atribuído ao delegado e é executado quando o delegado
é invocado;
• O delegado é um ponteiro para uma função. No C++ o ponteiro de função é fácil de dar
erro de tipagem, pois a linguagem não faz a verificação. O Dot. Net criou uma maneira
orientada a objetos e com verificação de tipo, para que se possa passar algo seme-
lhante aos ponteiros de funções de uma forma mais segura.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os delegados são como ponteiros de função do C++, exceto pelo fato de que eles são
fortemente tipados. Eles são um tipo de método desconectado dentro do sistema de tipos
CLR. Os métodos regulares são anexados a uma classe e só podem ser chamados direta-
mente por meio de convenções de chamada estáticas ou de instância;

• No .NET, os delegados são comumente usados em manipuladores de eventos, na defi-


nição de operações assíncronas e em expressões lambda.

O C# é orientado a objeto, com programação imperativa, mas possui alguns elementos


da programação funcional. Com o delegado, é possível criar uma variável que aponta para
uma função, e passa essa função para outra função.

Exemplo:

// C#
// Declara um delegado.
public delegate void Del(string message);
...
// Cria um método para um delegado
public static void DelegateMethod(string message)
{
System.Console.WriteLine(message);
}
...
// Instancia um delegado.
Del handler = DelegateMethod;
// Aciona o delegado.
handler(“Hello World”);
Como o ‘DelegateMethod’ possui a mesma assinatura do delegado que foi declarado em
‘Del(string message)’, a operação é aceita. É possível passar uma função para outra função.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GENÉRICOS

• Os genéricos permitem que o programador introduza um parâmetro de tipo ao criar


suas classes, o que permite que o código do cliente (os usuários do tipo) especifiquem
o tipo exato a ser usado no lugar do parâmetro de tipo;

O genéricos do C# é igual ao Generics do Java, sendo uma parametrização de tipos. É


declarada uma classe, que tem um parâmetro de tipo associada a ela para determinadas
operações.
15m

• Os genéricos foram adicionados para ajudar os programadores a implementar estru-


turas de dados genéricos. Antes de sua adição, para que um tipo como o List fosse
genérico, seria necessário que ele trabalhasse com elementos do tipo object.

Exemplo de código C#:

using System;
using System.Collections.Generic;
namespace GenericsSampleShort
{
public static void Main(string[] args)
{
List listOfStrings = new List { “First”, “Second”, “Third” };
listOfStrings.Add(“Fourth”);
listOfStrings.Add(1); // Erro de compilação, a lista contém apenas strings
}
Se for adicionado um número, ocorre um erro, pois a lista contém apenas strings.

PROGRAMAÇÃO ASSÍNCRONA

• Programação assíncrona é um conceito de primeira classe no.NET, com suporte assín-


crono no runtime, bibliotecas de estrutura da linguagem do.NET;
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Internamente, elas são baseadas em objetos (como Task) que aproveitam o sis-
tema operacional para realizar trabalhos associados a E/S de modo tão eficiente
quanto possível.

O código assíncrono é um código que quando executado pode liberar a thread principal
para executar outras tarefas enquanto a outra tarefa assíncrona pode demorar mais tempo
para ser executada. Exemplos de código assíncronos: Java Script e Node. js.
Em geral, no Java e no Dot. Net, o padrão são códigos síncronos, mas o Dot. Net também
tem suporte para funções assíncronas.

LINQ (CONSULTA INTEGRADA À LINGUAGEM)

• O LINQ é um conjunto de recursos para C# e VB que permite que se escreva código


simples e declarativo para operar em dados.
• Os dados podem ser de várias formas (como objetos na memória, um banco de dados
SQL ou um documento XML), mas o código LINQ não difere para cada fonte de dados.

É uma linguagem de estrutura que auxilia na interação com as bases de dados.

Exemplo de código em C#:

var linqExperts = from p in programmers


where p.IsNewToLINQ
select new LINQExpert(p);
No C# há uma linguagem embutida na estrutura que permite interar em estruturas de
dados de forma parecida ao SQL, mas embutida na linguagem de programação.
20m

INTEROPERABILIDADE NATIVA

• Todos os sistemas operacionais incluem uma API (interface de programação de apli-


cativo) que fornece serviços de sistema;
• A principal maneira de fazer interoperabilidade nativa é via “invocação de plataforma”
ou P/Invoke, de forma abreviada, que tem suporte em plataformas Linux e Windows;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A maioria do suporte de interoperabilidade do Mono (e, portanto, do Xamarin) para Java


e Objective-C é criado da mesma forma, ou seja, eles usam os mesmos princípios.

O Dot. Net fornece um mecanismo para poder acionar funcionalidades nativas.

CÓDIGO NÃO SEGURO

• Dependendo do suporte da linguagem, o CLR (Common Language Runtime) permite


acessar a memória nativa e realizar aritmética de ponteiro por meio de código unsafe;
• Essas operações são necessárias para certos algoritmos e interoperabilidade
do sistema;
• Embora poderoso, o uso de código não seguro não é recomendado a menos que seja
necessário para fornecer interoperabilidade com APIs do sistema ou implementar um
algoritmo mais eficiente;
• O código não seguro pode não ser executado da mesma maneira em ambientes dife-
rentes e também perde os benefícios de um coletor de lixo e da segurança de tipos;
• Recomenda-se restringir e centralizar ao máximo o código não seguro, além de testar
esse código detalhadamente.

O código não seguro é a forma que se programa na linguagem C, fazendo aritmética


de ponteiros, acessando a área de memória de forma direta. Quando um bloco de código é
declarado como não seguro, há mais liberdade e é um código mais performático. O gerencia-
dor de tempo de execução não fica observando se a operação é válida, e, com isso, todas as
garantias do código, do gerenciador, como gerenciamento de memória e acesso a posição
de memória inválida.

Exemplo:

// C# - compile com: -unsafe


class UnsafeTest
{
// Método inseguro, recebe um ponteiro para int: unsafe static void SquarePtrParam(int* p)
{
*p *= *p;
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

}
unsafe static void Main()
{
int i = 5;
// Método inseguro, usa o operador de endereço (&):
SquarePtrParam(&i);
Console.WriteLine(i);
}
} // Saída: 25
O código não seguro, por um lado adiciona performance, e por outro lado não a segu-
rança do ambiente do Dot. Net.

COMPONENTES DE ARQUITETURA DO .NET

• Um aplicativo .NET é desenvolvido para e é executado em uma ou mais implementa-


ções do .NET;
• Implementações do .NET incluem o .NET Framework, o .NET Core e o Mono;

O .NET Framework é mais voltado para o Windows, o .NET Core para multi, e o Mono
para Mobile.
25m

• Há uma especificação de API comum a todas as implementações de .NET que é cha-


mada de.NET Standard.

.NET STANDARD

• É uma especificação das APIs do .NET que compõem um conjunto uniforme de con-
tratos nos quais o código é compilado;

O contrato se refere a assinatura de métodos.

• Esses contratos são implementados em cada implementação do .NET. Isso permite


a portabilidade entre diferentes implementações de .NET, possibilitando efetivamente
que o código seja executado em qualquer lugar;
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O .NET Standard também é uma estrutura de destino. Se o código se destina a uma


versão do .NET Standard, ele pode ser executado em qualquer implementação do
.NET que dê suporte a essa versão do .NET Standard.

Cada implementação específica do Dot.Net dá suporte a uma versão específica do Dot.


Net Standard.

IMPLEMENTAÇÕES DO.NET

• Cada implementação do.NET inclui os seguintes componentes:


– Uma ou mais máquinas virtuais. Exemplos: o CLR para o.NET Framework, o Core-
CLR e o CoreRT para o.NET Core;
– Uma biblioteca de classes que implemente o.NET Standard e possa implementar
APIs adicionais. Exemplos: biblioteca de classes base do NET Framework, biblio-
teca de classes base do.NET Core;
– Opcionalmente, uma ou mais framworks de aplicativo. Exemplos: ASP.NET, Win-
dows Forms e WPF (Windows Presentation Foundation) estão incluídos no.NET
Framework;

Os framworks são específicos para algumas implementações. Se desejar desenvolver


uma aplicação desktop do Windows, deve ser utilizado o Dot. Net Framwork, e rodará só
no Windows.

– Opcionalmente, ferramentas de desenvolvimento. Algumas ferramentas de desen-


volvimento são compartilhadas entre várias implementações;
– Há quatro implementações principais de .NET que a Microsoft desenvolve e mantém
ativamente: .NET Core,.NET Framework, Mono e UWP.

MONO

• O Mono é uma implementação do.NET que é usada principalmente quando uma


pequena runtime é necessária. É o runtime que impulsiona aplicativos Xamarin no
Android, Mac, iOS, tvOS e watchOS e concentra-se principalmente em um impacto
pequeno. O Mono também é plataforma para jogos criados com o mecanismo Unity;
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Dá suporte a todas as versões do.NET Standard publicadas atualmente;


• Historicamente, o Mono implementava a maior API do.NET Framework e emulava
alguns dos recursos mais populares do Unix. Às vezes, ele é usado para executar apli-
cativos.NET que dependem desses recursos no Unix;
• O Mono normalmente é usado com um compilador Just-In-Time, mas ele também
apresenta um compilador estático completo (compilação Ahead Of Time) que é usado
em plataformas como iOS.

O Mono é a implementação do Dot. Net que funciona no Mobile.

UWP (PLATAFORMA UNIVERSAL DO WINDOWS)

• A UWP é uma implementação do.NET que é usada para criar aplicativos do Windows
modernos e sensíveis ao toque, bem como software para a IoT (Internet das Coisas);
30m
• Ela foi projetada para unificar os diferentes tipos de dispositivos incluindo PCs, tablets,
phablets, telefones e Xbox;
• A UWP fornece serviços como um repositório centralizado de aplicativos, um ambiente
de execução (AppContainer) e um conjunto de APIs do Windows;
• Os aplicativos podem ser escritos em C++, C#, VB.NET e JavaScript;
• Ao usar o C# e VB.NET, as APIs do.NET são fornecidas pelo.NET Core.

A UWP tenta ser multiplataforma, rodando no Mobile, Xbox e Windows.

RUNTIMES DO .NET

• Um runtime é o ambiente de execução de um programa gerenciado;


• Exemplos runtime do.NET:
– CLR (Common Language Runtime) para o.NET Framework;
– Core Common Language Runtime (CoreCLR) para o.NET Core;
– .NET Native para a Plataforma Universal do Windows;
– O runtime Mono para Xamarin.iOS, Xamarin.Android, Xamarin.Mac e a estrutura de
área de trabalho do Mono.
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Cada uma das implementações do Dot.Net fornece um runtime, que é o tempo de execu-
ção, quando o programa for executado precisará desse complemento, e, por isso, não é um
programa nativo.

.NET STANDARD

• É uma especificação formal de APIs do .NET que devem estar disponíveis em todas
as implementações do .NET;
• A motivação por trás do .NET Standard é estabelecer maior uniformidade no ecossis-
tema do .NET;
• O .NET Standard permite os seguintes principais cenários:
– Define um conjunto uniforme de APIs de BCL (Bibliotecas de Classe Base) para
todas as implementações do .NET a serem implementadas;
– Permite que os desenvolvedores criem bibliotecas portáteis, utilizáveis entre imple-
mentações do .NET, usando esse mesmo conjunto de APIs;
– Reduz ou até elimina a compilação condicional de origem compartilhada em razão
das APIs do .NET, apenas para APIs do sistema operacional.

O .NET Standard traz um padrão de código, em que podem ser desenvolvidas bibliote-
cas, que podem ser compartilhadas. A biblioteca funciona tanto no celular quanto no desktop.

O QUE É “CÓDIGO GERENCIADO”?

• Código gerenciado é o código cuja execução é gerenciada por um runtime;


• Nesse caso, o runtime em questão é chamado de Common Language Runtime ou CLR,
independentemente da implementação (Mono ou do.NET Framework ou.NET Core);
• CLR é responsável por pegar o código gerenciado, compilá-lo em código de computa-
dor e, em seguida, executá-lo;
• Além disso, o runtime fornece vários serviços importantes, como gerenciamento
automático de memória (Garbage Colector), limites de segurança, segurança de
digitação etc.

O código gerenciado roda no Dot. Net e não é Unsafe.


ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Net II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O QUE É “CÓDIGO NÃO GERENCIADO”?

• No mundo não gerenciado, o programador é responsável por quase tudo;


• O programa real é, essencialmente, um binário que o sistema operacional (SO) car-
rega na memória e inicia;
• Tudo, desde o gerenciamento da memória até as considerações de segurança, é res-
ponsabilidade do programador.

O código não gerenciado é um código que o desenvolvedor deve ter mais cuidado com
todas as partes do sistema, como gerenciamento de memória, invasão e tamanho de lista.
35m

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

.NET III

• Linguagem Intermediária

O código gerenciado é escrito em uma das linguagens de alto nível que podem ser exe-
cutadas sobre o.NET, como C#, Visual Basic, F# e outras.
O código gerenciado é aquele compilado no.NET.
Quando o código gravado é compilado nessas linguagens com seu respectivo compila-
dor, não obtém o código do computador, se obtém o código de Linguagem Intermediária
(IL) que o runtime compila e executa (C++ é a única exceção a essa regra, já que também
pode produzir binários nativos e não gerenciados que são executados no Windows).
A CLR assume e inicia o processo de compilação Just-In-Time ou colocando em compila-
ção JIT seu código da IL (código em linguagem intermediária) no código do computador, que
pode ser executado em uma CPU. Dessa forma, a CLR sabe exatamente o que o código está
fazendo e pode, efetivamente, gerenciá-lo.
A Linguagem intermediária também é chamada CIL (Common Intermediate Language) ou
MSIL (Microsoft Intermediate Language).
Quando o código é compilado no.NET, principalmente C#, Visual Basic, F#, o código
resultante não é um código nativo, e sim um código intermediário. No Java é chamado de
Bytecode. É um código que não é o final, mas é bem próximo ao código de máquina.
O Runtime utiliza o código intermediário, executa, faz uma compilação (Just In Time) e
executa o código na CPU. Além disso, o código é gerenciado, por exemplo, com relação a
invasão de memória e conversões de tipos.

• Interoperabilidade de Código Não Gerenciado

A CLR permite passar os limites entre o mundo gerenciado e o não gerenciado e há


muitos códigos que fazem isso, mesmo nas Bibliotecas de classes base. Isso é chamado de
interoperabilidade ou apenas interop.
No entanto, é importante observar que quando o código passa os limites do runtime, o
gerenciamento real da execução está novamente no código não gerenciado e, portanto, se
enquadra nas mesmas restrições.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É permitido trabalhar com o código não gerenciado, que não é monitorado pelo Runtime,
podendo ter uma performance melhor, mas são inseguras em relação ao tipo.
Semelhante a isso, C# é uma linguagem que permite que você use construções não
gerenciadas como ponteiros diretamente no código, utilizando o que é conhecido como
contexto inseguro, que designa um trecho de código para o qual a execução não é geren-
ciada pela CLR.
O código é marcado como Unsafe, não seguro, e esse código pode realizar algumas ope-
rações a mais.

5m

Há três camadas:.NET FRAMEWORK,.NET CORE e XAMARIN. Quando se programa


em.NET usa-se uma dessas estruturas.
O.NET FRAMEWORK é para programação no Windows. O.NET CORE é usado com o
objetivo de programação em multiplataforma. O XAMARIN é para a plataforma Mobile. Todos
têm em comum o.NET STANDARD LIBRARY, uma biblioteca comum. Além disso, há a estru-
tura de compiladores, linguagens e os elementos de Runtime, que podem ser diferentes
dependendo da implementação utilizada.
Comparado com o Java, o.NET é menos multiplataforma que o Java. Em geral, quando
se faz um programa em Java não há preocupação em relação ao ambiente de destino. O.NET
possui uma parte comum entre os ambientes, mas também apresenta coisas separadas.
O.NET Core e.NET Framework são as duas principais implementações do.NET.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• .Net Core: Introdução

O.NET Core é uma plataforma de desenvolvimento aberta de uso geral mantida pela
Microsoft e pela comunidade.NET no GitHub.
Ele é multiplataforma e oferece suporte ao Windows, macOS e Linux, e pode ser usado
em dispositivos, na nuvem e em aplicativos de IoT.
Como é multiplataforma, possui menos recursos, só tendo os recursos que podem ser
executados em cada plataforma.

• .Net Core: Características

Multiplataforma: é executado nos sistemas operacionais Windows, macOS e Linux. Con-


sistente entre arquiteturas: executa o código com o mesmo comportamento em várias arqui-
teturas, incluindo x64, x86 e ARM.
O x64 e x86 são arquiteturas de processador de desktop. O ARM está ligado aos celu-
lares e tablets. Mesmo variando o tipo de processador o programa se comporta de forma
consistente.
Ferramentas de linha de comando: inclui ferramentas de linha de comando para desen-
volvimento local e em cenários de integração contínua.
Exemplo: uma empresa tem um servidor de compilação, que é executado via script. É
necessário o Visual Studio para compilar o código, mas em um servidor de integração contí-
nua não tem monitor. A compilação é feita através de ferramentas de linha de comando que
são fornecidas pelo.NET Core.
Implantação flexível: o.NET Core pode ser incluído em um aplicativo, instalado nos com-
putadores ou pode ser usado com os contêineres do Docker.
Compatível: o.NET Core é compatível com o.NET Framework, o Xamarin e o Mono por
meio do.NET Standard.
Se na biblioteca, a implementação foi feita observando estritamente o.NET Standard, há
uma garantia de compatibilidade entre as outras implementações do.NET.
10m
Código-fonte aberto: a plataforma do.NET Core é um software livre.
Suporte da Microsoft: a Microsoft dá suporte ao.NET Core.
As duas características mais importantes são: ser multiplataforma e o código-fonte livre.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

As linguagens C#, Visual Basic e F# podem ser usadas para escrever aplicativos e biblio-
tecas para o.NET Core.

• .Net Core: APIs

O.NET Core expõe APIs para vários cenários, incluindo:


Tipos primitivos, como bool e int;
Coleções, como System.Collections.Generic.List e System.Collections.Generic.Dictio-
nary. (Dicionários);
Tipos utilitário, como System.Net.Http.HttpClient (para fazer requisições na rede) e
System.IO.FileStream (para abrir um arquivo no computador);
Tipos de dados, como System.Data.DataSet e DbSet;
Tipos de alto desempenho, como System.Numerics.Vector (para fazer cálculos numéri-
cos) e Pipelines.
O.NET Core oferece compatibilidade com as APIs do.NET Framework e do Mono por
meio da implementação da especificação.NET Standard. Possui bibliotecas que permitem a
criação de softwares bem avançados.

• .Net Core: Frameworks

Frameworks criadas com base no.NET Core:


ASP.NET Core;
Plataforma Universal do Windows (UWP) do Windows 10;
Tizen (Só para dispositivos da Samsung).
Quando é desenvolvido um aplicativo mais complexo, é necessária uma estrutura mais
robusta, os Frameworks de desenvolvimento. O.NET é considerado um Framework de lin-
guagem para fazer as operações básicas.

• .Net Core: Composição

O.NET Core é composto pelas seguintes partes:


Um runtime do.NET Core oferece um sistema de tipos, carregamento de assembly (com-
pilações feitas), um coletor de lixo, interoperabilidade nativa e outros serviços básicos. É uti-
lizado em aplicativos desktop ou linha de comando.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O runtime do ASP.NET fornece uma estrutura para a criação de aplicativos conecta-


dos à internet e baseados em nuvem, como aplicativos Web, aplicativos de IoT e back-
-ends móveis.
As ferramentas da CLI do.NET Core e os compiladores.
A ferramenta ‘dotnet’ é usada para iniciar aplicativos do.NET Core e ferramentas da CLI.
Ela seleciona e hospeda o runtime, fornece uma política de carregamento de assembly e
inicia aplicativos e ferramentas. O dotnet é a ferramenta da linha de comando utilizada para
criar um projeto, compilar.
Esses componentes são distribuídos das seguintes maneiras:
Runtime do.NET Core – inclui as bibliotecas de runtime e de estruturas do.NET Core.
Runtime do ASP.NET Core – inclui bibliotecas de runtime e de estruturas do ASP.NET
Core e do.NET Core.
15m
SDK do.NET Core – inclui as ferramentas da CLI do.NET, o runtime do ASP.NET Core e
o runtime e a estrutura do.NET Core.

• .Net Core: Software Livre

O.NET Core é um software livre (licença MIT).


Pode ser adotado livremente por pessoas e empresas, incluindo para fins pessoais,
comerciais ou acadêmicos.
Pode ser criado um aplicativo para fim comercial, quando usado o.NET Core, e pode ser
para múltiplos sistemas operacionais.

• .Net Framework: Introdução

O.NET Framework é uma plataforma de desenvolvimento para criar aplicativos para web,
Windows, Windows Phone, Windows Server e Microsoft Azure (Cloud da Microsoft).
Ele consiste no Common Language Runtime (CLR) e na biblioteca de classes do.NET
Framework, que inclui uma ampla gama de recursos e suporte para muitos padrões do setor.
Para desenvolver um aplicativo para desktop é utilizado o.NET Framework. O.NET Core
é para aplicativos mais simples.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O.NET Framework fornece vários serviços, incluindo gerenciamento de memória, segu-


rança de tipo e memória, segurança, redes e implantação de aplicativos. Esse elemento é
comum do.NET Framework e do.NET Core.
Fornece APIs e estruturas de dados que abstraem o sistema operacional do Windows.
Essa característica é específica do.NET Framework.
Suporta diversas linguagens de programação como C#, F# e Visual Basic.

• .Net Framework: O que é?

O.NET Framework é um ambiente de execução gerenciado para Windows que oferece


serviços aos aplicativos em execução.
Consiste em dois componentes principais:
CLR (Common Language Runtime), o mecanismo de execução que manipula aplicativos
em execução.
Biblioteca de classes.NET Framework, que oferece uma biblioteca de códigos testados e
reutilizáveis que os desenvolvedores podem chamar de seus aplicativos.
O.NET Framework tem praticamente tudo que o.NET Core possui, e coisas específicas
para Windows, como gerenciamento de janelas e acesso ao registro.

• .Net Framework: Serviços

Gerenciamento de memória (Garbage Collector);


Um Common Type System: em linguagens de programação tradicionais, os tipos básicos
são definidos pelo compilador, que complica a interoperabilidade entre linguagens. No.NET
Framework, os tipos básicos são definidos pelo sistema de tipos do.NET Framework e são
comuns a todas as linguagens que segmentam o.NET Framework.
Os tipos básicos são iguais entre as diversas linguagens de programação, o que permite
a criação de uma biblioteca em F# e essa biblioteca seja acionada via C#.
Uma biblioteca de classes abrangente: em vez de precisar gravar grandes volumes de
código para manipular operações de programação comuns de baixo nível, os programadores
usam uma biblioteca de tipos facilmente acessível e seus membros da biblioteca de classes.
NET Framework.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A biblioteca de classes possui as funcionalidades mais comuns para não ficar sendo
repetida entre os programas.
20m
Estruturas e tecnologias de desenvolvimento: o.NET Framework inclui bibliotecas para
áreas específicas do desenvolvimento de aplicativos, como o ASP.NET para aplicativos Web,
o ADO.NET para acesso a dados e o Windows Communication Foundation para aplicativos
orientados a serviços e Windows Presentation Foundation para aplicativos de área de traba-
lho Windows.
O.NET Framework é mais voltado para o Windows, possuindo mais frameworks e estru-
turas para desenvolver aplicativos específicos para o Windows.
Interoperabilidade da linguagem: compiladores de linguagens, que direcionam o.NET
Framework, emitem um código intermediário chamado de CIL (Common Intermediate Lan-
guage), que, por sua vez, é compilado no tempo de execução pelo Common Language Run-
time. Com esse recurso, as rotinas gravadas em uma linguagem são acessíveis a outras
linguagens.
Uma biblioteca criada em uma linguagem pode ser utilizada em outra linguagem.
Compatibilidade de versões: os aplicativos desenvolvidos usando uma versão específica
do.NET Framework, em geral, são executados sem modificação em uma versão posterior.
Em geral, o que é escrito na versão 1.0 vai rodar na versão 2.0 sem nenhuma modifica-
ção. A compatibilidade para a frente sempre ocorre.
Execução lado a lado: o.NET Framework permite que várias versões do CLR existam no
mesmo computador. Isso significa que várias versões dos aplicativos podem coexistir e que
um aplicativo pode ser executado na versão do.NET Framework com a qual foi compilada.
Para não haver problema de compatibilidade, cria-se um programa.NET Framework na
versão 1.0 e outro programa na versão 2.0. Cada programa utiliza um Runtime diferente. É
permitido ter vários Runtimes instalados ao mesmo tempo, e cada programa quando for exe-
cutado usa seu Runtime mais específico.
Multiplataforma: Bibliotecas de classes funcionam em várias plataformas do.NET
Framework.
As bibliotecas podem ser utilizadas e compartilhadas entre as implementações do.NET.

• .Net Framework: Para Usuários

Geralmente, o.NET Framework é totalmente transparente para os usuários.


ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
.Net III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se for instalado um aplicativo que exige o.NET Framework, o programa de instalação do


aplicativo poderá instalar uma versão específica do.NET Framework no computador.
No.NET, o próprio instalador do programa detecta se há a versão do.NET Framework ins-
talada, e se não tiver é recomendado a instalação.

• Diferenças entre.NET Core e.NET Framework

Modelos de aplicativo – o.NET Core não dá suporte a todos os modelos de aplicativo


do.NET Framework. Especificamente, ele não dá suporte ao ASP.NET Web Forms e ao MVC.
Nem tudo que é feito com o.NET Framework consegue ser feito com o.NET Core.
APIs – o.NET Core contém um subconjunto da biblioteca de classes base.NET Framework,
com aspectos diferentes (os nomes de assembly são diferentes, os membros expostos nos
tipos são diferentes em casos especiais). Essas diferenças exigem alterações para portar o
código para o.NET Core em alguns casos. O.NET Core implementa a especificação de API.
NET Standard.
25m
Se o código for feito no.NET Core é possível levá-lo para o.NET Framework, mas há
casos em que é necessário alguma modificação.
Subsistemas – O.NET Core implementa um subconjunto dos subsistemas no.NET Fra-
mework com o objetivo de proporcionar uma implementação e um modelo de programação
mais simples.
O.NET Core é um subconjunto do.NET Framework. O NET. Core não contém os elemen-
tos de programação para o Windows.
Plataformas – O.NET Framework dá suporte ao Windows e Windows Server, enquanto
o.NET Core também dá suporte ao macOS e Linux.
Software Livre – O.NET Core é um software livre, enquanto apenas um subconjunto
somente leitura do.NET Framework é um software livre.
O.NET Core é mais voltado à questão do software livre do que o.NET Framework.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula prepa-
rada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES

A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo minis-
trado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva deste
material.

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET – CONCEITOS E WEB FORMS

Bibliografia

A maior parte do conteúdo desta aula foi baseado nessa bibliografia, que é da própria
Microsoft: https://docs.microsoft.com/pt-br/aspnet/overview

Obs.: esse documento possui tradução automática para o português, portanto, nem todos
os termos são exatos.

O Que é ASP.NET

O ASP.NET é um framework projetado para desenvolvimento Web voltado à construção


de páginas dinâmicas. Ele é uma estrutura utilizada para a criação de sites, páginas Web, em
contraste com o.NET Framework, que é utilizado para escrever jogos de computador, aplica-
tivo Windows ou de linha de comando do console, por exemplo.
O ASP.NET foi desenvolvido pela Microsoft para permitir que os programadores criem apli-
cativos e serviços Web, páginas Web que possuem conexão com a internet. É considerado
o sucessor do ASP, que era uma linguagem utilizada para desenvolver páginas Web, antigo
concorrente do PHP. O ASP foi adaptado para as novas tendências de mercado pela Micro-
soft, o que gerou o ASP.NET. Entretanto, diferente do ASP, o ASP.NET não é uma linguagem.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET Core é uma alternativa open-source ao ASP.NET, da mesma forma que existe
o.NET Framework e o.NET Core, alternativas open-source do.NET.
5m
Como citado anteriormente, o ASP.NET não é uma linguagem de programação e nem um
servidor Web. As linguagens utilizadas no ASP.NET são as linguagens do.NET Framework,
como F#, C# e Visual Basic.NET, sendo o C# o mais utilizado. O servidor, por outro lado, é
onde será hospedado um programa ou aplicativo já programado, onde será também execu-
tado. Como o ASP.NET não é um servidor, o servidor, geralmente, utilizado para a execução
é o IIS da Microsoft, porém existem outras opções a serem utilizadas, principalmente para
o.NET Core.

Diferenciais do ASP.NET Core

O ASP.NET Core possui a capacidade de desenvolver e executar no Windows, macOS e


Linux. Em um primeiro momento, o ASP.NET possuía desenvolvimento e hospedagem limi-
tado apenas à plataforma Microsoft Windows, e por conta disso foi criado o ASP.NET Core.
Osoftware é livre. O ASP.NET Core é uma boa opção para quem não pretende pagar
nenhum tipo de licenciamento ou de servidor especial. É um software voltado para a comuni-
dade por causa de seu código livre e está hospedado no GitHub para que todos possam ter
acesso ao seu código fonte.
O ASP.NET Core fornece um pipeline de solicitação HTTP leve, modular e de alto desem-
penho. Por conta disso, possui menos recursos que o ASP.NET regular, mas possui a van-
tagem de ser mais ágil, podendo ser executado dentro de uma imagem Docker. Também
possui a capacidade de hospedar aplicações no IIS, Nginx, Apache, Docker ou hospedar em
seu próprio processo.
Por outro lado, o ASP.NET Core não dá suporte direto à Web Forms.
10m

Relação entre ASP.NET e.NET Framework

O ASP.NET é baseado no Framework.NET, herdando todas as suas características e, por


isso, como qualquer aplicação.NET, as aplicações para essa plataforma podem ser escritas
em várias linguagens, como C#, F# e Visual Basic.NET. Portanto, existem no ASP.NET as
estruturas de controle de memória e de segurança de aplicação.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Uma aplicação desenvolvida em ASP.NET pode reutilizar código de qualquer outro pro-
jeto escrito para a plataforma.NET, mesmo que em linguagem diferente. Uma página ASP.
NET escrita em VB.NET pode chamar componentes escritos em C# ou Web Services escri-
tos em C++, por exemplo.
Ao contrário da tecnologia ASP, as aplicações ASP.NET são compiladas antes da execu-
ção, trazendo sensível ganho de desempenho. Dessa forma, quando uma página ASP.NET é
acessada pela primeira vez, ela é compilada para um código de mais baixo nível e os próxi-
mos acessos a essa mesma página são realizados de maneira mais eficiente.
Portanto, além da migração da linguagem, o ASP.NET também ganha em performance.

Opções de Framework

O ASP.NET oferece três frameworks para a criação de aplicativos web:

• ASP.NET Web Forms – para desenvolvimento rápido usando biblioteca de componen-


tes que encapsulam a marcação HTML;
• ASP.NET MVC (Modo Via Controle) – no qual há um maior controle sobre a marcação
HTML, código e marcação separados. É a melhor opção para aplicativos móveis e de
página única (SPA);
• ASP.NET Web Pages – para marcação HTML e código juntos no mesmo arquivo.

Os três frameworks estão dispostos de maneira cronológica. O ASP.NET Web Forms é


voltado para desenvolvedores iniciantes, mas que buscam desenvolver uma aplicação rica.
Ele possibilita um desenvolvimento de forma visual, com paleta de componentes, e sem pre-
cisar entrar nos detalhes do JavaScript ou dos códigos mais complicados da Web, entretanto,
existe uma menor possibilidade de controle dos componentes.
15m
Já o ASP.NET MVC é uma evolução do Web Forms, ele conta com uma divisão da
camada visual e da camada dos códigos, ou seja, do controle. Nesse caso, o HTML e JavaS-
cript serão mais trabalhados, pois o ASP.NET MVC não conta com a paleta de componentes.
O ASP.NET Web Pages é a opção mais recente da Microsoft, que possui a linguagem
mais moderna C#.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Desenvolvimento

Para o desenvolvimento, a ferramenta utilizada é a Microsoft Visual Studio, que possibi-


lita o desenvolvimento tanto no.NET Framework quanto no ASP.NET:

ASP.NET Web Forms

É utilizado para criar páginas que usuários solicitam usando o navegador, como os sites,
cujos endereços podem ser digitados na barra de pesquisa. Essas páginas podem ser cria-
das usando uma combinação de HTML, CSS, JavaScript e código do servidor, mas com um
foco menor em HTML e JavaScript. Dessa forma, o ASP.NET Web Forms exige um maior
conhecimento das tecnologias HTML e JavaScript por parte do desenvolvedor.
Quando os usuários solicitam uma página, ela é compilada e executada no servidor pelo
framework e, em seguida, o framework gera a marcação HTML que o navegador pode rende-
rizar. Os navegadores não são capazes de entender ASP.net, eles entendem apenas HTML,
CSS e JavaScript. O que ocorre é que, quando é criada uma página no servidor usando
outras linguagens, como o C# do.NET, essa página deve ser renderizada no servidor, ou
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

seja, transformar o código fonte em HTML, CSS e JavaScript para que o navegador entenda
a página e mostre-a para o usuário, que irá interagir com a página e submetê-la ao servidor
novamente.
20m
Uma página ASP.NET Web Forms apresenta informações para o usuário em qualquer
navegador ou dispositivo cliente.

Web Forms: View

Os Web Forms são criados utilizando o Visual Studio com a extensão ASPX. É apresen-
tada para o desenvolvedor uma paleta de componentes, a toolbox, então, o componente
escolhido deve ser arrastado para a página na qual irá funcionar.

O ambiente de Desenvolvimento Integrado (IDE) do Visual Studio permite arrastar e soltar


os componentes para se criar uma página. Podem ser definidas propriedades, métodos e
eventos para os controles ou para a própria página. As propriedades, métodos e eventos são
usados para definir o comportamento e a aparência do aplicativo Web.
Para escrever o código do servidor para lidar com a lógica da página, utiliza-se uma lin-
guagem.NET, como Visual Basic ou C#.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Web Forms: Lógica da Página

Sempre que ocorrer algum evento, como Page Load (carregamento de página) e Button
Click (clique no botão), o código associado ao bloco será executado. A linguagem utilizada
no caso do exemplo foi a C#.

Web Forms: Ciclo de Vida

O Web Forms possui um ciclo de vida, que começa com o usuário requisitando uma
página, que invocará um código chamado de code behind. O código invocado contará com
uma série de eventos e execuções, é o ciclo de vida da própria página, e será devolvido um
resultado para o usuário, renderizado para que ele possa acessar pelo navegador.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Web Forms

O código, que é executado no servidor, gera dinamicamente a saída da página da Web,


ou seja, os elementos da página são dinâmicos e mudam constantemente. O Web Forms
processa automaticamente o HTML compatível com navegador para recursos como estilos,
layout e assim por diante.
O Web Forms é compatível com as linguagens suportadas pelo Common Language Run-
time.NET, como o Visual Basic e o C#.
Como é construído com base no.NET Framework, fornece os benefícios do framework,
incluindo um ambiente gerenciado, segurança de tipo e herança, além de permitir adicionar
controles criados por terceiros.
25m

Web Forms: Hello World

Código ASPX:
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Web Forms

À primeira vista, o Web Forms se parece com uma página HTML: é um arquivo de texto
que contém tags, que podem ser editadas em qualquer editor de texto, apesar da preferência
pelo Visual Studio.
Ao ser observada com mais atenção, tem-se que o Web Forms possui diversos elemen-
tos que o diferencia de uma simples página HTML, dentre eles:

• Web Forms contém blocos de código que são processados no servidor (HelloWorldLa-
bel.Text = “Hello, world!”);
• Na primeira vez que o Web Forms é requisitado a página inteira é compilada. Requisi-
ções posteriores são atendidas por essa página compilada;
• Web Forms podem conter inclusões do lado do servidor (server-side include), que per-
mitem a inclusão dinâmica do conteúdo de um arquivo e controles de usuário;
• Web Forms podem conter diretivas de páginas que são definições globais para a página;
• Web Forms podem conter script, HTML e JavaScript.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Web Forms: Eventos

Em páginas Web Forms, os eventos associados com os controles de servidor (Server


Controls) são emitidos no cliente, porém são tratados no servidor. Dessa forma, a informação
do evento é capturada no cliente e transmitida para o servidor via HTTP.
Os controles Web Forms de servidor seguem um modelo padrão para tratamento de
informação para cada evento. Por convenção, todos os eventos passam dois argumentos:

• 1: um objeto referenciando à fonte que disparou o evento;


• 2: um objeto Event contendo dados para o evento.

Para definir métodos para tratar eventos, são necessárias duas informações:

• O nome ou nomes dos eventos suportados pelo controle;


• A assinatura do tratamento de evento, para o evento que será tratado.

Portanto, como é possível observar na imagem acima, o código ASPX é um Button


(botão), que se tornará um Button HTML. Esse Button possui um texto associado (Click Me)
e será executado no servidor. Há um método associado para quando o usuário clicar no
botão, o Button1_Click.

Logo abaixo, no código C#, há um método com o mesmo nome, o Button1_Click, que
receberá quem acionou o chamado (sender) e os argumentos associados (e). Com isso, será
executada uma ação.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Web Forms: Ciclo de Vida

O Web Forms está relacionado aos eventos, que são disparados e executados. Existem
dois tipos de eventos: o dos componentes e o da página. Os eventos da página são chama-
dos de ciclo de vida da página.
30m
O Web Forms também dispara eventos padrão, como Init, Load e Unload, que definem o
ciclo de vida da página.
Primeiro, o evento Init configura a página para seu estado inicial, como descrito nas
tags do arquivo ASPX. Se a página está postando para ela mesma (post back), o evento Init
também restaura qualquer estado da página que pode ser armazenado em viewstate.

Obs.: existe o evento inicial da página, quando o usuário ainda não fez nada, mas depois
o usuário pode realizar uma série de interações na página. A página guarda os seus
estados, antes das alterações, e pode ser restaurada pelo servidor.

A seguir, o evento Load é disparado. Nesse evento, pode-se verificar se essa é a primeira
vez que a página foi carregada ou se essa é uma postagem de volta de uma interação do
usuário com algum controle da página.
Na sequência, a página é renderizada para o navegador, algumas informações de estado
(viewstate) são incluídas em um campo oculto da página de maneira que, quando ela for
chamada novamente, através de um post back, seu estado anterior poderá ser restaurado
pelo ASP.NET.
Logo após, e somente se a página estiver sendo postada de volta, o evento de controle
que causou o post back da página é disparado. Exemplos de eventos que geram post back
são: clicar em botões ou a alteração de eventos, como a alteração do evento CheckedChan-
ged em um check box, por exemplo.
Existe um último evento que seu código pode tratar antes da página ser descarregada:
Unload. Como a página já está renderizada, esse evento é usado para realizar tarefas lógicas
e limpeza. Em seguida, a classe que representa a página que está carregada é destruída e
a página é descarregada da memória do servidor.
O diagrama a seguir apresenta o ciclo de vida no caso do acesso inicial à página (HTTP
GET) e o ciclo de vida no caso de uma interação na página por parte do usuário (HTTP
POST) quando ocorre um post back:
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o LoadViewState indica que trata-se de uma página já acessada anteriormente.

O Modelo de Código em Web Forms

O Web Forms pode ser visto como sendo constituído de dois componentes: o código e os
elementos visuais. Os elementos visuais são criados em um arquivo.aspx que atua como um
container para os elementos HTML e controles Web Forms. O código pode ser armazenado
em um arquivo de classe separado ou pode residir no mesmo arquivo.aspx. O recomendado
é que o código seja armazenado em um arquivo separado para uma melhor organização.
Quando o Web Forms é compilado, o ASP.NET traduz a página e seu código, gera uma
nova classe dinamicamente e compila a nova classe. Essa classe é derivada da classe Page,
mas é estendida com controles, seu código e texto HTML estático no arquivo.aspx. Essa nova
página, derivada da classe Page, torna-se um único arquivo executável no servidor sempre
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
ASP.NET – CONCEITOS E WEB FORMS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

que uma página Web Forms é requisitada. Em tempo de execução, a classe Page processa
as requisições e respostas criando dinamicamente HTML e retornando-o ao navegador.
Se a página contém Web Controls, a página derivada da classe Page atua como um con-
tainer para os controles e instâncias de controles são criadas em tempo de execução.
35m
Em síntese, a página tem o seu código ASPX e C# (recomenda-se que sejam separados
em dois artigos distintos). Será gerado, então, um arquivo compilado, que será executado
em todo novo acesso à página. Além disso, a página gera um conteúdo de forma dinâmica
para cada usuário.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET

MVC

RELEMBRANDO
O ASP.NET é uma estrutura base para desenvolvimento de soluções Web, tanto de pági-
nas Web quanto de serviços API Web. Ele conta com várias formas de desenvolver, pois a
Microsoft oferece uma série de frameworks para desenvolvimento, sendo uma delas o Web
Forms. O Web Forms pode ser associado ao JavaServer Faces (JSF).

ASP.NET MVC

O ASP.NET MVC (Model-View-Controller) é um padrão arquitetônico que pode ser asso-


ciado ao Spring e é mais moderno que o Web Forms, apesar de estarem surgindo padrões
ainda mais modernos. O MVC separa um aplicativo em três componentes principais: modelo,
exibição e controlador (Model-View-Controller).
A estrutura ASP.NET MVC oferece uma alternativa ao padrão Web Forms do ASP.NET
para criar aplicativos Web. O padrão Web Forms serve para o desenvolvimento Rapid Appli-
cation Development (RAD), ou seja, um desenvolvimento rápido de aplicativos, pois ele conta
com uma paleta de componentes que podem ser arrastados para a página na qual funciona-
rão. Nesse caso, não há controle sobre a forma de exibição dos componentes escolhidos, o
controle fino (fine-tuning), então, o MVC supre essa qualidade que o Web Forms não possui.
O MVC não possui uma paleta de componentes, portanto, o desenvolvimento é mais
complexo e exige uma maior expertise do desenvolvedor.
A estrutura ASP.NET MVC é um framework de apresentação leve e testável que é inte-
grada aos recursos ASP.NET existentes, como páginas mestras e autenticação. As páginas
mestras são sistemas da estrutura para gerenciar layout.
O padrão MVC pode ser representado pelo seguinte diagrama:
5m
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os componentes Model, View e Controller interagem entre si. O View e o Controller aces-
sam os dados do Model, e o Controller acessa os dados do View, ele é o controlador da View.

ASP.NET MVC: Model


Model são as partes do aplicativo que implementam a lógica para o domínio de dados do
aplicativo. Muitas vezes, os objetos de modelo recuperam e armazenam o estado do modelo
em um banco de dados. O Model modela, e a classe Cliente, por exemplo, faz parte dele e
pode ser uma representação de uma estrutura armazenada no banco de dados. Por exem-
plo, um objeto Produto pode recuperar informações de um banco de dados, operar nele e, em
seguida, gravar informações atualizadas de volta em uma tabela de Produtos em um banco
de dados do SQL Server.
O.NET possui uma grande gama de tecnologias, desde a ideia, até a linguagem de pro-
gramação, ao framework executado, ao servidor de aplicação (IIS) e ao banco de dados
(SQL Server). Podem ser utilizados também outros bancos de dados, mas o SQL Server, por
ser da Microsoft, estará melhor integrado à estrutura.
ASP.NET MVC: View
As exibições (View) são os componentes que exibem a interface do usuário (UI) do apli-
cativo. Normalmente, essa UI é criada a partir dos dados do modelo. Um exemplo seria uma
exibição de edição de uma tabela de Produtos que mostra caixas de texto, listas suspensas
e caixas de seleção com base no estado atual de um objeto Produto.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Portanto, a View é um arquivo ASP ou ASPX que gera um HTML, mas também envolve
CSS e JavaScript para melhorar a interação com o usuário. A View coloca os dados do
modelo em uma tabela, que listará e permitirá os controles de edição, inclusão e alteração.
ASP.NET MVC: Controllers
Os controladores (Controllers) são os componentes que lidam com a interação do usu-
ário, trabalham com o modelo e, finalmente, selecionam uma exibição de renderização que
mostra essa UI.
Em um aplicativo MVC, a exibição só mostra informações. O controlador manipula e res-
ponde à entrada e interação do usuário. Por exemplo, quando um usuário clica em um botão
que aparece na tela, e que foi construído com base em uma View, ocorrerá uma lógica pelo
lado do servidor, um arquivo C#, que estará localizado no controlador da tela.
Por exemplo, o controlador manipula valores da consulta e passa esses valores ao
modelo, que, por sua vez, pode usar esses valores para consultar o banco de dados.
10m

ASP.NET MVC: Características

O padrão MVC separa os diferentes aspectos do aplicativo (lógica de entrada, lógica de


negócio e lógica da UI). O padrão especifica onde cada tipo de lógica deve ficar localizado
no aplicativo:

• A lógica da UI fica na exibição;


• A lógica de entrada fica no controlador;
• A lógica de negócios fica no modelo.

Esse padrão de MVC não é uma exclusividade da Microsoft e nem foi inventado por ela,
esse é um padrão que existe em vários frameworks, como Ruby on Rails, Java e Spring.
Essa separação ajuda a administrar a complexidade de um aplicativo, pois permite que
o desenvolvedor se concentre em um aspecto da implementação por vez. A organização é
importante, porque toda aplicação sofrerá manutenção, o que pode prejudicar a organização
do código, um problema do Web Forms que é melhorado no padrão MVC.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Fluxo de uma Solicitação

Repassando os passos:

• O usuário acessa a página e tecla enter;


• A requisição chega no lado do servidor e é direcionada para o controlador da ação pelo
ASP.NET. O controlador é um código C#;
• A requisição cai no roteamento (ASP.NET Routing), local onde será escolhido qual
código C# responderá a aquisição;
• É acionado um controlador (Controller/Action);
• O controlador responderá a uma determinada página (ASP.NET View Engine), mos-
trando-a ao usuário.

Existem duas formas de abordagem de frameworks, em alguns frameworks, quando o


usuário acessa um endereço na página e tecla enter, o arquivo cairá em uma View e ela acio-
nará códigos caso necessário, mas, se não for preciso, a página será renderizada. Nesse
caso, a View vem em primeiro lugar, como é o caso do Web Forms. Já no caso da outra
abordagem, ao ser acessado um endereço, é primeiramente executado um código fonte do
servidor (C#), que não é uma página, e em seguida o código invoca uma View. Esse é o caso
do MVC, pois o Controller surge antes da View.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Fluxo de uma Solicitação

O mecanismo de roteamento é a chave para como o ASP.NET Core decide lidar com
suas solicitações.
15m

Obs.: o MVC está disponível no ASP.NET Core.

Ele pode ser configurado para rotear qualquer solicitação para qualquer ação do controla-
dor. Nesse caso, a ação está sendo direcionada para um controlador e não para uma página.
A configuração de roteamento padrão usa uma combinação dos nomes de controlador e
ação: /<nome do controlador>/<nome da ação>
Portanto, uma solicitação para /staff/index seria encaminhada para a ação chamada
Index no StaffController. Esse é um padrão popularizado pelo Ruby on Rails, o conven-
tion over configuration (convenção acima da configuração).
Existe uma estrutura de pastas que pode ser seguida, sendo assim, automaticamente, ao
ser feita uma solicitação, o framework ASP.NET MVC buscará um controle de mesmo nome
e encontrará um método relacionado. Essa convenção de pastas diminui a necessidade de
realizar muitas configurações.
Em diagrama:
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O código StaffController é um C#. O usuário digita o endereço /staff/index e tecla enter.


O staff digitado é o mesmo do código, então, é encontrado o controlador a ser executado e
será buscado o método Index dentro do StaffController (GET – Index).

Da mesma forma, se o usuário digitar o endereço /staff/profile, ele cairá na classe C# e


buscará o método Profile.
O método Index é o default, ou tradicional, logo, ao digitar apenas staff, o método a ser
buscado é o Index.

Localização do Código

No MVC, o código da sua aplicação reside na ação do controlador.


ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O HttpGet indica qual é o verbo, ou método, do HTTP, que são vários. Dentre eles: Get,
Put, Post, Delete, Options e outros. O código acima significa que, se o usuário fizer um Get
na página Index, o código será executado.

View
As ações do MVC não precisam retornar uma View, mas, normalmente, retornam. Nessas
Views são colocadas as marcações HTML.
Quando uma View é retornada, o MVC precisa localizar a View usando algumas conven-
ções padrão (convention over configuration). A menos que seja dito o contrário, ele procurará
em uma pasta Views por uma pasta com o mesmo nome que o controlador e, em seguida,
uma View com o mesmo nome da ação. Por exemplo: Views\Staff\Index.cshtml.
20m

Obs.: a extensão é.cshtml, e não exatamente.html.

Continuação do diagrama:
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O método encontrado, Index ou Profile, é um retorno de View (return View). Com isso, o
ASP.NET buscará, na pasta (Folder) Views/Staff, o arquivo Index.cshtml ou Profile.cshtml e
vai renderizá-lo.

A principal coisa a se observar é que as solicitações do MVC são roteadas para a ação
do controlador e cabe à ação determinar se uma exibição é retornada (e, em caso afirmativo,
qual visualização).
As ações do MVC podem facilmente substituir as convenções padrão e retornar uma
visualização específica (com um nome que difere do nome da ação):

Obs.: esse exemplo fará com que o MVC procure uma exibição chamada AnotherPage.
cshtml na pasta Views\Staff.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Dados na View
É possível criar um ViewModel para colocar os dados na View. Essa é uma classe que
vive em um arquivo.cs e possui propriedades para os dados que você deseja exibir em sua
visualização:

As visualizações podem renderizar os seguintes dados:

É possível acessar os dados da View com o @Model.FirstName!

O arquivo.cshtml não é um.html simples, e ele sofre um outro tipo de processamento.


Através dos comandos do @, esse arquivo pode incluir um código ou modelo retornado no
processo do Controller, que manipula os dados e os retorna para que uma View seja exibida.
A View exibida interpola os dados no modelo.html para exibi-los ao usuário.
25m
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Estrutura de Pastas

As pastas possuem uma série de convenções. Geralmente, os aplicativos MVC têm uma
convenção padrão, baseada em pastas, com pastas separadas para controladores, exibi-
ções e modelos de exibição:

Vantagens de um Aplicativo Web Baseado em MVC

O MVC possui maior facilidade em gerenciar a complexidade ao dividir o aplicativo em


modelo, exibição e controlador. Ela não utiliza o estado de exibição nem formulários basea-
dos no servidor, melhorando o controle completo sobre o comportamento do aplicativo.
Conta com o padrão Front Controller, que processa as solicitações do aplicativo Web
através de um único controlador. Esse é o tipo de padrão no qual a solicitação vai esbarrar
em código e depois será exibida uma página.
Também conta com um melhor suporte para desenvolvimento controlado por testes (TDD
– test-driven development).
Ela funciona bem com aplicativos Web, que são suportados por grandes equipes de
desenvolvedores, e com Web designers, que precisam de um grande grau de controle sobre
o comportamento do aplicativo.
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
ASP.NET
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Vantagens de um Aplicativo Web Baseado em Web Forms

O Web Forms suporta um modelo de evento que preserva o estado sobre HTTP, o que
beneficia o desenvolvimento de aplicativos Web de linha de negócios.
Ele usa um padrão Page Controller que adiciona funcionalidade em páginas individuais,
ou seja, uma página sem controlador, visto que a página vem antes dele.
Também utiliza o estado de exibição em formulários baseados no servidor, o que pode
facilitar o gerenciamento de informações de estado. No Web Forms, trabalha-se mais com
a linguagem do servidor do que com a linguagem do front engine, diferente do que acon-
tece no MVC.
Funciona bem para pequenas equipes de desenvolvedores e que desejam tirar pro-
veito do grande número de componentes disponíveis para um rápido desenvolvimento do
aplicativo.
30m
Além disso, é menos complexo para o desenvolvimento de aplicativos, pois os com-
ponentes estão extremamente integrados e, normalmente, exigem menos código do que o
modelo MVC.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET – WEB PAGE

O Web Page é outra opção de framework trabalhada no ASP.NET, assim como o Web
Forms e o MVC. O Web Page pode ser utilizado para criar páginas da Web dinâmicas.
Uma simples página HTML é estática, seu conteúdo é determinado pela marcação HTML
fixa que está na página, ou por interação via JavaScript, o AJAX. Páginas dinâmicas permi-
tem criar o conteúdo da página na hora, usando código. Dessa forma, toda vez que houver
uma solicitação, a página será reprocessada e exibirá um novo conteúdo. Um exemplo de
dinamicidade de páginas é o acesso ao banco de dados: uma página é acessada e o servidor
coleta dados e informações do banco dados, leva para a página HTML, adiciona no conteúdo
e gera uma saída dinâmica para o usuário.
O esquema abaixo ilustra o fluxo do Web Pages:

• O usuário digita o endereço na barra de URL e tecla enter;


• É gerado um request, uma solicitação;
• A solicitação vai para o Web Server, do ASP.NET;
• Aparecerão algumas tags (primeiro quadro do ASP.NET) que serão processadas pelo
servidor (segundo quadro do ASP.NET, o html), gerando a dinamicidade;
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A saída dessas tags processadas serão um arquivo html renderizado (terceiro quadro
do ASP.NET);
• A saída gera uma resposta, que será exibida ao cliente.

RELEMBRANDO
Navegadores não compreendem as linguagens ASP,.NET, Phyton ou Java, eles entendem
apenas html, CSS e JavaScript. Assim, qualquer framework que for utilizado realizará um
processamento sob a linguagem de marcação, processos como recuperar informações
no banco de dados e executar lógicas, mas devolverá para o navegador um html, CSS ou
JavaScript.

Exemplo de Web Page:


5m

• A extensão da página é.cshtml;


• O @page indica que trata-se de uma Web Page;
• O html utilizado é um html 5;
• O @message faz com que a página seja processada do lado do servidor.

Obs.: o framework Web Page pode ser comparado ao PHP ou ao ASP antigo, porém com
uma linguagem e estrutura mais simples e moderna.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET Web Pages: Razor

O Razor não é uma linguagem de programação, é uma linguagem de marcação do lado


do servidor. Razor é uma sintaxe de marcação que permite incorporar código executado no
servidor (Visual Basic e C#, por exemplo) em páginas da Web. Enquanto o ASP clássico
possuía uma linguagem específica, baseada em VBScript, o Razor possui uma linguagem
baseada em C#, uma linguagem mais moderna. Podem ser utilizadas no Razor quaisquer
linguagens suportadas pelo.NET Framework.
Quando uma página da Web é chamada, o servidor executa o código dentro da página
antes de retornar a página ao navegador. Ao executar no servidor, o código pode executar
tarefas complexas, como acessar bancos de dados.
O Razor é baseado no ASP.NET e projetado para criar aplicativos da Web. Ele tem o
poder da marcação tradicional do ASP, mas é mais fácil de aprender a usá-lo.

Obs.: atualmente, o ASP tradicional não é utilizado para trabalhar com códigos novos.

Sobre a sintaxe do Razor, o código é adicionado na página utilizando a @:

Obs.: as expressões inline são embutidas na própria linha.


ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O desenvolvedor cria códigos utilizando a @ e adiciona expressões lógicas, que geram a


avaliação do valor de uma variável. O código é então processado e ocorre uma saída, mos-
trando na View do usuário uma página renderizada:
10m

Em comparação aos outros padrões, como o Web Forms, que não possui uma estru-
tura bem demarcada de separação de códigos, o padrão MVC, com uma estrutura de códi-
gos bem demarcada em Model, View e Controller, o Web Page possui o código no mesmo
arquivo da página.cshtml.
De maneira hierarquizada, tem-se a seguinte ordem de padrões:
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A Combinação de Texto, Marcação e Código em Blocos de Código

É possível tirar trechos de html de blocos de código. O operador @: gera uma única linha
de conteúdo que contém o texto sem formatação ou marcas HTML sem correspondência:

Então, com a colocação do @:, o texto The time is: será renderizado no HTML. O @Date-
Time.Now exibe o horário atual e pode aparecer tanto no final da linha quanto no começo. A
imagem acima exemplifica como ocorrem as aparições dos trechos no meio de um bloco de
código e como é a saída de código que será renderizada na página.
O elemento <text> abrange várias linhas de saída:

O <text> aparece no início e no final do bloco, e tudo que não for marcado com a @, que
indica que trata-se de uma variável, será renderizado na página.
15m

Comentários

Para comentários do Razor do ASP.NET, é possível iniciar o comentário com @* e encer-


rá-lo com *@. O comentário pode estar em uma linha ou várias linhas:
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: pode-se também usar a sintaxe de comentário do próprio C#, que é o //.

Os comentários não aparecem na página final do usuário. A imagem acima exemplifica o


comentário em um bloco, em uma linha e em multilinhas.

Fluxo de uma Solicitação

• O usuário digita o endereço de uma página para solicitá-la e tecla enter;


• É feita a solicitação para o servidor;
• O ASP.NET direciona a solicitação para a página Razor através de um roteamento
(routing);
• A página age como se fosse uma ação (acts as an action);
• A página passa pelo motor de visualização (View Engine) e é renderizada;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A página renderizada é enviada ao usuário.

Com o Razor Pages, é feita uma solicitação (por exemplo, /contato), e a configuração
padrão do roteamento ASP.NET tenta localizar uma página Razor para essa solicitação na
pasta Pages. Diferente do padrão MVC, que tenta localizar controles.
O Razor Pages procura uma página com o nome usado na solicitação (para uma solicita-
ção /contato que seria Contato.cshtml) e direciona diretamente para ela. A página da Razor,
então, age como se fosse uma ação do controlador.
Para que um arquivo.cshtml seja qualificado como uma página Razor, ele deve estar na
pasta Pages (usando as convenções padrão) e incluir @page em sua marcação.

Localização do Código

Cada Razor Page pode ter um modelo de página correspondente. Se mantidas as con-
venções padrão, o ASP.NET esperará que o modelo tenha o mesmo nome da página Razor
correspondente, mas com um.cs anexado:

Nesse caso, os arquivos funcionam de maneira complementar, sem a necessidade de


colocar todos os códigos na página.cshtml.
20m

View

Como a solicitação é encaminhada diretamente para a página Razor específica que pode
manipulá-la, não há necessidade de localizar uma View, a View é a mesma para a qual a
solicitação foi encaminhada: Contato.cshtml. Já no MVC, sempre é retornada uma View.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No caso do Razor, não há necessidade de retornar uma View, pois o nome da requisição já
indica a página a ser renderizada.
O roteamento padrão para o Razor Pages é bastante simples e respeita as subpas-
tas, portanto \Pages\Staff\Profile.cshtml seria acessível por meio de uma solicitação para /
staff/profile:

A pasta staff (Staff Folder), tem alguns arquivos dentro de si. Por exemplo, se houver
requisição para /index (/staff/index), a pasta staff deve ter um arquivo index (index.cshtml) e,
eventualmente, o arquivo index.cshtml.cs. O mesmo acontece para a requisição /profile. A
página será renderizada de acordo com a requisição, no caso do /index será renderizada a
página de boas vindas (welcome), e no caso do /profile será renderizada da página de perfil
do usuário (your profile).
Vale notar que pode-se omitir Index, pois é a página padrão. Nesse exemplo, ambos /staff
e /staff/index levariam para o Pages\Staff\Index.cshtml.
O convention over configuration utilizado nas páginas ajuda na organização e manuten-
ção das páginas.

Dados na View

Ao invés de ter ViewModels separados, como no caso do MVC, basta adicionar proprie-
dades ao Modelo de Página. Pode-se definir tais propriedades diretamente nos métodos do
Modelo de página (por exemplo, OnGet) e renderizar esses dados na própria página:
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: esse exemplo é um Razor.

Obs.: esse exemplo é um C#.

Estrutura de Pastas

Por padrão, tudo fica na pasta Pages. Cada Razor Page consiste no modelo View
(.cshtml) e um arquivo.cs correspondente, que efetivamente atua como uma ação do contro-
lador, especificamente para essa visualização.

25m
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
ASP.NET – Web Page
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (IESES/2016/BAHIAGÁS/TECNOLOGIA DA INFORMAÇÃO/SISTEMAS) No contexto
da programação para a Web ASP.NET, Razor refere-se à/ao:
a. Um compilador que otimiza o código para execução em aplicações baseadas em Web.
b. Uma linguagem de programação que roda no cliente, similar à JavaScript.
c. Uma interface para o desenvolvimento de Web Services de arquitetura aberta.
d. Uma linguagem de programação interpretada pelo browser e que pode conter instru-
ções dinâmicas.
e. Uma linguagem de marcação que permite a execução de código em páginas Web.

COMENTÁRIO
a. O Razor não é um compilador.
b. Em termos de linguagem, o navegador entende apenas o JavaScript e não o Razor.
Além disso, o Razor não roda no cliente.
c. O Razor não se relaciona com Web Services.
d. O Razor não é interpretado pelo Browser.
e. A linguagem de programação utilizada no Razor é o C# ou F#. O Razor é uma linguagem
de marcação que determina os trechos de página onde será executado um código no lado
do servidor.

GABARITO
1. e

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET – WEB API E SIGNALR

Retomando o ASP.NET, tecnologia da Microsoft para desenvolvimento de páginas Web.

ASP.NET Web API – Application Programming Interface

HTTP não serve apenas para as páginas da Web, HTTP também é uma plataforma para
a criação de APIs que expõem serviços e dados. Na atualidade, existem muitas tecnologias
que usam o HTTP para conectarem-se com o servidor, como os celulares, que não solicitam
uma página html pois já possuem uma aplicação instalada que comunica-se com o servidor,
através de uma API.
O HTTP é um protocolo simples e flexível, desse modo, os serviços HTTP podem alcan-
çar uma ampla gama de clientes, incluindo navegadores, dispositivos móveis e aplicativos de
desktop tradicionais.
A ASP.NET Web API é um framework para a criação de APIs Web sobre o.NET Framework.

ASP.NET Web API: Single Page Applications (SPAS)

Atualmente, existem aplicações Web com interfaces realmente ricas, como Google Docs,
Gmail, entre outras. Essas aplicações são conhecidas como SPA – Single Page Applications,
que possuem uma única página para a aplicação, com o objetivo de melhorar a experiência
do usuário, sem reloads de toda a página levando a uma responsividade como de aplica-
ções desktop.
O Web Forms é um tipo de framework que possibilita um desenvolvimento de forma
visual, com a visualização de componentes no lado do servidor nas páginas ASP, que serão
renderizados no lado do cliente. Por outro lado, uma estratégia mais atual, a das SPAS, pos-
sibilita todo o desenvolvimento da View somente em html, JavaScript e CSS, sem nenhum
outro tipo de linguagem de marcação. Além de todo o processamento da View ser realizado
no browser. Entretanto, o acesso ao banco de dados é feito no lado dos servidores.
5m
No caso das SPAS, é comum que o servidor Web forneça os arquivos estáticos (html,
JavaScript e CSS), o front engine execute uma lógica de JavaScript, o próprio front engine
requisite os dados para o servidor e eles sejam populados no front engine. Exemplos de apli-
cações que usam essa estrutura são Twitter, Facebook e Gmail. Esse tipo de estrutura gasta
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

menos recursos do lado do servidor, pois a maior parte do processamento da View é feita do
lado do cliente.
Os SPAS têm por característica um maior processamento de informações no próprio
browser e utilização de AJAX para atualização pontual de partes da aplicação. Esse cenário
se contrapõe ao de processar toda (ou a grande maioria) da informação no servidor, e só
enviar ao cliente o HTML gerado, ou seja, o browser começa a ter uma importância maior,
pois parte do processamento agora é realizado no lado cliente.
Por isso as SPAS são mais vantajosas para aplicativos de larga escala.

ASP.NET Web API: Representational State Transfer (REST)

Ao acessar o lado do servidor através das SPAS, o servidor fornece uma API, geralmente
chamada de API REST. Esse tipo de API combina o endereço do navegador com os verbos
do HTTP (Get, Put, Post e Delete). Cada tipo de combinação possui um efeito diferente na
tela do servidor.
Sobre isso, observe a tabela abaixo:

10m

Obs.: o {id} é utilizado para indicar um item específico, por exemplo, o GET /api/tarefa{id}
serve para recuperar apenas uma tarefa ao invés de uma lista completa.

Com o API, ao invés de criar um servidor que retorna uma lista de páginas com uma lista
de itens, criam-se uma endpoints REST que serão acionados por uma aplicação do celu-
lar ou por uma aplicação JavaScript e realizarão operações sobre as entidades criar, listar,
incluir ou alterar. Tem-se, então, um API ou um Web Service de comunicação.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET Web API: Fluxo da Requisição

O cliente, ou client, faz uma requisição que bate no controle (controller), que, por sua vez,
terá uma interação com a base de dados, criará um objeto com base no modelo (model) e o
vai serializar. O padrão de serialização, ao invés de ser uma página HTML ou uma View, é
JSON ou XML.
O client é quem consome a Web API (pode ser um navegador, um aplicativo para celular
e etc). Um model é um objeto que representa os dados em seu aplicativo. Os modelos são
representados como classes C# simples. Um controller é um objeto que manipula solicita-
ções HTTP e cria a resposta HTTP.
Esse modelo não tem View associada.
Trecho de código do controller:

15m

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ASP.NET SignaIR

O ASP.NET SignalR é uma biblioteca para desenvolvedores do ASP.NET que simplifica


o processo de adicionar funcionalidade Web de tempo real a aplicativos. A funcionalidade da
Web de tempo real é a capacidade de ter o código do servidor, enviando conteúdo para os
clientes conectados instantaneamente à medida que eles se tornam disponíveis, em vez de
fazer com que o servidor espere que um cliente solicite novos dados. Um exemplo de fun-
cionalidade da Web é o placar de futebol disponível em alguns sites, que se atualizam de
forma automática, pois recebem dados ativamente do servidos. Nesse caso, o servidor está
sempre reagindo sem precisar que o usuário interaja com a página, diferente do que ocorre
nas páginas Web.
Exemplos de casos de uso:

• Aplicações colaborativas (como o Google Docs);


• Pesquisas demoradas (pesquisas que são populadas no lado do cliente);
• Monitoração (com os placares citados anteriormente).

O SignaIR fornece uma API simples para criar chamadas de procedimento remoto, ou
Remote Procedure Call (RPC), do servidor para o cliente que chamam funções JavaScript
em navegadores a partir do código.NET do lado do servidor.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No primeiro caso, o servidor vai até a lista de clientes e seleciona um usando o id e cha-
mando uma função JavaScript no navegador do cliente. No segundo caso, é o contrário, pois
a comunicação fica ativa e o cliente aciona uma função do servidor, por exemplo, para con-
firmar que recebeu uma mensagem.
20m
Em comparação com o HTTP, os dois modos são bem diferentes, pois no caso do HTTP,
quando a requisição termina a comunicação é cortada.
O SignalR lida com o gerenciamento de conexões e permite transmitir mensagens para
todos os clientes conectados (broadcast) simultaneamente ou enviar mensagens para clien-
tes específicos. Os placares já mencionados são exemplos de conexão broadcast, já os
chats são exemplos de conexão específica para determinado usuário.
A conexão entre o cliente e o servidor é persistente, ao contrário de uma conexão HTTP
clássica, que é restabelecida para cada comunicação.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O SignalR oferece suporte à funcionalidade “push do servidor”, na qual o código do ser-


vidor pode chamar o código do cliente no navegador usando o RPC, em vez do modelo de
solicitação-resposta comum na Web hoje.

DIRETO DO CONCURSO
1. (CETAP/2015/MPCM/ANALISTA DE SISTEMAS/DESENVOLVIMENTO) O framework
ASP.NET Web API facilita a construção de serviços REST HTTP que alcançam uma
grande variedade de clientes incluindo smartphones, tablets, browsers e aplicações
locais. É, hoje, a plataforma ideal para construção de serviços REST baseados em.NET.
Analise o código Seguinte e identifique qual o retorno em JSON que esse serviço vai
gerar de acordo com a chamada http://localhost/api/aluno/2?

a. {“ID”:2,”Nome”:”João Silva”,”Matriculado”:true}
b. <Aluno><ID>2</ID><Nome>João Moraes</><Matriculado>true</Matricu-
lado></Aluno>
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
ASP.Net – Web Api e Signalr
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

c. {[“ID”]<2>,[“Nome”]<”João Silva”>,[“Matriculado”]<true>}
d. <Aluno><ID>2</ID><Nome>”JoãoSilva”</><Matriculado>true</Matricu-
lado></Aluno>
e. <”aluno”> <”ID”> 2 </”ID”> <”Nome”>João Silva</> <”Matriculado”> true </”Matri-
cülado”> </”Aluno” >

COMENTÁRIO
A classe do código é chamada de “aluno”, e ela possui as características “id”, “nome” e
“matriculado”, com seus correspondentes getters e setters. O “ApiController” cria uma lista
de alunos.
Ao final do código são expostos alguns métodos.
A questão indica que o código escolhido dentre as alternativas deve ser um JSON.
b, d e e. Os códigos das alternativas são XML.
25m
c. Essa sintaxe não existe.

GABARITO
1. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SPRING

O spring é um framework muito utilizado no mercado e no desenvolvimento web


corporativo.

CONCEITOS

Framework é um modelo de desenvolvimento, isto é, um conjunto de ferramentas que


serve para orientar boas práticas de programação, bem como facilitar no desenvolvimento de
softwares complexos ou não triviais.
O spring tem sido uma opção ao modelo JEE, pois faz basicamente as mesmas coisas
que o JEE – porém de uma forma considerada muito mais simples, prática e consumindo
menos recursos.

INTRODUÇÃO

O Spring framework é uma plataforma Java de código aberto que fornece suporte abran-
gente à infraestrutura para o desenvolvimento de aplicativos Java robustos com muita faci-
lidade e rapidez;
O spring, portanto, foca na facilidade e na rapidez de desenvolvimento, fornecendo solu-
ções prontas para fazer certas estruturas, como segurança e troca de mensagens de uma
forma bem integrada.
O framework Spring foi inicialmente escrito por Rod Johnson e foi lançado pela primeira
vez sob a licença Apache 2.0 em junho de 2003.
Spring é o framework de desenvolvimento de aplicativos mais popular para o desenvol-
vimento Java corporativo.
Os principais recursos do Spring Framework podem ser usados no desenvolvimento de
qualquer aplicativo Java, mas há extensões para a criação de aplicativos da Web sobre a
plataforma Java EE.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o spring, na verdade, é uma série de módulos separados que são feitos de forma a
conversar um com o outro muito bem. Então, para qualquer tipo de aplicativo que
se trabalhe, é possível utilizar as tecnologias do spring. Além disso, o spring é muito
voltado para as aplicações web.
5m

O framework Spring tem como objetivo tornar o desenvolvimento de JEE mais fácil de
usar, além de promover boas práticas de programação, permitindo um modelo de programa-
ção baseado em POJO.
O Spring une boas práticas de programação com ferramentas e boas estratégias. Ele
prova que um sistema bem arquitetado possui grandes chances de ser bem sucedido. Todos
os módulos são baseados tanto tecnicamente quanto filosoficamente em ótimos padrões de
mercado. Com isso, o usuário ganha uma série de benefícios no desenvolvimento de software.

Benefícios

Permite que sejam desenvolvidos aplicativos de classe empresarial usando POJOs. O


benefício de usar apenas POJOs é que você não precisa de um produto de contêiner EJB,
como um servidor de aplicativos, mas tem a opção de usar apenas um contêiner de servlet
robusto, como o Tomcat ou algum produto comercial;

Obs.: POJO significa: Plain Old Java Object.

Quando se usa spring, não é necessária a utilização de servidores pesados e pode-se


utilizar servidores mais leves, como o Tomcat. O spring permite que o desenvolvedor utilize
esses POJOs no lugar dos EJBs (que requer uma estrutura mais pesada).
É organizado de forma modular. Mesmo que o número de pacotes e classes seja subs-
tancial, você precisa se preocupar apenas com aqueles necessários e ignorar o resto.
O Spring não reinventa a roda; pelo contrário, usa tecnologias existentes, como fra-
meworks ORM, frameworks de log etc.

Obs.: ORM significa: Object Relational Mapping. É um framework que vai mapear o banco
de dados para classes ou objetos no Java.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Testar um aplicativo escrito com o Spring é simples porque o código dependente do


ambiente é movido para o framework.
Quando se escreve um projeto que utiliza EJB, este vai depender do ambiente de execu-
ção; ao passo que, quando se trabalha com spring, todos esses dados passam para dentro
do framework. Assim, é possível rodar o framework – que é mais leve em um ambiente
de testes.
O framework web do Spring é um framework web MVC bem projetado, que oferece uma
ótima alternativa para frameworks web como o Struts ou outros frameworks web super proje-
tados ou menos populares;
10m

Obs.: MVC significa: Model View Controller.

O Spring fornece uma API conveniente para traduzir exceções específicas da tecnolo-
gia (lançadas por JDBC, Hibernate ou JDO, por exemplo) em exceções consistentes e não
verificadas.
Utiliza contêineres leves de IoC, especialmente quando comparados aos contêineres
EJB, por exemplo. Isso é benéfico para o desenvolvimento e a implantação de aplicativos em
computadores com memória limitada e recursos da CPU.
O Spring fornece uma interface consistente de gerenciamento de transações que pode
ser redimensionada para uma transação local (usando um único banco de dados, por exem-
plo) e escalonar para transações globais (usando o JTA, por exemplo).

Injeção de Dependência (DI)

É a tecnologia mais proeminente do Spring. A Inversão de Controle (IoC) é um conceito


geral e pode ser expresso de maneiras diferentes. A Injeção de Dependência é meramente
um exemplo concreto de Inversão de Controle.
Inversão de controle é deixar que o framework controle algumas aplicações. Por exem-
plo, na injeção de dependência o desenvolvedor não vai criar alguns objetos, mas pedir para
que o framework crie esses objetos e gerencie o seu ciclo de vida.
15m
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Ao escrever um aplicativo Java complexo, as classes de aplicativo devem ser o mais


independentes possível de outras classes Java a fim de aumentar a possibilidade de reuti-
lizar e testá-las independentemente de outras classes durante o teste de unidade. Injeção
de dependência ajuda na colagem dessas classes juntos e, ao mesmo tempo, mantê-las
independentes.
Quando se faz um teste em uma determinada classe, em vez de injetar a dependên-
cia correta, como aquela classe não está instanciando, pode-se injetar um moc e executar
os testes.

Programação Orientada a Aspectos (AOP)

É um componente chave do Spring. As funções que abrangem vários pontos de um apli-


cativo são ditas de "interesse transversal" e essas preocupações transversais são conceitual-
mente separadas da lógica de negócios do aplicativo. Existem vários exemplos de aspectos,
incluindo log, transações declarativas, segurança, armazenamento em cache etc.
Sobre os aspectos de segurança, trata-se de uma preocupação transversal. Imagine que
em vários pontos do programa será preciso fazer uma verificação de acesso e é importante
que não fique duplicando código, mas que seja feito de uma forma simples e efetiva.
A unidade-chave da modularidade na OOP é a classe, enquanto na AOP a unidade da
modularidade é o aspecto. O DI ajuda você a desacoplar seus objetos de aplicação uns
dos outros, enquanto o AOP ajuda a dissociar as preocupações transversais dos objetos que
eles afetam.
O módulo AOP do Spring Framework fornece uma implementação de programação
orientada a aspectos, permitindo que você defina interceptadores de método e pontos de
corte para separar de forma simples o código que implementa a funcionalidade que deve ser
separada.
20m

Arquitetura

O Spring pode ser a tecnologia central para todos os seus aplicativos corporativos.
No entanto, o Spring é modular, permitindo que se escolha quais módulos são aplicáveis,
sem ter que trazer o restante.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O Spring Framework fornece cerca de 20 módulos que podem ser usados com base nos
requisitos do aplicativo.
Estes são os módulos presentes no spring e todos conversam muito bem entre si. Além
disso, o desenvolvedor pode, no momento da programação, escolher algumas partes e
outras não.

Core Container

O Core Container consiste nos módulos Core, Beans, Context e Expression Language.
O módulo Core fornece as partes fundamentais do framework, incluindo os recursos IoC
e Dependency Injection;

Obs.: a injeção de dependência está no modo Core.

O módulo Bean fornece o BeanFactory, que é uma implementação sofisticada do fac-


tory pattern.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O módulo Context baseia-se na base sólida fornecida pelos módulos Core e Beans e é
um meio de acessar qualquer objeto definido e configurado. Ademais, a interface Application-
Context é o ponto focal do módulo de Contexto.
O módulo SpEL (Spring Expression Language) fornece uma poderosa linguagem de
expressão para consultar e manipular objetos em tempo de execução.

Obs.: ele possui uma linguagem de expressão em que é possível colocar algum tipo de
meta programação para que ela seja avaliada em tempo de execução.

Com base no modo Core, principalmente na parte de gestão de dependência, todos os


outros módulos são criados. Outro módulo muito importante é a parte de acesso a dados.

Data Access/Integration

A camada Data Access / Integration é composta pelos módulos JDBC, ORM, OXM, JMS
e Transaction.
O módulo JDBC fornece uma camada de abstração de JDBC que elimina a necessidade
de codificação repetitiva relacionada ao JDBC.
O módulo ORM fornece camadas de integração para APIs de mapeamento objeto-rela-
cional populares, incluindo JPA, JDO, Hibernate e iBatis.
O módulo OXM fornece uma camada de abstração que suporta implementações de
mapeamento de objeto/XML para JAXB, Castor, XMLBeans, JiBX e Xstream.
O módulo JMS do Java Messaging Service contém recursos para produzir e consumir
mensagens.
O módulo Transaction suporta o gerenciamento de transações programáticas e declarati-
vas para classes que implementam interfaces especiais e para todos os seus POJOs.

25m
Web

A camada Web consiste nos módulos Web, Web-MVC, Web-Socket e Web-Portlet.


O módulo Web fornece recursos básicos de integração orientados à web, como funcio-
nalidade de upload de arquivos de várias partes e a inicialização do contêiner IoC usando
servlet listeners e um contexto de aplicativo orientado para a web.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O módulo Web-MVC contém a implementação do Model-ViewController (MVC) do Spring


para aplicativos da web.
O módulo Web-Socket fornece suporte para comunicação bidirecional baseada em Web-
Socket entre o cliente e o servidor em aplicativos da web.
O módulo Web-Portlet fornece a implementação MVC a ser usada em um ambiente de
portlet e espelha a funcionalidade do módulo Web-Servlet.
O spring, portanto, tem uma solução fácil e bem trabalhada para os problemas mais
comuns de desenvolvimento.

Módulos Diversos

Existem alguns outros módulos importantes, como os módulos AOP, Aspects, Instrumen-
tation, Web e Test.
O módulo AOP fornece uma implementação de programação orientada a aspectos, per-
mitindo que você defina interceptores de métodos e pontos de corte para separar de forma
simples o código que implementa a funcionalidade que deve ser separada.
O módulo Aspects fornece integração com AspectJ, que é novamente uma estrutura
AOP poderosa e madura.
O módulo Instrumentation fornece suporte de instrumentação de classe e implementa-
ções de class loaders a serem usadas em determinados servidores de aplicativos.
O módulo Messaging fornece suporte para STOMP como subprotocolo WebSocket para
uso em aplicativos.
O módulo Test suporta o teste de componentes Spring com frameworks JUnit ou TestNG.

DIRETO DO CONCURSO
1. (2014/FUNCAB/PRODAM-AM/PROGRAMADOR-DESENVOLVEDOR ESPECIALISTA)
O framework Spring permite a troca de mensagens entre clientes através do suporte
nativo ao:
a. SpringMessaging Service(SMS).
b. JavaMessaging Service(JMS).
c. SpringChat Service(SCS).
d. JavaChat Service(SCS).
e. Chat andMessaging Service(CMS).
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Spring
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
30m
O módulo JMS do Java Messaging Service contém recursos para produzir e consumir
mensagens.

GABARITO
1. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SPRING CLOUD
Antes de abordar o Spring Cloud, falar-se-á os requisitos necessários para aprender o
Spring Cloud. O primeiro requisito é ter noções de programação, desenvolvimento, progra-
mação estruturada, e depois Java. Após o Java, é aconselhável estudar Spring e Boot. Com
esses conhecimentos, é possível compreender melhor o Spring Cloud.
Nesta aula, será demonstrado como o Spring Cloud é utilizado para desenvolver aplica-
ções Spring na Cloud.

Na primeira página do projeto, ele traz um ótimo resumo das funções do produto. Dentro
do guarda-chuva de projetos do Spring, existem vários projetos separados.
Primeiro, o Spring Boot. Em termos de estrutura, o primeiro é o Spring Framework. Ele
mostra como desenvolver aplicações Spring conceito de Spring MVC. Depois, há o Spring
Data. Ele fala a respeito de como é feita a comunicação com banco de dados, a estratégia de
JPA, ORM, utilizadas com o Spring Framework. O Spring Framework é uma aplicação web e
esta se comunica com o banco de dados.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Depois vem o Spring Boot. O Spring Boot aciona a característica da aplicação web, se
comunica com a base de dados e aciona a característica que a aplicação pode trabalhar de
uma forma isolada. O Spring Boot pode embutir um servidor dentro dela. Pode-se colocar um
pequeno tomcat dentro da aplicação e ela vai toda empacotada com um JAR autoexecutável
e torna muito mais fácil a execução da aplicação.
O Spring Cloud provê ferramentas para desenvolvedores, a fim de construir rapidamente
alguns padrões comuns em sistemas distribuídos.
Primeiramente, o Spring Cloud não é um framework, um servidor específico, não é um
produto específico. Ele é um conjunto de ferramentas da Spring. Existem várias ferramentas
independentes que conversam muito bem e formam o Spring Cloud.
Isso permite que se construa rapidamente alguns padrões, os padrões mais comuns, em
aplicações distribuídas. No caso de aplicações monolito, que são aplicações inteiras, dentro
de um pacote só. Essa aplicação, digamos, monolítica, funciona de uma maneira, ela tem
suas particularidades. Por exemplo, a barra de comunicação de uma aplicação monolítica
e o barramento de memória. Ela comunica de memória em memória, de maneira síncrona.
A aplicação distribuída tem uma série de características diferentes porque deve lidar com
falhas. É possível ter uma configuração que vai ser distribuída para vários servidores, então
existe uma série de partners, de desenvolvimento.
5m
No Service discovery, quando há muitos serviços sendo disponibilizados por meio de
microsserviços, é preciso descobrir qual o IP do servidor que fornece isso, qual é a máquina
que fornece. Então o Service Discovery permitirá a descoberta de qual máquina esses
serviços vêm.
Nesse contexto, existe o Circuit Breaker ou disjuntor. No caso de um Circuit Breaker,
suponhamos que exista uma aplicação e ela tem uma série de componentes e um dos com-
ponentes pode começar a demorar muito, começar a falhar. Isso pode derrubar todo o sis-
tema. O Circuit Breaker é como o disjuntor. Esse disjuntor evitará que aquela máquina fique
sobrecarregada e desenvolverá uma resposta padrão ou desativará o serviço completamente
até que ele seja restaurado. A ação do disjuntor evita o acúmulo de requisições pendentes
dentro da infraestrutura.
Depois, roteamento inteligente, inclusive baseado em distribuição geográfica, proxy,
micro proxy para a comunicação. Controle de barramento, tokens, global locks para opera-
ções que não podem ser feitas por dois operadores ao mesmo tempo, leadership election,
seções distribuídas, estado do cluster.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando é na coordenação de sistemas distribuídos, necessita-se de muitos padrões de


desenvolvimento. Quando se quer coordenar um serviço distribuído, precisa-se de padrão. E
na utilização de Spring Cloud, os desenvolvedores podem utilizar rapidamente os serviços e
aplicação que implementam os padrões.
Cada um dos itens à esquerda da tela do Spring Cloud fornecerão um desses padrões.
Descoberta de serviço, barramento, o Circuit Breaker, Cloud Cluster, Cloud Config, conecto-
res, entre outras coisas.
Eles permitem funcionar em qualquer ambiente distribuído incluindo o laptop do desen-
volvedor, o data center, ou a plataforma centralizada como o Cloud Foundry.
O Spring Cloud foca em prover experiências ótimas fora da caixa e seus casos de uso
permitem fazer sistemas distribuídos, registro de serviços, roteamento, um serviço acionando
outro serviço, balanceamento de carga, a desativação do serviço caso esteja com falha,
Global Locks (quando há dois locais que podem fazer o mesmo serviço, mas a intenção é
que se faça um por vez), gerenciamento de cluster e distribuição de mensagens.
10m
O Spring Cloud foi muito desenvolvido pela Netflix. É por isso que aparece Netflix na lista
à esquerda. A empresa trabalha muito com Spring Cloud.
Em resumo, o Spring Cloud é um conjunto de ferramentas que fornecem padrões de
desenvolvimento para se trabalhar com o Cloud.
Desenvolver sistemas distribuídos é bastante complicado. As pessoas querem desen-
volver sistemas distribuídos porque querem trabalhar com o Cloud e sistemas escaláveis.
Antigamente, quando havia o monolito, era uma aplicação e quando era necessária outra
aplicação, era necessário levantar a aplicação inteira. A aplicação era muito grande.
Quando se trabalha com o sistema distribuído, existem vários microsserviços e é possí-
vel escalar independentemente o microsserviço. É viável utilizar linguagem de programação
diferentes entre os microsserviços. Isso é considerado uma grande vantagem.
Em uma nova camada de complexidade, o sistema distribuído é mais complexo e exige
maior interação entre os serviços. Então para tornar uma aplicação que é nativa na nuvem,
são necessárias várias dessas características dos padrões de desenvolvimento em Cloud,
como, por exemplo, a ausência de estado, a log centralizada, conexão com outros serviços
entre outras coisas.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Esse conjunto de projetos Spring Cloud contém muitos padrões necessários para que se
desenvolvam em nuvem. Ele é muito utilizado por várias empresas, em especial pela Netflix,
como dito anteriormente, que foi uma das grandes desenvolvedoras de Spring Cloud. Ele permite
que os desenvolvedores foquem muito mais em resolver um problema de negócios do que ficar
descobrindo padrões de comunicação de serviço.
Ele é muito útil para o desenvolvimento de aplicativos que exigem alta escalabilidade,
desempenho e disponibilidade. Um exemplo de uma arquitetura que utiliza o Spring Cloud.

Haverá uma série de microsserviços. Suponhamos que fosse uma escola. Existe a parte
de matrícula, do cadastro de alunos, do cadastro de professores. Os microsserviços têm
vários cards porque eles estão escalados. Em geral, o primeiro microsserviço será desenvol-
vido em Spring Boot com Spring.
Os microsserviços devem se comunicar com um banco de dados e é preciso saber o IP
ou a URL do banco de dados. Para não se colocar em cada um dos microsserviços e se a
URL mudar e der problema, levanta-se o elemento Config. Server. O Config. Server terá a
URL do Data Base.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Cada microsserviço que levanta, ao invés de ele ter a URL do banco de dados dentro
dele, ele vai perguntar para o Config. Server. A URL do banco de dados é uma das configu-
rações, mas podem existir muitas outras.
Do lado esquerdo, há a internet das coisas, os celulares e o browser. São os clientes
que consumirão os microsserviços. O cliente até poderia se comunicar diretamente com os
microsserviços, mas como iria saber quais das três máquinas se comunicaria? Dificilmente,
ele saberia algo assim.
Os clientes finais, ao invés de comunicar diretamente com os microsserviços, se comuni-
cam com uma instância chamada API Gateway, que é um portão. Ele pode ter alguma ques-
tão de segurança, alguma coisa nesse sentido, e vai ser o papel dele distribuir os serviços.
15m
O API Gateway distribui os serviços com algoritmos, algum tipo de balanceamento de
carga para as máquinas. O API Gateway sabe da existência de cada microsserviço. Esses
microsserviços, quando se levantam, se comunicam com o Service registry, um registrador
de serviços. O API Gateway, quando ele levanta, ele consulta o Service registry sobre qual
microsserviço está disponível. O Service registry passa essa informação ao API Gateway.
Além disso, há outro serviço adicional, o Distributed tracing, que faz o rastreamento da
comunicação, de bugs, entre outros pontos.
Os microsserviços são Spring Boot tradicionais. Eles terão alguns plug-ins para se comu-
nicar. O Config. Server, o API Gateway, o Service registry e o Distributed tracing são com-
ponentes do Spring Cloud. Além disso, o Spring Cloud tem outros componentes para outros
tipos de uso.

• Spring Cloud

Spring Cloud é uma coleção de componentes prontos para uso que são úteis na constru-
ção de aplicativos distribuídos em uma empresa.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Arquitetura de Microsserviços

A arquitetura de microsserviços é um estilo de desenvolvimento de aplicativo em que os


aplicativos são desenvolvidos em partes pequenas, pequenos serviços. Esses serviços têm
baixo acoplamento entre eles. As vantagens são: é mais fácil manter um sistema baseado
em microsserviços. Como eles são pequenos em tamanho, eles fazem uma única tarefa e é
mais fácil de manter. É mais fácil de escalar. Como são pequenos, é possível criar mais ins-
tâncias deles. Assim, cada serviço pode ser implantado em uma linguagem de programação
diferente. Não há necessidade de ter uma pilha comum para usar todos os microsserviços.
Na imagem, há um serviço de clientes, um serviço de veterinário e um serviço de visitas,
digamos assim. Cada um deles está comunicando com um banco de dados separados. O
cliente manda uma requisição, bate no API Gateway e ele, por sua vez, distribui as requisições.
20m
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Também há solução de log distribuído como Kipkin e também o Spring Boot Admin Server
para administrar os servidores. O API Gateway, por meio de uma estratégia de Load Balan-
ced, pode bater em uma das máquinas diferentes. Depende da estratégia. A máquina, quando
liga, ela se registra no Eureka e obtém as configurações do Spring Cloud Config Server, que
mantém as configurações num repositório git.
Quando o Spring Cloud lê um repositório git, ele lê do git e quando uma aplicação levanta
ela, vem no Spring Cloud Config Server e lê a sua própria configuração. Os serviços são
pequenos e independentes e podem se comunicar até mesmo entre eles também.
Na base de tudo isso, está uma ferramenta chamada Spring Boot.

O Spring Boot é baseado em Java, que é utilizado para criar esses microsserviços. Além
disso, ele reduz bastante o tempo para desenvolver aplicações Spring. Ele tem um esqueleto
de aplicação pronta e ele permite o tomcat.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O servidor está dentro da aplicação Spring Boot, dentro dela há um tomcat.


Entre os serviços disponibilizados pelo Spring Cloud, os serviços principais são:
– Mensagens distribuídas;
– Balanceamento de carga;
– Circuit Breakers;
– Roteamento;
– Log distribuído;
– Registro de serviço;
– Bloqueio distribuído;
– Configuração centralizada.

Esses padrões de clouds estão prontos para serem fornecidos. Cada um dos itens serão
caixas colocadas no diagrama.

• Benefícios
– Os desenvolvedores se concentram na lógica de negócios;

Como o Spring Cloud fornece o código padrão para implementar os designers de nuvem,
o desenvolvedor pode se concentrar mais na lógica de negócios e a necessidade de desen-
volver e manter os códigos.

– Tempo de desenvolvimento rápido;

Diminui o tempo de desenvolvimento das aplicações. Como o desenvolvedor recebe


muito código pronto, muita ferramenta pronta, o produto sai mais rápido.

– Fácil de usar;

Basta colocar algumas bibliotecas e algumas anotations.

– Projeto Ativo.

Tem uma comunidade muito grande.


ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A arquitetura de serviço tem várias vantagens, mas uma das desvantagens mais críticas
é que desenvolver um aplicativo distribuído é difícil. Por exemplo, como um serviço sabe-
ria o IP de outro serviço? E se o serviço cair, agora o balanceador de carga não pode mais
jogar naquela máquina. Como monitorar vários serviços, distribuir uma configuração entre
várias máquinas? Como depurar um serviço que esteja com problema? São esses impasses
e outros.
25m
Esses são problemas que o Spring Cloud tentará resolver, fornecer algum tipo de solu-
ção. Ele vem, em geral, com o Spring Boot.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SPRING CLOUD II
Componentes

Distributed Cloud Configuration: configuração distribuída.


Distributed Messaging: mensagem distribuída. Mensagerias são comunicações assíncro-
nas em serviços.
Service Discovery: descoberta de serviço.
Na aplicação monolítica, ao existir necessidade de comunicação entre uma parte com
outra do monólito, tal comunicação é feita diretamente através da memória RAM, ou seja,
uma função chama outra função e transfere os dados. Já na aplicação distribuída, a comuni-
cação entre as aplicações é HTTP, com componentes mais elaborados.
O spring boot é o frame java, usado para desenvolver aplicativos, embutir um tomcat e
criar microsserviços. O spring cloud é usado para integrar os microsserviços. Para que o
máximo dos benefícios sejam utilizados, recomenda-se o uso dos dois serviços juntos.

Dependência Principal
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tudo na aplicação começa com o gerenciamento de dependências. Como o spring cloud


possui uma série de componentes distintos, ele tem um próprio gerenciador de dependências
para garantir que haja compatibilidade entre as dependências instaladas no aplicativo.

Arquitetura e Framework do Projeto

O microsserviço de restaurantes e o microsserviço de clientes têm duas instâncias. Even-


tualmente, o serviço de restaurantes precisa se comunicar com o de clientes. O gateway
comunica-se com o serviço de restaurantes e com o de clientes, registrando-se no eureka.
Antes de fazer a comunicação entre os microsserviços, o gateway busca a lista dos serviços
disponíveis, perguntando para eureka. Quando o cliente bate no gateway, esse direciona
para o local correto. Em geral, na prática, a comunicação direta entre cliente e microsserviço
não é liberada.
5m
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A ilustração acima exibe um exemplo de estrutura de um projeto java. Ele tem o spring
cloud eureka client. Por simplicidade, o customer service e o serviço de restaurante estão no
mesmo servidor.
Há necessidade da instância do servidor e de um feign client (imagem abaixo), o qual
permite a comunicação entre os microsserviços, além da necessidade de um gateway. Nas
duas imagens, identificam-se 4 bases de código java.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

POM
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Iniciando-se pelo spring cloud eureka client:


A imagem do lado esquerdo mostra um arquivo POM xml, com empacotamento como jar,
pois o spring boot empacota como jar para que a aplicação seja autoexecutável. O código
fonte é 1.8. As dependências são: spring cloud, spring boot, starter web e spring boot maven
plugin, para que o empacotamento da aplicação tenha os jars e o tomcat embutidos. Trata-se
do POM do microsserviço.

Eureka

O eureka é usado para fazer a descoberta e catalogação do serviço, parte crítica que
acontece quando o microsserviço é implantado no microsserviço em nuvem. Em qualquer
operação de uso, é possível criar microsserviços e estabelecer a comunicação entre eles.
10m
A descoberta do serviço ajuda a rastrear o endereço do serviço e as portas pelas quais
ele está se comunicando.
Componentes:
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• instância do serviço, o qual responde às solicitações;


• service rest, o qual mantém o endereço das instâncias;
• cliente do serviço (gateway).

Eventualmente, as aplicações podem perguntar para o eureka, a fim de consumirem


outros serviços.

Configurando o Servidor / Registro Eureka

Em geral, os projetos do spring cloud são java. Eles precisam da criação de um pacote
para subir, pois não são autônomos.

Na imagem acima, está como dependência o spring started netflix eureka service, que é
um servidor. Também há um spring boot.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A classe é o restaurant service registry, o qual é um registro. Trata-se de um spring boot


com o eureka service embutido.

A porta é a 8900 e não há registro em outro servidor eureka. Não ocorre fetch do service.
Com o projeto estruturado e com as dependências inclusas, faz-se a compilação e executa-
-se o java - jar.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Após a execução do java - jar, ele levanta, como vê-se na imagem acima.

Não há nenhuma instância avaliável, pois ninguém registrou-se nele. Não há réplicas,
pois trata-se de uma instância em stand alone.

Configurando os Clientes de Instância


ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os clientes são configurados. O microsserviço é configurado para se comunicar com o


eureka e adiciona-se uma dependência a mais, o eureka client.
15m

Em geral, as configurações do spring cloud baseiam-se em dependência e anotação.

Na imagem acima, observam-se o local de registro e as duas instâncias do serviço.


ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Registering service: está acontecendo o registro no servidor eureka.


ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Na imagem acima, observam-se duas instâncias, além do local host 81 e 82, que são as
duas portas levantadas.

Configurando o Cliente Consumidor Eureka

Um dos cliente se registra no eureka e o outro procura as informações.

Quando se entra no eureka e perguntam-se as instâncias, nota-se que ele possui uma
API, evidenciando-as.
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

http://localhost:8081/customer_service_instances
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES

www.grancursosonline.com.br 13
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES

www.grancursosonline.com.br 14
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

APIs do Eureka

http://localhost:8900/eureka/apps/customer-service

Quando um novo serviço é executado, faz-se um post. Quando ocorre a queda de um


serviço, faz-se uma ação de apagar. Para pegar uma informação sobre um serviço, é possí-
vel fazer um get e procurar a identificação. Um serviço pode ter várias instâncias executando
ele. Por fim, também é possível pegar uma informação sobre uma instância e perguntar, pas-
sando o instanceld.
20m
ANOTAÇÕES

www.grancursosonline.com.br 15
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Alta Disponibilidade

O eureka é um ponto de falha perigoso do sistema. Por ser um ponto único, caso ele
saia do ar, o mesmo ocorre com a aplicação. Para evitar isso, é possível subir várias instân-
cias do eureka, para que seja possível se comunicar através de outra instância, em caso da
queda de uma.

Aponta-se um servidor para outro do eureka.

É possível levantar um eureka na 8900 e outro na 8901. Cada um aponta para outro. Os
dois são executados na configuração de alta disponibilidade, pois, se uma máquina cair, a
outra assume, evitando-se a chance de que o sistema fique fora do ar.
ANOTAÇÕES

www.grancursosonline.com.br 16
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br


ANOTAÇÕES

www.grancursosonline.com.br 17
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando há dois servidores eureka, é interessante acessar o customer service e apontar


os dois servidores, para que registre-se e não haja indisponibilidade.

Zone Awareness

Os vários microsserviços podem estar distribuídos geograficamente, como é o caso da


Amazon, com clouds dos EUA do Brasil, etc. Ao levantar o eureka, é possível fazer uma
definição de zona e dividi-las em zonas geográficas. Ao configurar a aplicação, ela saberá
em qual zona geográfica está e, uma vez que seja acionada, os usuários serão direcionados
para a zona mais próxima deles.
25m
ANOTAÇÕES

www.grancursosonline.com.br 18
DESENVOLVIMENTO DE SISTEMAS
Spring Cloud II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O eureka é o único serviço de descobertas de máquinas dentro da cloud. Uma cloud


possui centenas de diferentes serviços. Por isso, ter o eureka é interessante para que o ser-
viço não fique fora do ar.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 19
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DESENVOLVIMENTO WEB - SPRING BOOT

https://spring.io/projects/spring-boot

O Spring Boot é um framework para desenvolvimento de aplicações em Java. De maneira


mais geral, ele é usado para desenvolvimento de aplicações web, como site e e-commerce.
O Java possui um conjunto de especificações chamado Java EE (Enterprise Edition), recen-
temente alterado para Jakarta EE, o qual possibilita a criação de um site. No entanto, ele é
mais trabalhoso para desenvolver. Neste contexto, surgiu o Spring, que é mais simples; e,
depois o Spring Boot.
Pode-se afirmar que o Spring Boot é uma evolução do Spring, de modo que a ideia prin-
cipal é incorporar um servidor web dentro do próprio arquivo.

Obs.: stand-alone é a aplicação que roda sozinha.


5m

• Spring Boot é um projeto que é construído sobre o Spring Framework;


• Spring Boot é um módulo Spring que fornece o recurso RAD (Rapid Application Deve-
lopment) para o framework Spring;
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Ele fornece uma maneira mais fácil e rápida de configurar e executar aplicativos sim-
ples e baseados na web;
• Ele é usado para criar um aplicativo independente baseado em Spring que se pode
simplesmente executar com configuração mínima do Spring;
• Ele é “opinativo”, pois induz a um determinado modelo a ser desenvolvido.

O XML é mais trabalhoso, por isso tem sido rejeitado.

STS – Spring Tools Suite

O Spring Boot engloba características do Spring.

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

https://start.spring.io/

Características
10m

• A abordagem de injeção de dependência é usada no Spring Boot;


• Ele contém recursos poderosos de gerenciamento de transações de banco de dados
→ @transaction
• Ele simplifica a integração com outros frameworks Java como JPA/Hibernate ORM, etc.;
• Reduz o custo e o tempo de desenvolvimento do aplicativo;
• Juntamente com o Spring Boot Framework, muitos outros projetos irmãos do Spring
ajudam a criar aplicativos que atendem às necessidades modernas de negócios.

Projetos Relacionados

• Spring Data: Simplifica o acesso aos dados dos bancos de dados relacionais e NoSQL;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Spring Batch: Fornece processamento em lote poderoso;


• Spring Security: É um framework de segurança que fornece segurança robusta para
aplicações → realiza autenticação/autorização e é um dos mais utilizados;
• Spring Social: Suporta integração com redes sociais como LinkedIn;
• Spring Integration: É uma implementação de Enterprise Integration Patterns → padrões
de mensagem, de estruturação, de aplicação.

Vantagens

• Criação de aplicativos Spring independentes que podem ser iniciados usando Java -jar;
• Teste de aplicativos da web facilmente com a ajuda de diferentes servidores HTTP
incorporados, como Tomcat, Jetty, etc;
• Não é necessário implantar arquivos WAR (Web Archives);
• Fornece POMs ‘iniciais’ opinativos para simplificar nossa configuração Maven;
• Fornece recursos prontos para produção, como métricas, verificações de integridade
e configuração externa;
• Não há necessidade de configuração XML;
• Oferece uma ferramenta CLI para desenvolver e testar o aplicativo Spring Boot;
• Minimiza a gravação de vários códigos repetitivos (o código que deve ser incluído em
muitos lugares com pouca ou nenhuma alteração), configuração XML e anotações;
• Aumenta a produtividade e reduz o tempo de desenvolvimento.

Objetivos

• O principal objetivo do Spring Boot é reduzir o tempo de desenvolvimento, teste de


unidade e teste de integração → é pragmático;
• Fornecer abordagem de desenvolvimento opinativo;
• Evitar definir mais configuração de anotação;
• Evitar escrever muitas instruções de importação;
• Evitar a configuração XML.

Recursos

• Desenvolvimento web (o mais utilizado);


ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• SpringApplication;
15m
• Events e Listeners do aplicativo;
• Recursos administrativos;
• Configuração externalizada;
• Arquivos de propriedades;
• Suporte YAML;
• Configuração com segurança de tipos;
• Logging;
• Segurança.

SpringApplication

Trata-se de uma classe que fornece uma maneira conveniente de inicializar o projeto,
sendo possível usar o método main (principalmente por ter sido iniciado como Java -jar).
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Events e Listeners

@Component → componente gerenciado pelo Spring

@Autowired → será injetado automaticamente

É possível adicionar também um componente que ouvirá as mensagens.


ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Em resumo, cria-se um evento, que será publicado por alguém e poderá ser ouvido em
qualquer outro lugar da publicação.

Recursos administrativos

Os recursos administrativos podem ser ativados como uma forma de verificação, uma
vez que o servidor é embutido.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Configuração externalizada
20m

O Config Server pode ser usado de forma que a aplicação lerá as propriedades do servi-
dor de configuração.

Isso evita a exposição de vários dados, como senhas.

Arquivos de propriedades

#configuring application name


spring.application.name = demoApplication
#configuring port
server.port = 8081
O arquivo centraliza as configurações, dando possibilidade de nomear a aplicação, indi-
car a porta do servidor, entre outros.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Suporte YAML

Logging
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Segurança

No geral, configura-se a autenticação e a autorização, sendo possível colocar um filtro


de segurança e indicar acesso para determinadas URLs. Essa verificação ocorre antes de o
usuário chegar à aplicação.

DIRETO DO CONCURSO
1. (FUNCAB/PRODAM-AM/PROGRAMADOR/2014) O projeto Spring que tem como um
dos objetivos facilitar a criação de aplicações stand-alone é chamado:
a. Spring Separate
b. Spring Isolate
c. SpringApp
d. Spring Boot
e. Spring AWT
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
O principal objetivo do Spring Boot é reduzir o tempo de desenvolvimento, teste de unidade
e teste de integração.

2. (FCC/TRF - 5ª REGIÃO/ANALISTA JUDICIÁRIO/2017) Uma das principais vantagens


do Spring Boot é fornecer
a. a configuração básica necessária para configurar a aplicação com base nos fra-
meworks disponíveis no CLASSPATH.
25m
b. uma maneira desacoplada de desenvolver aplicativos web com conceitos como Dis-
patcher Servlet, ModelAndView e View Resolver.
c. uma maneira de automatizar a criação dos repositórios de dados (DAOs) uti-
lizando JPA.
d. a configuração básica para o desenvolvimento orientado por eventos, onde listeners
são carregados quando a aplicação é iniciada.
e. um meio para iniciar recursos sob demanda durante o processo de execução da apli-
cação, porém, necessita de custosa configuração adicional utilizando XML.

COMENTÁRIO
a. a configuração básica necessária para configurar a aplicação com base nos frameworks
disponíveis no CLASSPATH (local onde são disponibilizadas as bibliotecas).
b. uma maneira desacoplada de desenvolver aplicativos web com conceitos como Dispat-
cher Servlet, ModelAndView e View Resolver → Spring
c. uma maneira de automatizar a criação dos repositórios de dados (DAOs) utilizando JPA
→ Spring Data.
d. a configuração básica para o desenvolvimento orientado por eventos, onde listeners são
carregados quando a aplicação é iniciada → não é a principal.
e. Spring Boot não tem configurações pesadas de XML.
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Desenvolvimento WEB - Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. d
2. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

SPRING BOOT

DESENVOLVIMENTO WEB SPRING BOOT

O frame para desenvolvimento java, é baseado no spring, embute o servidor, tem uma
série de configurações default no corpo dele para então, simplificar o desenvolvimento.O
objetivo dele é simplificar o desenvolvimento. O spring boot é um conjunto do spring, utilizado
para criar aplicativos. Segue uma arquitetura de camadas. Cada camada vai se comunicar
com a camada abaixo.

Primeira camada: a camada de apresentação (Presentation Layer). Que pegarão no início


da requisição. Logo, no primeiro momento, vai chegar aqui a autenticação, por exemplo, a
autenticação. Vai converter as entradas, se tiver trabalhando com objetos, fazer todo o pro-
cessamento e enviar esses dados para a camada de negócios (Business Layer). Na camada
de negócios (Business Layer) é onde haverá a lógica de negócios, selecionando cada cadas-
tramento que pode ser feito, as validações (campo obrigatório e opcional) e a autorização
(verifica-se se há acesso). Tratando toda a parte lógica de negócios.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Classe de serviço, autenticação e validação. Em seguida, vem uma camada de persistên-


cia ( Persistence Layer), que vai fazer a comunicação com o banco de dados, onde tem-se
o spring data. O spring data permite uma fácil integração, com Rai bernet para que se faça
depois a persistência para a camada de negócios para o banco de dados.

A primeira coisa que acontece, no navegador digita-se um endereço, dá Enter e realiza-


-se uma requisição, que chegará no Controller, que vai identificar qual é a camada de serviço
que vai atender ao pedido, procurando os componentes verificando qual url está mapeado.
A camada de serviço, por sua vez, vai se comunicar com a camada de modelo, para fazer a
comunicação com o banco de dados.
5m
O spring data aparece, através da especificação JPA que comunica com o banco de
dados. E nesse meio termo ocorre a injeção de dependências, onde vai ocorrer um proces-
samento e fluxo da informação. O spring é categorizado como um frêmito de controle de
frente. As requisições chegam no controller que vai decidir. Depois página JSP – HTML e em
seguida, devolvida para o usuário.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Para desenvolver Spring Boot é preciso: versão do Java compatível, mais comum 11, tem
1.8,17 e 18. Além do Java é necessário o MVN - V (“maiver”), versão 3.5.4. já vem embutido
no spring tools. Cria-se um arquivo pom.xml descritor padrão que descreve as
características básicas de um projeto.

Configura-se um parent, que vai facilitar algumas questões de configuração. Fazendo a


configuração básica apresentada, já caracteriza um projeto compilado, mesmo não tendo
nenhum arquivo, mas é necessário colocar alguns códigos para o tornar interessante. É pre-
ciso instalar algumas dependências no Classpath.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O spring boot tem várias dependências (starter), que permite adicionar jar no classpath.
Nas dependências pode-se colocar outros starters. Starter-Web traz uma série de configura-
ções e dependências para se executar como uma aplicação web.

Executando será apresentado várias dependências. Colocando uma dependência um


pacote de outras acompanha e também são descritas, pois estão agrupadas. Starter – grupo
de dependências.
10m
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O starter patent vai facilitar que já coloca a versão correta.

Nesse caso trata-se de uma aplicação com apenas uma classe. A aplicação rest é muito
comum hoje em dia em spring, vai desenvolver uma aplicação sem front end. Mapeia url. @
RestController – anotação de estereótipo, fornece várias dicas para leitura do código e para o
spring que a classe representa. A requisição do cliente vai chegar no controller, que vai definir
qual o mapeamento de url e fará o retorno, conteúdo. No JSF cria-se as pastas x-html e apon-
ta-se diretamente para essas páginas. No spring o código java que vai receber. Tem que colo-
car o mesmo nome da aplicação a ser executada. O Servidor será inicializado, por default
será embutido um servidor tomcat. Pode-se usar argumentos na linha de comando também.
15m
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O spring boot já tem um comando vinculado ao maven, o aplicativo só com a classe java
já consegue executar o projeto. Acessa-se a pasta do projeto e executa-se o comando spring
boot run, esse comando faz a compilação/execução.

Uma das coisas que faz o spring boot se destacar é a capacidade de criar java executá-
vel, independente de servidor.

Jar em geral é um arquivo que contém uma biblioteca, mas no caso do spring boot, as
dependências ficam dentro desse jar, e um servidor tomcat, um arquivo zip basicamente.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (2018/CPCON/UEPB - ANALISTA DE SISTEMAS) Sobre as características não fun-
cionais do Spring Boot, julgue os itens a seguir:
I – A funcionalidade spring-boot-starter-actuator serve para funcionalidades avança-
das tais como monitoramento e rastreamento para aplicações em configuração fora
da caixa.
20m
II – As funcionalidades spring-boot-starter-undertow, spring-boot-starter-jetty, spring-
-boot-starter-tomcat servem para escolher sua opção específica de Embedded Servlet
Container.
III – A funcionalidade spring-boot-starter-logging serve para logging usando o Logback.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Está o que se afirma em:


a. II e III apenas.
b. I, II e III
c. III apenas.
d. I e III apenas.
e. I apenas.

Características funcionais são recursos tradicionais e as não funcionais são as gerenciais.

Permite embutidas ou customizadas que permite monitorar e gerenciar a aplicação/sessões.

Muitas aplicações incluem servidores embutidos, o spring boot inclui o tomcat com depen-
dência, pode usar o jetty e o undertow.

O spring boot não tem uma mandatória de log, exceto pelo dialoguem Piai, que é tipica-
mente promovida pelo spring framework, pelo módulo para usar o logback é preciso incluir
o spring-jc1. A maneira mais simples de fazer isso é depender do spring-boot-starter-logging
(que utiliza o logback). Para uma aplicação web é preciso o spring-boot-starter-web uma vez
que ele depende transitivamente do logging starter.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Spring Boot
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DJANGO

O Django é um framework para desenvolvimento de aplicações. Roda ao lado de servi-


dor. Tem como linguagem de programação o python. É um dos principais frameworks para
desenvolvimento de aplicações wem em python.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Seu propósito é tornar mais fácil construir aplicações web, de forma mais rápida e com
menos código.
É um framework de alto nível.
A linguagem é a python.
Foi feito para desenvolver web, de forma rápida.
Permite que muitas das dificuldades de desenvolvimento sejam retiradas.
Tem foco na performance, na velocidade.
Tem foco na parte de segurança.
Permite a escala da aplicação.
Em geral, o Django é usado para desenvolvimento de aplicações rápidas.
É um framework de altíssima qualidade.
https://www.djangoproject.com
O Django foi desenvolvido em ambiente acelerado, e foi projetado para facilitar.
O Django já vem com o mapeador objeto relacional, com um ORM embutido. Na maioria
dos frameworks, se quiser colocar relacionamento automático, é preciso instalar uma biblio-
teca adicional. O Django já vem com isso.
ORM: é uma biblioteca que permite a definição das entidades, em termos da linguagem
de programação subjacente. Ele cria e atualiza o banco de dados.
Desenhe seu modelo:
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Dentro da pasta “meu site”, tem um arquivo chamado “models”.


Ele define estruturas que serão usadas no banco de dados.
Comprimento máximo de 70 caracteres.
Define um artigo.
5m

Faz relacionamentos

Foreignkey entre o repórter e o artigo.


Se deletar o reporter, deleta os artigos, em cascata.
Instalação do Modelo:

Ele vem com ferramenta de migrations também. É uma ferramenta que permite evoluir o
banco de dados. Consegue dar updates nas estruturas de tabela.
O makemigrations cria as migrações de tabelas que ainda não existem.
Migrate: esse comando faz a alteração nas tabelas dos bancos de dados.
Utilização da API:

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Importar os modelos;
Lista as entidades que estão lá;
A partir da definição de modelo, cria a tabela dos bancos de dados, faz o SQL, permite
comandos de alto nível (por exemplo, listar todos os reporteres).
Salvar no banco de dados.
Id; sincroniza o modelo

Pode pegar pelo ID-1, pelo nome completo, procura no SQL (gera no SQL).
.save: salva o artigo
10m
r.article_set.all: ele é uma relação de um para muitos. Um reporter tem um conjunto
de artigos.
É possível filtrar os artigos em que o nome do reporter começa com John.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Interface Dinâmica:
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Só criamos o modelo, como ele já vem com ORM pronto, ele vai criar toda a api, todas as
operações de SQL já vêm prontas.

Importa tudo do models

Uma vez que o modelo está definido, o Django pode criar, automaticamente, a interface
para fazer a edição. As interfaces mais “bobas” serão automaticamente criadas.

Interface criada automaticamente

Ele consegue criar uma interface complexa.


ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Crie as URLs:

/articles/2005/05/39323/” ->.news.views.article_detail(request, year=2005, month=5, pk=39323)


Um site terá um conjunto de URLs.
Nesse caso, a view não é gerada automaticamente.
É preciso criar um padrão de URL
O JAVA tem conceitos parecidos, nesse ponto.
Essa URL é definida em valores estáticos e dinâmicos: ano, ano e mês ou ano, mês e pk.
São 3 padrões que podem dar match, para cada um deles tem uma função diferente.
15m
/articles/2005/05/39323/” ->.news.views.article_detail(request, year=2005, month=5, pk=39323)
Escreva suas Views:
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Ano do arquivo da solicitação

Dentro de views, request (requisição) e recebe o ano.


Data de publicação.
Contexto – passando o ano e a lista. Esse contexto serve para a renderização da view.
Crie seus Templates:

Esse arquivo é um arquivo de template, numa linguagem especial que o próprio django utiliza.
Essa sintaxe lembra o JSP.
Esse padrão tem linguagem de template base.
Ele determina os blocos.
O primeiro bloco é o título.
O “context” tem uma variável chamada “year”. Quando ele renderizar, ele tem acesso a
variáveis. Year, por exemplo, é a variável, que veio na URL.

Block content: bloco de conteúdo

Ele faz uma sintaxe para repetição, para cada artigo em article list. Dentro do contexto
tem o article list, que está associado à variável a_list.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Para cada artigo que estiver na lista, ele vai colocar um elemento desses.
20m

DIRETO DO CONCURSO
1. (2017/IF-PE/Técnico de laboratório – Informática para Internet) No que diz respeito ao
Django (framework), analise as proposições a seguir:

I – É possível definir seus modelos de dados com classes em Python, porém não pode-
mos gerar automaticamente o SQL correspondente e executá-lo no banco de dados
a ser utilizado.
II – O Django necessita de ferramentas auxiliares para realizar a administração, só assim
é possível atualizar o conteúdo do seu sistema.
III – Com o Django é possível projetar URLs sem nenhuma limitação estrutural.
IV – O Django contém um sistema de templates que separa o html do código em Python.
V – O framework tem suporte a aplicações multilinguagem.

Estão CORRETAS as proposições


a. I, II e IV.
b. III, IV e V.
c. I, IV e V.
d. II, III e V.
e. I, II e III.

COMENTÁRIO
I – Ele gera o SQL automaticamente (pelo ORM)
II – referência à página admin. Não precisa de ferramentas adicionais
III – é possível
IV – sim, ele separa o código html do código python.
V – tradução, multilinguagem. Tem esse suporte.
No histórico de questões, existem poucas questões sobre Django.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Django
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (2019/IF Sul Rio-Grandense/Analista de Tecnologia da Informação) Sobre o framework


Django, avalie as afirmações que seguem:

I – É possível definir seus modelos de dados com classes em Python, porém não pode-
mos gerar automaticamente o SQL correspondente e executá-lo no banco de dados
a ser utilizado.
II – O único banco de dados que o Django suporta é o SQLite, que vem incluído no Python.
III – O Django contém um sistema de templates que busca separar o html do código em Python.
IV – O framework tem suporte à internacionalização.

Estão corretas apenas as afirmativas


a. I, II e IV.
b. II e III.
c. I e IV.
d. III e IV.

COMENTÁRIO
I – pode gerar SQL
II – o DJANGO suporta vários bancos de dados
25m

DJANGO:

• É um framework de backend;
• Linguagem python;
• É pragmático;
• Vem com ferramentas de ORM;
• Permite criar URLs dinâmicas;
• Separa o código python do html.

GABARITO
1. b
2. d

�Este material foi elaborado pela equipe pedagógica do Gran Concursos, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

NODE.JS

BIBLIOGRAFIA

Livro:

Site:
http://nodejs.org/en/docs/
O site tem um conteúdo resumido sobre essa tecnologia.
Ambos estão disponíveis originalmente apenas em inglês.

INTRODUÇÃO

O Node.js é uma tecnologia do lado do servidor baseada no mecanismo JavaScript V8


do Google Chrome.
5m
É um sistema altamente escalável que usa E/S (entrada/saída) assíncrona e orientada a
eventos, em vez de encadeamentos ou processos separados. O Node.js não é apenas uma
troca de linguagem. Há uma mudança de paradigma envolvida.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É ideal para aplicativos da Web que são acessados com frequência, mas são computa-
cionalmente simples, como as redes sociais.
Vem para dar a possibilidade de o JavaScript ser usado ao lado do servidor.

THREADS

Se você estiver usando um servidor da Web tradicional, como o Apache, sempre que um
recurso da Web for solicitado, o Apache criará um thread separado ou chamará um novo pro-
cesso para manipular a solicitação.
Mesmo que o Apache responda rapidamente às solicitações e limpe a memória após a
solicitação ter sido atendida, essa abordagem ainda pode consumir muitos recursos.
Um aplicativo Web popular (que pode ter milhões de acessos) poderá ter sérios proble-
mas de desempenho, pois as threads podem ir se abrindo, gerando um gasto computacional.
O Node, por outro lado, não cria uma nova thread ou processo para cada solicitação.
Em vez disso, ele ouve eventos específicos e, quando o evento acontece, responde
de acordo.
O Node não bloqueia nenhuma outra solicitação enquanto aguarda a conclusão da fun-
cionalidade do evento, e os eventos são tratados em um loop de eventos relativamente sim-
ples: o primeiro a chegar será o primeiro a ser servido. Tem solução diferente dos outros
servidores. Em vez de trabalhar com várias threads, ele trabalha com uma thread, que vai se
conectar com o cliente e fazer a requisição para o banco de dados de forma assíncrona e não
blocante, pois a thread continua sem esperar o banco de dados responder.
10m

JAVASCRIPT

Aplicativos Node são criados com JavaScript (ou uma linguagem alternativa que compila
para JavaScript). O Node só funciona com o JS.
O JavaScript é o mesmo que você usaria nos aplicativos do lado do cliente. No entanto, ao
contrário do JavaScript em um navegador, com o Node você precisa configurar um ambiente
de desenvolvimento.
O Node pode ser instalado em um ambiente Unix/Linux, MacOS ou Windows. A versão
que roda em Linux é uma adaptação.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

OLÁ MUNDO

É um código de aplicação web. Será levantada uma aplicação web que, quando for conec-
tada com um cliente em uma determinada, irá responder “olá mundo”.

// olamundo.js
// carrega o módulo http
var http = require(“http”);
// cria o servidor http
http
.createServer(function(req, res) {
// cabecalho do conteúdo
15m
res.writeHead(200, { “content-type”: “text/plain” });
// escreve mensagem e sinaliza que a comunicação está completa.
res.end (“Ola mundo!\n”);
})
.listen(8124);
console.log(“Servidor rodando na porta 8124”);

Note que em apenas 9 linhas de código é possível levantar um servidor web servindo
requisições.

C:\NodeJS> node olamundo.js


Servidor rodando na porta 8124
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Olá Mundo: Linha a linha

• var http = require (‘http’);

A maioria das funcionalidades do Node é fornecida por meio de aplicativos e bibliotecas


externas chamadas módulos. É similar ao import do JavaScript.
Esta linha de JavaScript carrega o módulo HTTP, atribuindo-o a uma variável local.
O módulo HTTP fornece funcionalidade HTTP básica, permitindo acesso à rede pelo
aplicativo.

• http.createServer (function (req, res) {...

Nesta linha de código, um novo servidor é criado com createServer e uma função anô-
nima é passada como o parâmetro para a chamada de função.
Essa função anônima é a função requestListener e possui dois parâmetros: uma solicita-
ção do servidor (http.Server Request; na linha de código, “req”) e uma resposta do servidor
(http.ServerResponse; na linha de código, “res”).
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Dentro da função anônima, temos a seguinte linha:

• res.writeHead(200, {‘content-Type’: ‘text/plain’});

O objeto http.ServerResponse possui um método, writeHead, que envia um cabeçalho


de resposta com o código de status da resposta (200), além de fornecer o tipo de conteúdo
da resposta.
Você também pode incluir outras informações de cabeçalho de resposta no objeto de
cabeçalho, como tamanho do conteúdo ou conexão.
Após o código para criar o cabeçalho vem o comando para escrever a mensagem
“Ola Mundo!”:

• res.end("Ola Mundo!\n");

O método http.ServerResponse.end indica que a comunicação foi concluída; todos os


cabeçalhos e o corpo da resposta foram enviados. Esse método deve ser usado com todos
os objetos http.ServerResponse.
O método final tem dois parâmetros: um trecho de dados, que pode ser uma string ou um
buffer; se trecho de dados for uma string, o segundo parâmetro especifica a codificação (utf8
é o padrão).
20m
A função anônima e a função createServer são ambas terminadas na próxima linha
do código:

• }).listen(8124);

O método http.Server.listen encadeado no final do método createServer ouve as cone-


xões de entrada em uma determinada porta – nesse caso, a porta 8124.
Os parâmetros opcionais são um nome de host e um callback de chamada.
O método listen é assíncrono, o que significa que o aplicativo não bloqueia a execução
do programa, esperando que a conexão seja estabelecida.
Seja qual for o código que segue a chamada de listen é processado, e o callback de
listen é invocado quando o evento de listen é disparado – quando a conexão com a porta é
estabelecida.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A última linha de código é:

• console.log (“Servidor rodando na porta 8124”);

O objeto console é um dos objetos do mundo do navegador que é incorporado ao Node.

FUNÇÕES ASSÍNCRONAS E O LOOP DE EVENTOS DO NODE.JS

O design fundamental por trás do Node é que um aplicativo é executado em uma única
thread (ou processo) e todos os eventos são tratados de forma assíncrona. Assincronismo
é a chave do node.
Considere como o servidor da Web típico, como o Apache funciona.
O Apache tem duas abordagens diferentes para lidar com as solicitações recebidas.
A primeira é atribuir cada solicitação a um processo separado até que a solicitação seja
satisfeita; o segundo é gerar um thread separado para cada solicitação.
A primeira abordagem pode criar quantos processos filhos forem especificados em um
arquivo de configuração do Apache.
A vantagem de criar um processo separado é que os aplicativos acessados por meio da
solicitação, como um aplicativo PHP, não precisam ser thread-safe (para não ter problemas
de concorrência de programação).
A desvantagem é que cada processo consome muita memória e não é muito escalável.
A segunda abordagem implementa uma abordagem híbrida de processamento de
processos.
Cada solicitação recebida é manipulada por meio de uma nova thread.
É mais eficiente do ponto de vista da memória, mas também exige que todos os aplicati-
vos sejam “thread safe”.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

25m

O node faz as coisas de maneira diferente. Quando se inicia um aplicativo Node, ele é
criado em um único thread de execução. Ele fica esperando que um aplicativo apareça e faça
um pedido. Quando o Node recebe uma solicitação, nenhuma outra solicitação pode ser pro-
cessada até que ela termine de processar o código da atual.
Pode-se pensar que isso não parece muito eficiente e não seria possível, exceto por
uma coisa: o Node opera de maneira assíncrona, por meio de um loop de eventos e funções
de callback.
Um loop de eventos nada mais é do que funcionalidade que basicamente pesquisa even-
tos específicos e invoca manipuladores de eventos no momento apropriado. No Node, uma
função de callback é esse manipulador de eventos.
Ao contrário de outros aplicativos single thread, quando se faz uma solicitação a um
aplicativo Node e ele deve fazer alguma solicitação de recursos (como uma solicitação de
banco de dados ou acesso a arquivos), o Node inicia a solicitação, mas não espera até que o
pedido receba uma resposta. Em vez disso, ele anexa um callback de chamada à solicitação.
Quando tudo o que foi solicitado está pronto (ou concluído), um evento é emitido, acionando
o callback associado para fazer algo com os resultados da ação solicitada ou com os recur-
sos solicitados.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se cinco pessoas acessarem um aplicativo Node ao mesmo tempo e o aplicativo precisar


acessar um recurso de um arquivo, o Node anexará um callback de chamada a um evento
de resposta para cada solicitação.
À medida que o recurso se torna disponível para cada um, callback é chamado e um
pedido de cada pessoa é satisfeito por vez.
Enquanto isso, o aplicativo Node pode estar lidando com outras solicitações, seja para os
mesmos aplicativos ou para um aplicativo diferente.

O processamento de CPU não pode ser muito intensivo para esses programas, porque
pode travar o loop de eventos. Se isso acontecer, ninguém será mais atendido, já que só é
executado um loop por vez.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

NODE.JS II

RELEMBRANDO
As maioria das operações, sendo principalmente rede, consulta a banco de dados ou leitura
de arquivo, no NODE.JS são realizadas de formas assíncronas.

LENDO UM ARQUIVO DE FORMA ASSÍNCRONA

• Um novo módulo, File System (fs), é usado neste exemplo. O módulo File System
envolve a funcionalidade padrão do arquivo POSIX, incluindo a abertura e o acesso ao
conteúdo de um arquivo;
– POSIX é um padrão de sistema operacional, utilizado pelo Linux e MAC OS. O
Windowns não é exatamente nesse padrão, todavia, o NODE.JS funciona
nesse sistema.

• O método usado é readFile. Neste exemplo, é passado o nome do arquivo para abrir,
5m
a codificação e uma função anônima;
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– “utf8”: a codificação está relacionada ao padrão de acentuação do arquivo,


principalmente para os caracteres latinos.

• As duas ocorrências de comportamento assíncrono são o callback anexado ao método


readFile e o callback anexado ao método listen;
– O callback pode ser encontrado a partir da palavra “function”. O callback é uma
função que irá ser executada no futuro.

• O método listen informa ao objeto do servidor HTTP para começar a escutar conexões
na porta especificada;
– listen (8124, function () {

• O Node não bloqueia, esperando que a conexão seja estabelecida. Portanto,


se precisarmos fazer algo assim que a conexão for estabelecida, forneceremos
um callback;
– O servidor listen (8124, function () { irá executar a linha de código console.log
(“Servidor rodando na porta 8124”) até mesmo antes de (“Servidor rodando na
porta 8124”).

• Quando a conexão é estabelecida, um evento de listen é emitido, que então invoca o


callback, enviando uma mensagem para o console;
– Esses eventos ocorrem quando ocorre a conexão de um banco de dados, numa
leitura de arquivo e quando levantamos o servidor.

• A segunda instância de callback mais importante é aquela anexada ao readFile;


– Ou seja, o callback que irá receber a leitura do arquivo.

• Acessar um arquivo é uma operação demorada, relativamente falando, e um aplicativo


single thread acessado por vários clientes que bloqueiam o acesso a arquivos logo fica
parado e inutilizável;
– Podem ocorrer muitas threads paradas no sistema, esperando pela leitura do arquivo,
o que pode gerar a lentidão. O NODE.JS possui uma thread apenas, e a medida que
os arquivos são lidos, eles são devolvidos ao callback, que o torna o programa mais
performático.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Em vez disso, o arquivo é aberto e o conteúdo é lido de forma assíncrona. Somente


quando o conteúdo foi lido no buffer de dados – ou ocorre um erro durante o processo
– o callback é passada para o método readFile chamado;
• É passado o erro (se houver) ou os dados, se nenhum erro ocorrer;
10m
• No callback, o erro é verificado e, se não houver erro, os dados são gravados na
resposta de volta ao cliente.

VANTAGENS DO NODE

• Em Node nem todas as chamadas de função são assíncronas;


– Isto é, não é obrigatório trabalhar de forma assíncrona.

• Alguns objetos podem fornecer versões síncronas e assíncronas da mesma função;

• No entanto, o Node funciona melhor quando você usa codificação assíncrona o


máximo possível.
– Muitas vezes, o indivíduo pode ser mais acostumado com o readFile síncrono,
todavia, ao enviar isso para a produção, pode ficar muito pior do que outro sistema
que fosse síncrono. No caso do NODE, como só possui uma thread, cada vez que é
feita uma operação síncrona, a thread irá parar e esperar pelo final da operação, o
que pode gerar uma performance lenta.

O loop de eventos do Node e os callbacks têm dois benefícios principais:


• Primeiramente, o aplicativo pode ser escalado com mais facilidade, já que uma única
thread de execução não tem uma enorme sobrecarga. Para criar um aplicativo PHP
similar ao aplicativo Node no exemplo, o usuário veria a mesma página – mas o sistema
definitivamente notaria a diferença;
– No aplicativo PHP, com a conexão de vários clientes, seriam levantadas muitas
threads para permitir a conexão simultânea dos usuários, logo, o sistema ficaria
sobrecarregado.
– No entanto, uma thread irá rodar em somente um núcleo do processador, hoje, os
processadores possuem vários núcleos. Assim, são levantadas várias instancias da
mesma aplicação para a utilização dos núcleos.
15m
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Executando o aplicativo PHP no Apache, cada vez que o aplicativo fosse solicitado,
ele teria que ser tratado em um processo filho separado. É possível que, só poderão
ser executados, no máximo, algumas centenas de processos filhos em paralelo.
Mais do que esse número de solicitações significa que um cliente precisa aguardar
uma resposta;
– Como já dito, o PHP pode atingir o máximo do sistema e apresentar problemas de
usabilidade.

• Um segundo benefício do Node é economia do uso de recursos, mas sem precisar


recorrer ao desenvolvimento multithread;
• Em outras palavras, não é necessário criar um aplicativo thread-safe, o que simplifica
bastante o desenvolvimento;
– Por exemplo, uma lista simples, em que são inseridos e excluídos elementos. No
aplicativo multithread, um usuário incluiu o recurso e o outro realiza a exclusão de
outro recurso, dessa forma, ocorre uma condição de corrida no software. Dependendo
da ordem que as threads executarem, o resultado pode ser distinto. Com isso, podem
ser gerados bugs complexos.
– Com o NODE, como só possui uma thread, o código será executado somente por
um cliente por vez, sem a concorrência, tornando a programação mais simples.

• No entanto, também não se está desenvolvendo aplicativos JavaScript para usuários


únicos a serem executados no navegador;
• Além disso, as variáveis globais são extremamente perigosas no Node, assim como o
esquecimento da palavra-chave var;
• Ao desenvolver em Node, deve-se certificar de nunca bloquear a thread principal, uma
vez que o sistema é executado em apenas uma única thread, o bloqueio da mesma
tornará o sistema todo irresponsivo.
– O JavaScript é uma linguagem que permite algumas funções até mesmo perigosas,
não validando de forma estáticas os tipos. Isso pode tornar a programação mais
arriscada. Em linguagem estaticamente tipadas, é mais simples, pois o compilador
realiza indicações.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GLOBAL

• Existem vários objetos disponíveis para todos os aplicativos do Node sem que o
usuário tenha que incorporar qualquer módulo. O Node agrupa esses itens sob o rótulo
descritivo de globais.
• São exemplos: 'console' e 'require'.
20m

• 'global' é o objeto de namespace global. De certa forma, é semelhante ao 'window' em


um ambiente de navegador, pois fornece acesso a propriedades e métodos globais
e não precisa ser explicitamente referenciado pelo nome, porém existem algumas
diferenças importantes;
– No trabalho do JavaScript ao lado do browser, ao não declarar uma variável, ela
irá para o escopo global, e poderá ser utilizada para todos os módulos. Isso foi
percebido como um problema, e o NODE melhora esse aspecto, apesar de ainda
possuir algumas variáveis globais.

• Se você definir uma variável global no JavaScript do lado do cliente, ela poderá ser
acessada pela página da Web e por todas as bibliotecas;
• No entanto, se você criar uma variável no escopo de nível superior em um módulo
Node (uma variável fora de uma função), ela se tornará global apenas para o módulo,
não para todos os módulos.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O trabalho com JavaScript no browser e no Node possui algumas semelhanças, como a


linguagem, porém o ambiente é outro. No Node, por exemplo, as regras das variáveis globais
e importações de arquivos são diferentes.

PROCESS

• Cada aplicativo Node é uma instância de um objeto de processo Node e, como tal, vem
com certas funcionalidades internas. Muitos dos métodos e propriedades do objeto de
processo fornecem identificação ou informações sobre o aplicativo e seu ambiente;
– No browser, existem alguns objetos que são comuns, já no Node, existem outros
objetos que são globais. Por exemplo, há um elemento chamado Process, que
fornecerá informações sobre aplicativo executado.

• O método process.execPath retorna o caminho de execução para o aplicativo Node;


process.version fornece a versão do Node; e process.platform identifica a plataforma
do servidor:
25m
– console.log (process.execPath);
– console.log (process.version);
– console.log (process.platform);

• Este código retorna algo como:


/usr/local/bin/node
v0.6.9
linux

BUFFER

• A classe Buffer, também um objeto global, é uma maneira de manipular dados


binários no Node.
• Um novo buffer pode ser criado da seguinte forma: var buf = new Buffer (string);
• Se o buffer contiver uma string, pode-se passar um segundo parâmetro opcional com
a codificação.
– O buffer será uma área de memória para se guardar dados, muitas vezes, de forma
temporária.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

TEMPORIZADORES: SETTIMEOUT, CLEARTIMEOUT, SETINTERVAL, E


CLEARINTERVAL

O setTimeout para retardar a execução de uma rotina, enquanto o setInterval é para a


execução repetidamente um certo bloco de códigos. Ambos retornam um referência que
pode ser cancelada. Pode-se desistir de um setTimeout atráves do clearTimeout, ao passo
que o setInterval pode ser cancelado pelo clearInterval.
• As funções do timer no JavaScript do lado do cliente fazem parte do objeto global Window;
• Elas não fazem parte do JavaScript, mas se tornaram uma parte tão onipresente do
desenvolvimento do JavaScript que os desenvolvedores do Node os incorporaram na
API principal do Node;
• As funções do timer operam no Node da mesma forma que operam no navegador. Na
verdade, eles operam no Node exatamente da mesma forma que no Chrome, já que o
Node é baseado no mecanismo JavaScript V8 do Chrome;
– Como é utilizado o V8 no Node, será o mesmo do Chrome. Inclusive, é possível
descobrir qual versão do V8 estará no Node. Em geral, não é a última versão,
somente após alguns meses que a mais recente é incorporada ao Node.

• A função setTimeout do Node usa um callback como primeiro parâmetro, o tempo


de atraso (em milissegundos) como segundo parâmetro e uma lista opcional de
argumentos:
– setTimeout(openAndReadFile, 2000, filename, res);
– // A função openAndReadFile será chamada após aproximadamente
2 segundos com os parâmetros filename e res
– Em ambientes assíncronos, ao lançar um evento para o futuro, pode ocorrer algumas
diferenças de milissegundos a mais.

• Não há garantia de que o callback será invocado em exatamente n milissegundos (seja


qual for n);
• Isso não é diferente do uso de setTimeout em um navegador;
• Não temos controle absoluto sobre o ambiente e os fatores podem atrasar o cronômetro;
• A função clearTimeout limpa um setTimeout predefinido;
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Se for necessário um temporizador de repetição, poderá ser utilizado setInterval para


chamar uma função a cada n milissegundos – sendo n o segundo parâmetro passado
para a função;
30m
• Para parar a repetição usa-se clearInterval.
– Quando se possui uma thread única no loop de eventos, ao fazer um setTimeout,
após x milissegundos, a função ficaria disponível para ser executada no loop de
eventos, todavia, ele pode estar ocupado. Assim, ele deve terminar a sua tarefa
primeiro e só então incorporar a função que foi liberada.
– Dessa forma, quanto mais ocupado o computador, mais irá atrasar. Ainda, se
tiver alguma operação síncrona, com bloqueio da thread principal, o atraso será
significativo.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

NODE.JS III

Servers, Streams e Sockets


É importante ter o conhecimento tanto em português, quanto inglês.
• Grande parte da API principal do Node tem a ver com a criação de serviços que escu-
tam tipos específicos de comunicações;
• Nos exemplos, usamos o módulo HTTP para criar um servidor da Web HTTP;
• Outros métodos podem criar um servidor TCP, um servidor TLS (Transport Layer Secu-
rity) e um soquete datagrama UDP (User Datagram Protocol);
• Um socket (soquete) é um terminal em uma comunicação e um socket de rede é um
terminal em uma comunicação entre aplicativos executados em dois computadores
diferentes na rede;
• Os dados fluem entre os socket no que é conhecido como fluxo (ou streams). Os
dados no fluxo podem ser transmitidos como dados binários em um buffer ou em
Unicode como uma string. Ambos os tipos de dados são transmitidos como pacotes:
partes dos dados são divididas em partes de tamanho específico.

O Node fornece suporte para uma ampla gama de operações de comunicação, tanto
TCP, HTTP, como TLS etc., sendo que surgiu para realizar comunicações na Web. Atual-
mente, seu uso é muito intenso para desktop de comando.

TCP Sockets e Servers


• Podemos criar um servidor e cliente TCP básico com o módulo Node Net;
5m
• O TCP forma a base para a maioria dos aplicativos da Internet, como serviço da Web
e email. Ele fornece uma maneira confiável de transmitir dados entre os soquetes do
cliente e do servidor.

A camada do TCP normalmente é a base, acima está o HTTP etc. Em geral, por simplici-
dade, se trabalha com o HTTP por estar numa camada mais superior. Todavia, aplicativos de
chat, por exemplo, utilizam TCP.
• A criação do servidor TCP é um pouco diferente da criação do servidor HTTP. Cria-
mos o servidor, passando uma função de retorno de chamada. O servidor TCP difere
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

do servidor HTTP, em vez de passar por um requestListener, o único argumento da


função de retorno de chamada TCP é uma instância de um soquete que atende cone-
xões de entrada;
• Depois que o soquete do servidor é criado, ele escuta dois eventos: quando os dados
são recebidos e quando o cliente fecha a conexão.

Assim, o servidor TCP é mais simples que o HTTP, fornecendo menos recursos.

Trata-se de uma conexão persistente, ou seja, irá perdurar, diferente do que ocorre no
HTTP, em que uma conexão é aberta, processada, e encerrada. No TCP ela ficará aberta por
mais tempo.

• Observe como um callback é anexado aos dois eventos por meio do método on;

• Muitos objetos no Node que emitem eventos fornecem uma maneira de anexar uma
função como ouvinte de evento usando o método on;
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Esse método usa o nome do evento como primeiro parâmetro e o ouvinte da função
como o segundo;
• O cliente TCP é tão simples de criar como o servidor.

Em regra, o servidor é quem aguarda as funções, ao passo que o cliente é aquele que
se conecta.
10m

• A chamada para o método setEncoding no cliente altera a codificação dos dados


recebidos;
• Os dados são transmitidos como um buffer, mas pode-se usar setEncoding para lê-lo
como uma string utf8;
• O método write do soquete é usado para transmitir os dados;
• Ele também anexa funções de ouvinte a dois eventos: dados (data), para dados rece-
bidos e fechamento, caso o servidor feche a conexão.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

“stdin” se refere à entrada a partir do teclado.


• Os dados que estão sendo transmitidos entre os dois soquetes são digitados no termi-
nal e transmitidos quando se pressiona Enter;
• O aplicativo cliente primeiro envia a string que foi digitada, que o servidor TCP grava
no console;
• O servidor repete a mensagem de volta para o cliente, que, por sua vez, grava a men-
sagem no console;
• O servidor também imprime o endereço IP e a porta do cliente usando as propriedades
remoteAddress e remotePort do soquete;
• A seguir está a saída do console para o servidor depois que várias strings foram envia-
das do cliente.

15m
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A conexão entre o cliente e o servidor é mantida até que se mate um ou outro


usando Ctrl-C.

O servidor realiza uma função de eco.

• Qualquer socket que ainda esteja aberto recebe um evento de fechamento que é
impresso no console;
• O servidor também pode servir mais de uma conexão de mais de um cliente, já que
todas as funções relevantes são assíncronas;
• O TCP é o mecanismo de transporte subjacente para grande parte das funcionalida-
des que usamos hoje na Internet, incluindo HTTP.

Por mais simples que seja, o TCP já suportaria uma série de conexões simultâneas, pois
tudo o que realiza é assíncrono.

HTTP

• Para o HTTP, servidores são criados utilizando o método createServer, passando a


função que atuará como requestListener. As solicitações são processadas de forma
assíncrona;
• Em uma rede, o TCP é a camada de transporte e o HTTP é a camada de aplicativo. Se
analisarmos os módulos incluídos no Node, veremos que, ao criar um servidor HTTP,
estamos herdando a funcionalidade do net.Server baseado em TCP;
• Para o servidor HTTP, o requestListener é um soquete, enquanto o objeto http.Server-
Request é um fluxo legível e o http.ServerResponse é um fluxo gravável;
• O HTTP adiciona outro nível de complexidade devido à codificação de transferência
em partes que ele suporta;
• A codificação de transferência em partes permite a transferência de dados quando o
tamanho exato da resposta não é conhecido até que seja totalmente processado;
• Em vez disso, um fragmento de tamanho zero é enviado para indicar o final de
uma consulta;
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Esse tipo de codificação é útil quando você está processando uma solicitação, como
uma saída de consulta de banco de dados grande para uma tabela HTML: a gravação
dos dados pode começar antes que o restante dos dados da consulta sejam recebidos.
20m

No TCP, para uma comunicação curta, era enviado um pacote de comunicação de uma
só vez para o cliente, sem uma forma padronizada para enviar partes. Já no HTTP, esse
envio de partes pode gerar uma resposta bem mais rápida para o cliente.

O protocolo HTTP é um pouco mais elaborado, com a transmissão em partes e a estru-


tura do cabeçalho, que pode trazer alguns dados adicionais para a conexão.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No dia a dia, não se escrevem tantos clientes HTTP, visto que já existe famoso: o brow-
ser, logo, o navegador é um cliente.

Streams
• O fluxo de comunicação entre os sockets, que vimos anteriormente, é uma implemen-
tação da interface da interface de fluxo abstrata (abstract stream interface);
• Os streams podem ser legíveis, graváveis ou ambos, e todos os fluxos são instâncias
do EventEmitter;
• Todos os fluxos de comunicação, incluindo process.stdin e process.stdout, são imple-
mentações da interface de fluxo abstrata;
• Devido a essa interface abstrata, todos os streams do Node possuem algumas funcio-
nalidades básicas.

Todo o fluxo de dados foi pensado como streams de forma abstrata.


25m

• Pode-se alterar a codificação dos dados do fluxo com setEncoding;


• Pode-se verificar se o fluxo é legível, gravável ou ambos;
• Pode-se capturar eventos de fluxo, como dados recebidos ou conexão fechada, e
anexar funções de callback para cada um;
• Pode-se pausar e retomar o fluxo.

Tanto no fluxo do teclado, quanto de rede etc.

• Pode-se enviar dados de um fluxo legível para um fluxo gravável.

Como os streams são uma interface genérica no Node, o funcionamento será bem pare-
cido. Além disso, outro elemento importante são os eventos, que serão emitidos pelos fluxos.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Events e EventEmitter
• Muitos dos objetos centrais do Node baseiam-se no EventEmitter;
• Sempre que um objeto emitir um evento e for um evento tratado com "on", trata-se do
EventEmitter em ação;
• Entender como o EventEmitter funciona e como usá-lo são dois dos componentes
mais importantes do desenvolvimento do Node;
• O objeto EventEmitter é o que fornece o tratamento assíncrono de eventos para obje-
tos no Node.

Se algum callback for emitido, ele será enfileirado no núcleo de eventos para que seja
executado no futuro.

Em geral, não se trabalha muito diretamente com a interface do EventEmitter, contudo é


importante possuir o conhecimento sobre ele.

• O primeiro parâmetro para o método é o nome do evento, o segundo é uma função


para processar o evento:
em.on('algumevento', function(data) {... });

• O evento é emitido no objeto, baseado em alguns critérios, através do método 'emit':


if (criterio) {
em.emit('data');
}
30m
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
NODE.JS III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Primeiro, incluímos o módulo Eventos:


var events = require('events');

• Em seguida, criamos uma instância do EventEmitter:


var em = new events.EventEmitter();

• Usamos a instância EventEmitter recém-criada para executar duas tarefas essenciais:


anexar um manipulador de eventos a um evento e emitir o evento real;
• O manipulador de eventos 'on' é acionado quando um evento específico é emitido.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE
O Java EE é uma plataforma de desenvolvimento corporativo para aplicações na lin-
guagem Java.

O PULO DO GATO
No mundo empresarial, o Java EE é muito utilizado e, por isso, é muito requisitado nas
provas de concurso.

O Java EE é um conjunto de especificações e complementações de bibliotecas e méto-


dos de trabalho. Ele é bem grande e envolve muitas bibliotecas e complementações.
Referências
Java EE Tutorial
About this Project
The Java EE Tutorial Project is the official site for the Java Platform, Enterprise Edition
(Java EE) 8 Tutorial that is delivered with the Java EE 8 SDK. The Java EE Tutorial teaches
and demonstrates the Java EE features that are used to develop enterprise applications.
View the Java EE Tutorial
The latest build of the Java EE Tutorial is automatically published to this site as HTML.
The tutorial is authored in AsciiDoc. AsciiDoc is similar to original markdown but is particularly
suited for user documentation. If you are interested in forking the tutorial source files or buil-
ding the tutorials locally, then see the javaee/tutorial repository.
Related Projects
• javaee/tutorial-examples: this repository contains the example code that is used in the
Java EE Tutorial.
• Your First Cup: An Introduction to the Java EE Platform: an introductory tutorial suitable
for beginners. This tutorial is also included in the Java EE 8 SDK.
• javaee/firstcup-examples: this repository contains the example code that is used in the
Your First Cup tutorial.
• GlassFish Samples: this repository contains the sample applications that are delivered
with the Java EE 8 SDK.
https://javaee.github.io/tutorial/
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: recomenda-se o acesso do conteúdo do link, uma vez que é mais atualizado e oficial.
Essa documentação começa em um nível um pouco mais raso e depois é aprofunda-
da.

Introdução
Os desenvolvedores reconhecem cada vez mais a necessidade de aplicativos distribuí-
dos, transacionais e portáteis que aproveitam a velocidade, a segurança e a confiabilidade
da tecnologia de um servidor. O desenvolvimento de aplicações ficou mais complexo e com
mais requisitos com o passar dos anos, sendo mais difícil para o desenvolvedor tomar con-
trole de todos os aspectos da aplicação, principalmente em relação à segurança, acesso a
banco de dados etc.
5m
Hoje, os desenvolvedores gostam de pautar seus trabalhos em bibliotecas e framebox
que dão garantia para o desenvolvimento de uma estrutura confiável. O Java EE é base-
ado no servidor. Portanto, há um servidor altamente instrumentado com um monte de recur-
sos que vão proporcionar, por exemplo, acesso a banco de dados e recursos de segurança
embutidos no servidor. Esse tipo de detalhe técnico é apoiado em um servidor altamente
municiado de ferramentas no Java EE.
Os aplicativos corporativos fornecem a lógica de negócios para uma empresa. Eles são
gerenciados centralmente e frequentemente interagem com outros softwares corporativos.
No mundo da tecnologia da informação, os aplicativos corporativos devem ser projetados,
construídos e produzidos com maior velocidade e menos recursos.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Todas as especificações da imagem vão estar implementadas nos servidores homologa-


dos para o JEE. Não existe apenas um servidor homologado, havendo soluções gratuitas e
pagas. Esses servidores são conhecidos como servidores de aplicação e são homologados
para uma versão do JEE, que já vêm com as funcionalidades específicas.

JCP
Com a plataforma Java Enterprise Edition (Java EE), o desenvolvimento de aplicativos
corporativos Java é mais fácil e mais rápido. O objetivo da plataforma Java EE é fornecer aos
desenvolvedores um poderoso conjunto de APIs, reduzindo o tempo de desenvolvimento, a
complexidade do aplicativo e melhorando o desempenho.
10m
A plataforma Java EE é desenvolvida por meio do Java Community Process (JCP), res-
ponsável por todas as tecnologias Java. Grupos de especialistas compostos de partes inte-
ressadas criaram JSRs (Java Specification Requests) para definir as várias tecnologias Java
EE. O trabalho da Comunidade Java no programa JCP ajuda a garantir os padrões de esta-
bilidade e compatibilidade entre plataformas da tecnologia Java.
O JCP e JSRs vão ser documentos formais de funcionalidades para funcionar dentro de
um servidor JEE. A implementação pode ser usada por outras empresas e, quando alguém
for fazê-la, é preciso ater-se às especificidades da implementação usada. Geralmente, para
cada especificação há 2 ou 3 implementações diferentes e 1 implementação de referência.
Exemplo:

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É importante que exista uma documentação formal de como que a biblioteca deve fun-
cionar, porque há vários servidores Java EE diferentes e aplicação vai pautar-se no recurso
fornecido pelo servidor. A priori, pode-se pegar a aplicação e implantá-la em outro servidor
que também seja homologado para Java EE.
O JEE não é uma biblioteca sozinha ou um flamer, mas uma plataforma de desenvolvi-
mento. O JEE é um conjunto de especificações que vão estar dentro de um servidor homo-
logado, que permite o desenvolvimento de aplicações sem que se coloque bibliotecas direta-
mente e apoiadas pelas funcionalidades disponíveis no servidor.

Anotações
A plataforma Java EE usa um modelo de programação simplificado. Os descritores de
implantação XML são opcionais. Em vez disso, um desenvolvedor pode simplesmente inserir
as informações como uma anotação diretamente em um arquivo de origem Java, e o servidor
Java EE configurará o componente na implementação e no runtime.
Essas anotações geralmente são usadas para incorporar dados de um programa que
seriam fornecidos em um descritor de implantação. Com anotações, colocam-se as informa-
ções de especificação diretamente no código ao lado do elemento do programa afetado.
Essas anotações são os recursos que têm sido mais utilizados nas últimas versões do
JEE e elas são uma alternativa aos descritores em xml.
15m
Exemplo: uso do JPA para acessar banco de dados a partir da aplicação Java. Nas ver-
sões iniciais do JEE, era preciso criar um grande conjunto de arquivos descritores em xml.
Nas últimas versões, os descritores continuam sendo suportados, no entanto tem se dado
mais enfoque à utilização de anotações. Essas anotações permitem que se coloquem as
configurações do sistema diretamente no arquivo de código fonte.
Servlet – web.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/
javaee/web-app_3_1.xsd"
version="3.1">
<display-name>ServletwithAnnotationsApplication</display-name>
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<servlet>
<servlet-name>simpleServlet</servlet-name>
<servlet-class>net.javatutorial.tutorials.ServletWithAnnotations</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>simpleServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

Nota para a edição: foi tirado o PRTSC, pois, ao copiar e colar ou digitar o código, o word
modifica a sintaxe do código para: Servlet with Annotations Application simpleServlet net.
javatutorial.tutorials.ServletWithAnnotations 1 simpleServlet /hello.
Nas versões anteriores, apesar de ser suportado, para se ter uma classe Java que res-
pondesse a uma determinada url, era preciso colocar no descritor de xml. Hoje, a maneira
preferível é usando as annotations.
Servlet – Annotation
packagenet.javatutorial.tutorials;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
publicclassServletWithAnnotationsextendsHttpServlet{
privatestaticfinallongserialVersionUID= -3462096228274971485L;
@Override
protectedvoiddoGet(HttpServletRequestreqest, HttpServletResponseresponse)
throwsServletException, IOException{
response.getWriter().println("HelloWorld!");
}
}
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Injeção de Dependências
Na plataforma Java EE, a injeção de dependência pode ser aplicada a todos os recursos
de que um componente precisa, ocultando efetivamente a criação e a pesquisa de recursos
do código do aplicativo.
A injeção de dependência pode ser usada em contêineres Enterprise JavaBeans (EJB),
contêineres da Web e clientes de aplicativos.
A injeção de dependência permite que o contêiner Java EE insira automaticamente refe-
rências a outros componentes ou recursos necessários, usando anotações.
Há na aplicação uma série de recursos que têm um ciclo de vida. Eles são criados,
usados e destruídos. Por meio da injeção de dependências, é possível que o desenvolvedor
pauta-se diretamente na plataforma Java EE para que ela crie os objetos, instancie, dispo-
nibilize no momento necessário e depois destrua-os, reduzindo a quantidade de códigos e
erros no software.
20m
@Path(“/helps”)
public class HelpsResource {
@Inject HelpCDIService helpCDIService;
@Inject HelpEJBService helpEJBService;

@GET
@Path(“/ping”)
public String ping() {
return helpEJBService.ping();
}
}

Em nenhum momento o objeto é instanciado, já que terá seu ciclo de vida gerenciado
pela injeção de dependências. Outra vantagem da injeção de dependências é poder compar-
tilhar o objeto.

Modelo de Aplicações Java EE


O modelo de aplicações Java EE começa com a linguagem de programação Java e a
máquina virtual Java. A comprovada portabilidade, segurança e produtividade do desenvol-
vedor que eles fornecem formam a base do modelo de aplicação.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O Java EE foi projetado para suportar aplicativos que implementam serviços corporativos
para clientes, funcionários, fornecedores, parceiros e outros que demandam ou contribuem
para a empresa. Tais aplicativos são inerentemente complexos, potencialmente acessando
dados de várias fontes e distribuindo aplicativos para uma variedade de clientes.
Para controlar e gerenciar melhor esses aplicativos, as funções de negócios para dar
suporte a esses vários usuários são realizadas na camada intermediária. A camada inter-
mediária representa um ambiente controlado de perto pelo departamento de tecnologia da
informação de uma empresa. A camada intermediária geralmente é executada em hardware
de servidor dedicado e tem acesso aos serviços completos da empresa.
O modelo de aplicativo Java EE define uma arquitetura para implementar serviços como
aplicativos de várias camadas que fornecem a escalabilidade, acessibilidade e capacidade
de gerenciamento necessárias para aplicativos de nível corporativo.
25m
Este modelo particiona o trabalho necessário para implementar um serviço de várias
camadas nas seguintes partes:
• A lógica de negócios e apresentação a ser implementada pelo desenvolvedor;
• Os serviços de sistema padrão fornecidos pela plataforma Java EE.
O desenvolvedor pode confiar na plataforma para fornecer soluções para os problemas
difíceis no nível de sistema de um serviço de várias camadas.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE II

APLICATIVOS DISTRIBUÍDOS EM VÁRIAS CAMADAS

O Java EE fornece um design arquitetural de como será o sistema, que, em geral, atende
as necessidades. Essas aplicações terão várias camadas e cada uma terá suas finalidades
e responsabilidades.
• A lógica do aplicativo é dividida em componentes de acordo com a função, e os com-
ponentes do aplicativo que compõem um aplicativo Java EE são instalados em várias
máquinas, dependendo da camada à qual o componente do aplicativo pertence:
– Os componentes da camada do cliente são executados na máquina do cliente;
– Os componentes da camada da Web são executados no servidor Java EE;
– Os componentes da camada de negócios são executados no servidor Java EE;
– O software da camada Enterprise Information System (EIS) é executado no
servidor EIS;

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Os aplicativos com várias camadas do Java EE são geralmente considerados aplicati-


vos de três camadas porque são distribuídos em três locais:
– máquinas clientes;
– o servidor Java EE;
– o banco de dados ou máquinas legadas no back-end.
• Os aplicativos de três camadas que são executados dessa maneira estendem o modelo
padrão de cliente e servidor de duas camadas, colocando um servidor de aplicativos
multithread entre o aplicativo cliente e o armazenamento de backend.
5m

SEGURANÇA

• O ambiente de segurança Java EE permite que restrições de segurança sejam defini-


das no momento da implementação.
• A plataforma Java EE torna os aplicativos portáteis para uma ampla variedade de
implementações de segurança, protegendo os desenvolvedores de aplicativos da
complexidade da implementação de recursos de segurança.
• São fornecidas regras padrão de controle de acesso declarativo, definidas pelo desen-
volvedor e interpretadas quando o aplicativo é implantado no servidor.
• O JEE fornece para o desenvolvedor um modelo de segurança a ser adotado.
• O Java EE também fornece mecanismos de login padrão, para que os desenvolvedo-
res de aplicativos não precisem implementar esses mecanismos em seus aplicativos.
• O mesmo aplicativo funciona em uma variedade de ambientes de segurança sem alte-
rações no código fonte.

DIRETO DO CONCURSO
1. (2013/FCC/TRT/5ª REGIÃO-BA/TÉCNICO JUDICIÁRIO/TECNOLOGIA DA INFORMA-
ÇÃO) Na plataforma Java EE, a injeção de dependência permite que o container Java
EE possa inserir automaticamente as referências a outros componentes ou recursos
necessários usando
a. funções e procedures.
b. descritores de implantação, obrigatoriamente.
c. requisições a servlets.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

d. descritores de contexto, obrigatoriamente.


e. anotações.

COMENTÁRIO
Geralmente, a palavra “obrigatoriamente” torna o item suspeito.
Injeção de Dependências: na plataforma Java EE, a injeção de dependência pode ser
aplicada a todos os recursos de que um componente precisa, ocultando efetivamente a
criação e a pesquisa de recursos do código do aplicativo. A injeção de dependência pode
ser usada em contêineres Enterprise JavaBeans (EJB), contêineres da Web e clientes de
aplicativos.
A injeção de dependência permite que o contêiner Java EE insira automaticamente refe-
rências a outros componentes ou recursos necessários, usando anotações.
Exemplo:
@Path(“/helps”)
public class HelpsResource {
@Inject HelpCDIService helpCDIService;
@Inject HelpEJBService helpEJBService;

@GET
@Path(“/ping”)
public String ping() {
return helpEJBService.ping();
}
}

2. (2015/CESPE/MEC/DESENVOLVEDOR) No que se refere à arquitetura Java EE 7, jul-


gue o próximo item.
IDEs (Integrated Development Environment), como NetBeans e Eclipse, são usados
para desenvolver aplicativos e outros componentes para Java EE 7.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
O Netbeans é uma ferramenta bastante usada para desenvolvimento JAVA, assim como o
Eclipse:
10m


ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMPONENTES JAVA EE

As aplicações Java EE são compostos de componentes. Um componente Java EE



é uma unidade de software funcional independente que é montada em um aplicativo
Java EE com suas classes e arquivos relacionados e que se comunica com outros
componentes. A especificação Java EE define os seguintes componentes Java EE:
– Os aplicativos clientes e applets são componentes executados no cliente;
– Os componentes de tecnologia Java Servlet, JavaServer Faces e JavaServer Pages
(JSP) são componentes da Web que são executados no servidor;
– Componentes EJB (enterprise beans) são componentes de negócios que são exe-
cutados no servidor.
• Os componentes Java EE são escritos na linguagem de programação Java e são com-
pilados da mesma maneira que qualquer programa na linguagem;
• As diferenças entre os componentes Java EE e as classes Java “padrão” são que os
componentes Java EE são montados em um aplicativo Java EE, verificados como bem
formados e em conformidade com a especificação Java EE, e são implantados em pro-
dução, onde são executados e gerenciados por um servidor Java EE.
O Java EE possui uma estrutura padrão de criação. Ele tem arquivos descritores e é
implantado em um servidor JEE, não sendo executado de forma individual.

CLIENTES JAVA EE

• Um cliente Java EE geralmente é:


– Um cliente da Web (mais comum);
– Um aplicativo cliente.

Clientes da Web
15m
• Um cliente da Web consiste em duas partes:
– Páginas da web dinâmicas que contêm vários tipos de linguagem de marcação
(HTML, XML e assim por diante), geradas por componentes da web em execução
na camada da web;
– Um navegador da web, que renderiza as páginas recebidas do servidor.
• Um cliente da Web às vezes é chamado de thin cliente (cliente magro).
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Os thin clients geralmente não consultam bancos de dados, executam regras de negó-
cio complexas ou se conectam a aplicativos legados. O navegador em si e a página
rodada não acessam diretamente o banco de dados, mas uma aplicação, fazendo uma
requisição do tipo http, e o servidor faz a requisição para o banco de dados. Isso ocorre
porque tudo que está na mão do cliente pode ser adulterado.
• Essas operações pesadas são passadas para beans corporativos em execução no
servidor Java EE, no qual podem aproveitar a segurança, velocidade, serviços e con-
fiabilidade das tecnologias do lado do servidor Java EE. Quando se trabalha no brow-
ser do usuário, sabe-se que ele não é um ambiente controlado e que o usuário pode
fazer alterações. Por isso, é importante fazer isso do lado do servidor JEE.
• Apresentação para o usuário:

Aplicativos Clientes (Desktop)


• Um aplicativo cliente é executado em uma máquina cliente e fornece aos usuários uma
maneira de lidar com tarefas que exigem uma interface de usuário mais rica do que a
fornecida por uma linguagem de marcação.
20m
• Geralmente possuem uma interface gráfica com o usuário (GUI) criada a partir da API
Swing ou da API AWT (Abstract Window Toolkit). Essas duas opções são multiplata-
forma e podem ser rodadas no Windows, Linux e Mac.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Acessam diretamente os beans corporativos em execução na camada de negócios.


Um aplicativo cliente pode abrir uma conexão HTTP para estabelecer comunicação
com um servlet em execução na camada da web. Os aplicativos clientes escritos em
linguagens diferentes de Java podem interagir com servidores Java EE, permitindo que
a plataforma Java EE interaja com sistemas legados, clientes e linguagens não Java.

Applets
• Uma página da web inclui um applet escrito na linguagem de programação Java. Um
applet é um pequeno aplicativo cliente que é executado na máquina virtual Java insta-
lada no navegador da web;
• Os componentes da web são a API preferida para criar um programa de cliente da
web, porque não são necessários plug-ins ou arquivos de política de segurança nos
sistemas do cliente. O applet funciona como um plug-in. Hoje, ele é pouco utilizado,
mas funciona por flash.
• Além disso, os componentes da Web permitem um design de aplicativo mais limpo e
mais modular, pois fornecem uma maneira de separar a programação de aplicativos
do design de páginas da Web.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

25m

A ARQUITETURA DO COMPONENTE JAVABEANS

• As camadas do servidor e do cliente também podem incluir componentes com base


na arquitetura do componente JavaBeans para gerenciar o fluxo de dados entre os
seguintes:
– Um cliente de aplicativo ou applet e componentes em execução no servidor Java EE.
– Componentes do servidor e um banco de dados.
• Os componentes JavaBeans não são considerados componentes Java EE pela espe-
cificação Java EE, mas são bastantes utilizados.
• Os componentes JavaBeans têm propriedades e métodos get e set para acessar essas
propriedades.
• Os componentes JavaBeans usados dessa maneira geralmente são simples em design
e implementação, mas devem estar em conformidade com as convenções de nomen-
clatura e design descritas na arquitetura de componentes JavaBeans.
Exemplo:
public class TestBean {
private String name;
public void setName(String name) {
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

this.name = name;
}
public String getName() {
return name;
}
}
setName: recebe o nome e altera o valor do bean.
getName: retorna ao valor que estiver salvo no bean.

O PULO DO GATO
As bancas gostam muito de cobrar os detalhes e os formalismos sobre o Java EE.

GABARITO
1. e
2. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES

�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo


ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE III
COMPONENTES DA WEB

• Os componentes da web Java EE são servlets ou páginas da web criadas usando a


tecnologia JavaServer Faces e/ou a tecnologia JSP;
• Servlets são classes de linguagem de programação Java que processam dinamica-
mente solicitações e constroem respostas;
• As páginas JSP são documentos baseados em texto que são executados como serv-
lets, mas permitem uma abordagem mais natural para a criação de conteúdo estático;
• A tecnologia JavaServer Faces baseia-se em servlets e na tecnologia JSP e fornece
uma estrutura de componente de interface com o usuário para aplicativos da web;
• Páginas HTML estáticas e applets são empacotados com componentes da Web
durante a montagem do aplicativo, mas não são considerados componentes da Web
pela especificação Java EE. Quando se desenvolve uma aplicação da Web, há uma
pasta para colocar os componentes estáticos. Nesses componentes, pode-se colocar
classes e arquivos de HTML estáticos;
• As classes de utilitário do lado do servidor também podem ser empacotadas com com-
ponentes da web e, como páginas HTML, não são consideradas componentes da web.
Servlet – Implementação
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extende a classe HttpServlet


public class HelloWorld extends HttpServlet {

private String message;

public void init() throws ServletException {


// Realiza a inicialização
message = “Hello World”;
}
5m
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

public void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {

// Ajusta o conteúdo de resposta


response.setContentType(“text/html”);

// Lógica de negócio.
PrintWriter out = response.getWriter();
out.println(“ <h1> + message + “< /h1>”);
}
public void destroy() {
// não faz nada.
}
}
Cada vez que há uma requisição para a servet, cai-se nesse método. A “response” é a
resposta para o usuário final.
<servlet>
<servlet-name>HelloWorld </servlet-name>
<servlet-class>HelloWorld </servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
O nível de abstração é pequeno e serve para tarefas simples e úteis, que não dependem
de uma resposta visual para o usuário.
JSP

<%@ pagecontentType="text/html;charset=UTF-8" language="java" %>


<%@ pageimport="java.time.LocalDateTime" %>
<!DOCTYPE html>
<html>
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<head>
<title>SimpleJSP Application</title>
</head>
<body>
<h1>Helloworld!</h1>
<h2>Currenttime is<%= LocalDateTime.now() %></h2>
</body>
</html>

Nota para a edição: foi tirado um PrtSc da tela do código, pois ele desaparece quando
copiado e colado para o Word.
Os Servel é o nível mais primitivo. Depois, vieram os JSPs, que tornou viável e mais fácil
o desenvolvimento Web. Por fim, o nível mais alto de abstração é o JSF.

JSF
<?xmlversion='1.0' encoding='UTF-8' ?>
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/
TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>UserForm</title>
</h:head>
<h:body>
<h:form>
<h:outputLabelfor="username">UserName</h:outputLabel>
<h:inputTextid="username" value="#{user.name}" required="true"
requiredMessage="UserNameisrequired" />
<br/>
<h:commandButtonid="submit-button" value="Submit"
action="response.xhtml"/>
</h:form>
</h:body>
</html>
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Nota para a edição: foi tirado um PrtSc da tela do código, pois ele desaparece quando
copiado e colado para o Word.

Componentes da Web

10m

Componentes de Negócios

O código de negócio, que é uma lógica que resolve ou atende às necessidades de



um domínio comercial específico, como bancário, varejo ou financeiro, é tratado pelos
beans corporativos executados na camada de negócios ou na web;
• Um bean corporativo recebe dados de programas clientes, os processa (se neces-
sário) e os envia para a camada do sistema de informações corporativas para
armazenamento;
• Um bean corporativo também recupera dados do armazenamento, os processa (se
necessário) e os envia de volta ao programa cliente.
A primeira camada roda no cliente, como o applet. Depois há a camada Web, que trata
com as requisições Web. Por último, há uma camada de negócio que faz o meio de campo
entre a Wiew e as outras camadas.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

@Entity
@Table(name=”farmer”)
public class Farmer {
@Id @Column(name=”id”)
private int id;
@Column(name=”name”)
private String name;
@Column(name=”village”)
private String village;
public int getId() {
return id;
}

public void setId(int id) {


this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVillage() {
return village;
}
public void setVillage(String village) {
this.village = village;
}

public class JPADemo {


private static final EntityManagerFactory emFactory;
static {
emFactory = Persistence.createEntityManagerFactory(“com.example”);
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

}
public static EntityManager getEntityManager(){
return emFactory.createEntityManager();
}

public static void main(String[] args) {


EntityManager em = getEntityManager();
em.getTransaction().begin();
Farmer f = new Farmer();
f.setId(1);
f.setName(“João”);
f.setVillage(“Silva”);
em.persist(f);
em.getTransaction().commit();
em.clear();
System.out.println(“Feito”);
}
}
Há uma persistência da camada de dados, mas não há um código do banco de dados,
pois é um comando de alto nível com a criação de uma entidade que salva no banco de
dados. O Java EE providência a persistência direta da entidade.

15m
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Camada do Sistema de Informações Corporativas

• A camada do sistema de informações corporativas lida inclui sistemas de infraestrutura


corporativa, como ERP (Enterprise Resource Planning), processamento de transações
de mainframe, sistemas de banco de dados e outros sistemas de informações legados;
• Esses recursos geralmente estão localizados em uma máquina separada do servidor
Java EE e são acessados por componentes na camada de negócios;
• Por exemplo, os componentes do aplicativo Java EE podem precisar acessar sistemas
de informações corporativas para conectividade do banco de dados.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (2015/CESPE/MEC/DESENVOLVEDOR) No que se refere à arquitetura Java EE 7, jul-
gue o próximo item.
A plataforma Java EE realiza tarefas comuns de infraestrutura para que os desenvol-
vedores possam se concentrar no desenvolvimento da lógica de negócios de suas
aplicações.

COMENTÁRIO
A definição básica do Java EE é permitir que o desenvolvedor se concentre na lógica de
negócio e deixe que a plataforma cuide das questões de infraestrutura de mais baixo nível.

2. (2015/VUNESP/TCE-SP/AGENTE DA FISCALIZAÇÃO FINANCEIRA/INFRAESTRU-


TURA DE TI E SEGURANÇA DA INFORMAÇÃO) Algumas tecnologias Web, como o
Java EE, são mais adequadas para realizar acesso a bases de dados do que outras
tecnologias, como o JavaScript ou jQuery, por exemplo. Essa característica se dá prin-
cipalmente porque o Java EE é uma tecnologia que atua do lado do
a. cliente e, por ser uma linguagem compilada, os dados são processados com maior
agilidade do que linguagens interpretadas.
b. cliente e, por isso, garante a redução do volume de dados a serem processados no
servidor ou na base de dados.
c. servidor e, por isso, oferece a possibilidade de ocultar as informações de acesso às
bases de dados do cliente.
d. servidor e, por isso, é capaz de proporcionar maior capacidade de processamento, o
que reduz a carga na base de dados.
e. servidor, que é o único capaz de gerir otimizações no programa e diminuir o volume
de dados transmitidos para a base de dados.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
O JavaScript e jQuery são executados do lado do navegador do cliente. O Java EE roda do
lado do servidor. A base de dados tem uma URL de conexão, nome de usuário, senha de
usuário. Caso isso seja mandado para o usuário final, ele terá as informações e, eventual-
mente, poderia comprometer as informações salvas na base de dadas.
As informações ficam salvas na base de dados em segurança. Via Java Script o navegador
faz uma requisição para o servidor JEE e esse servidor faz a conexão com a base de dados
e depois devolve a resposta para o usuário final.

Contêineres Java EE
20m

O PULO DO GATO
As bancas costumam cobrar muito o tópico sobre os contêineres do Java EE.

• Normalmente, é difícil escrever aplicativos multicamadas de thin client porque envol-


vem muitas linhas de código intrincado para lidar com transações e gerenciamento de
estado, multithreading, pool de recursos e outros detalhes complexos de baixo nível;
• A arquitetura Java EE baseada em componente e independente de plataforma facilita
a escrita dos aplicativos porque a lógica de negócios é organizada em componentes
reutilizáveis;
• Além disso, o servidor Java EE fornece serviços subjacentes na forma de um contêiner
para cada tipo de componente. Como não é necessário desenvolver esses serviços,
pode se concentrar na solução do problema de negócios em questão.

Serviços de Contêiner
• Os contêineres são a interface entre um componente e a funcionalidade específica de
plataforma e de baixo nível que suporta o componente;
• Antes de poder ser executado, um componente da Web, enterprise bean ou aplicativo
cliente deve ser construído em um módulo Java EE e implantado em seu contêiner;
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O processo de construção envolve a especificação de configurações de contêiner para


cada componente no aplicativo Java EE e para o próprio aplicativo Java EE;
• As configurações do contêiner personalizam o suporte subjacente fornecido pelo ser-
vidor Java EE, incluindo serviços como segurança, gerenciamento de transações, pes-
quisas na API Java Naming and Directory Interface (JNDI) e conectividade remota;
• O modelo de segurança Java EE permite configurar um componente da web ou enter-
prise bean para que os recursos do sistema sejam acessados apenas por usuários
autorizados;
• O modelo de transação Java EE permite especificar relacionamentos entre métodos
que compõem uma única transação, para que todos os métodos em uma transação
sejam tratados como uma única unidade;
• Os serviços de pesquisa JNDI (nome dado para um recurso externo de configura-
ção) fornecem uma interface unificada para vários serviços de nomes e diretórios na
empresa, para que os componentes do aplicativo possam acessar esses serviços;
25m
• O modelo de conectividade remota do Java EE gerencia as comunicações de baixo
nível entre clientes e beans corporativos. Após a criação de um bean corporativo, um
cliente chama métodos nele como se estivesse na mesma máquina virtual;
• Como a arquitetura Java EE fornece serviços configuráveis, os componentes no
mesmo aplicativo podem se comportar de maneira diferente com base em onde eles
são implementados;
• Por exemplo, um bean corporativo pode ter configurações de segurança que permitem
um certo nível de acesso aos dados do banco de dados em um ambiente de produção
e outro nível de acesso ao banco de dados em outro ambiente de produção;
• O contêiner também gerencia serviços não configuráveis, como ciclos de vida do enter-
prise bean e servlet, pool de recursos de conexão com o banco de dados, persistência
de dados e acesso às APIs da plataforma Java EE.
ANOTAÇÕES

10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tipos de Contêiner

Serviços de Contêiner
• Servidor Java EE: O runtime de um produto Java EE. Um servidor Java EE fornece
EJB e contêineres da web;
• Contêiner EJB: gerencia a execução de beans corporativos para aplicativos Java EE.
Os beans corporativos e seu contêiner são executados no servidor Java EE;
• Contêiner da Web: gerencia a execução de páginas da Web, servlets e alguns com-
ponentes EJB para aplicativos Java EE. Os componentes da Web e seu contêiner são
executados no servidor Java EE;
• Contêiner do cliente do aplicativo: gerencia a execução dos componentes do aplicativo
cliente. Os aplicativos clientes e seus contêineres são executados no cliente;
• Contêiner de applet: gerencia a execução de applets. Consiste em um navegador da
web e um plug-in Java em execução no cliente juntos;
ANOTAÇÕES

11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Um contêiner Java EE contém três componentes essenciais: um contêiner da Web (ou


seja, servlet), um contêiner EJB e um provedor de persistência:

30m

GABARITO
1. c
2. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

12 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE IV

SUPORTE A WEB SERVICES

• Os Web Services são aplicativos corporativos baseados na Web que usam padrões
abertos, XML e protocolos de transporte para trocar dados com clientes que estão cha-
mando. Nesse caso, é permitido que várias ferramentas e aplicações com diferentes
linguagens possam comunicar-se.
• A plataforma Java EE fornece as APIs e ferramentas XML necessárias para projetar,
desenvolver, testar e implantar rapidamente serviços e clientes da Web que interope-
ram totalmente com outros serviços e clientes da Web em execução em plataformas
baseadas em Java ou não. A palavra-chave é interoperabilidade.
• Para escrever Web services e clientes com as APIs Java EE XML, basta passar dados
de parâmetros para as chamadas de método e processar os dados retornados; para
serviços da Web orientados a documentos, envia-se documentos contendo os dados
do serviço. Através de configurações, o servidor devolve em XML, caso seja solicitado,
e a própria plataforma Java cuida de fazer as conversões.
• Nenhuma programação de baixo nível é necessária porque as implementações da
API XML fazem o trabalho de converter os dados do aplicativo de e para um fluxo de
dados baseado em XML enviado pelos protocolos de transporte padronizados basea-
dos em XML.
5m
• A conversão de dados em um fluxo de dados padronizado baseado em XML é o que
torna os serviços e clientes da Web escritos com as APIs XML do Java EE totalmente
interoperáveis.
• Isso não significa necessariamente que os dados que estão sendo transportados
incluem tags XML, porque os próprios dados transportados podem ser texto sem for-
matação, dados XML ou qualquer tipo de dados binários.

XML

O XML é usado para guardar metadados, configuração do servidor do Java EE, para
definir estruturas visuais de comunicação ou para a comunicação entre máquinas através do
Web service.
• XML (Extensible Markup Language) é um padrão baseado em texto, extensível em
várias plataformas, para representar dados. As partes que trocam dados XML podem
criar suas próprias tags para descrever os dados, configurar esquemas para especi-
ficar quais tags podem ser usadas em um tipo específico de documento XML e usar
folhas de estilo XML para gerenciar a exibição e o manuseio dos dados.

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Por exemplo, um serviço da Web pode usar XML e um esquema para produzir listas
de preços, e as empresas que recebem as listas e o esquema podem ter suas próprias
folhas de estilo para manipular os dados da maneira que melhor se adapte às suas
necessidades.
• Uma empresa pode colocar informações de preços XML por meio de um programa
para converter o XML em HTML, para que possa publicar as listas de preços em
sua intranet.
• Uma empresa parceira pode colocar as informações de preços XML por meio de uma
ferramenta para criar uma apresentação de marketing.
• Outra empresa pode ler as informações de preços XML em um aplicativo para pro-
cessamento.

Uma aplicação JEE vai facilitar tanto a comunicação dentro da empresa, como da empresa
com empresas de fora. Isso é feito através de um protocolo de aplicação, chamado SOAP.

Protocolo de Transporte SOAP


• Solicitações de cliente e respostas de serviço da web são transmitidas como mensa-
gens SOAP (Simple Object Access Protocol) por HTTP para permitir uma troca com-
pletamente interoperável entre clientes e serviços da web, todos executados em plata-
formas diferentes e em vários locais na Internet.
• HTTP é um padrão familiar de solicitação e resposta para enviar mensagens pela
Internet e SOAP é um protocolo baseado em XML que segue o modelo de solicitação
e resposta HTTP.
• A parte SOAP de uma mensagem transportada faz o seguinte:
– Define um envelope baseado em XML para descrever o que está na mensagem e
explicar como processar a mensagem.
– Inclui regras de codificação baseadas em XML para expressar instâncias de tipos de
dados definidos pelo aplicativo na mensagem.
– Define uma convenção baseada em XML para representar a solicitação ao serviço
remoto e a resposta resultante.

10m
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Formato Padrão WSDL


• O WSDL (Web Services Description Language) é um formato XML padronizado para
descrever os serviços de rede.
• A descrição inclui o nome do serviço, a localização do serviço e maneiras de se comu-
nicar com o serviço.
• As descrições de serviço WSDL podem ser publicadas na Web.

Suporte a Web Services


ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

MONTAGEM E IMPLANTAÇÃO DE APLICATIVOS JAVA EE

• Um aplicativo Java EE é empacotado em uma ou mais unidades padrão para imple-


mentação em qualquer sistema compatível com a plataforma Java EE. Cada uni-
dade contém:
– Um componente ou componentes funcionais, como um enterprise bean, página da
web, servlet ou applet;
– Um descritor de implantação opcional que descreve seu conteúdo.
• Depois que uma unidade Java EE é produzida, ela está pronta para ser implantada.
O programa confiará que as bibliotecas das implementações estarão disponíveis
no servidor.
• A implantação geralmente envolve o uso da ferramenta de implantação da plataforma
para especificar informações específicas do local, como uma lista de usuários locais
que podem acessá-lo e o nome do banco de dados local.
• Uma vez implantado em uma plataforma local, o aplicativo está pronto para ser
executado.

DIRETO DO CONCURSO
1. (CCV/UFC/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO – ENGENHARIA DE SOF-
TWARE/2013) Componentes de aplicação do Java EE executam em ambientes conhe-
cidos como containers, que são parte da plataforma Java EE. Além do “application client
container”, o Java EE suporta outros três tipos de containers, são eles:
15m
a. “JSP and Servlet container”, “Swing container” e “applet container”.
b. “Enterprise JavaBeans (EJB) container”, “web container” e “applet container”.
c. “GlassFish container”, “Enterprise JavaBeans (EJB) container” e “applet container”.
d. “JavaScript containers”, “Web containers for HTML and JSP pages” e “JSF container”.
e. “Web container”, “Enterprise JavaBeans (EJB) container” e “Web containers for HTML
and JSP pages”.

COMENTÁRIO
O GlassFish é um servidor específico.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (FCC/PREFEITURA DE TERESINA – PI/ANALISTA TECNOLÓGICO – ANALISTA DE


SISTEMAS/2016) Um Java EE container como o GlassFish, considerado a implemen-
tação de referência para servidor de aplicação Java EE, possui três componentes es-
senciais, que são:
a. Stub container, ORB container e skeleton container.
b. Web container, EJB container e persistence provider.
c. JSP container, Servlet container e HTML container.
d. Swing container, web container e core application.
e. Web container, EJB container e deployment container.

COMENTÁRIO
Serviços de contêiner
Um contêiner Java EE contém três componentes essenciais: um contêiner da Web (ou
seja, servlet), um contêiner EJB e um provedor de persistência:

3. (CESPE/MEC/DESENVOLVEDOR/2015) No que se refere à arquitetura Java EE 7, jul-


gue o próximo item.
O Java EE 7 não oferece suporte a HTML5.

COMENTÁRIO
Há uma discussão sobre se o Java EE suporta a HTML5. No entanto, ele suporta vários
dos atributos e das características do HTML5, não existindo uma restrição forte para que
ele não o rode.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

APIS JAVA EE

20m

Enterprise JavaBeans (EJB)


• Um componente Enterprise JavaBeans (EJB), ou enterprise bean, é um corpo de código
que possui campos e métodos para implementar módulos da lógica de negócios.
• Pode-se pensar em um enterprise bean como um bloco de construção que pode ser
usado sozinho ou com outros enterprise beans para executar a lógica de negócios no
servidor Java EE.
• Os beans corporativos são beans de sessão ou beans controlados por mensagens.
• Um bean de sessão representa uma conversa transitória com um cliente. Quando o
cliente termina a execução, o bean de sessão e seus dados desaparecem.
• Um bean acionado por mensagens combina recursos de um bean de sessão e um
ouvinte de mensagens, permitindo que um componente de negócios receba mensa-
gens de forma assíncrona. Geralmente, essas são mensagens do Java Message Ser-
vice (JMS).
• A plataforma Java EE 8 requer o Enterprise JavaBeans 3.2 e o Interceptors 1.2. A
especificação Interceptors faz parte da especificação EJB.

O PULO DO GATO
Algumas bancas costumam cobrar os números de versões, o que torna as questões com-
plicadas. No entanto, geralmente, são cobradas as especificações mais famosas ou mais
utilizadas.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

@Stateful
@TransactionAttribute(NEVER)
@Remote({ examples.Account.class })
@Interceptors({ examples.AuditInterceptor.class })
public class AccountBean implements Account {
private int balance = 0;
@EJB(beanName = “ServiceBean”)
private Service service;

public void deposit(int amount) {


balance += amount;
System.out.println(“deposited: “ + amount + “ balance: “ + balance);
}
public void withdraw(int amount) {
balance -= amount;
System.out.println(“withdrew: “ + amount + “ balance: “ + balance);
}

@ExcludeClassInterceptors
public void sayHelloFromAccountBean() {
service.sayHelloFromServiceBean();
}
@PreDestroy
public void preDestroy() {
System.out.println(“Invoking method: preDestroy()”);
}
O EJB é parte importante do JEE. Ele ficará como se fosse um bloco de código de negó-
cio e será implantado dentro de um contêiner do JEE. Em geral, ele não é uma parte visual,
mas um componente de negócio.

Servlet
• A tecnologia Java Servlet permite definir classes de servlet específicas do HTTP.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Uma classe de servlet estende os recursos dos servidores que hospedam aplicativos
acessados por meio de um modelo de programação de solicitação-resposta.
• Embora os servlets possam responder a qualquer tipo de solicitação, eles geralmente
são usados para estender os aplicativos hospedados pelos servidores da web.
• Na plataforma Java EE 8, os novos recursos da tecnologia Java Servlet incluem
o seguinte:
– Server Push (o servidor envia ativamente recursos para o usuário);
– HTTP Trailer (permite que se coloque headers no final da resposta).
• A plataforma Java EE 8 requer o Servlet 4.0.

JavaServer Faces
25m
• A tecnologia JavaServer Faces é um framework de interface com o usuário para a
construção de aplicativos da web. Os principais componentes da tecnologia JavaSer-
ver Faces são os seguintes:
– Um framework de componentes de GUI.
– Um modelo flexível para renderizar componentes em diferentes tipos de HTML ou
diferentes linguagens e tecnologias de marcação.
– Um padrão RenderKit para gerar a marcação HTML 4.01.
• Os seguintes recursos suportam os componentes da GUI:
– Validação de entrada;
– Manipulação de eventos;
– Conversão de dados entre objetos e componentes de modelo;
– Criação de objeto de modelo gerenciado;
– Configuração de navegação da página (rota de navegação);
– Linguagem de Expressão (EL).
• Na plataforma Java EE 8, os novos recursos da tecnologia JavaServer Faces incluem
o seguinte:
– Suporte direto para WebSockets através da nova tag <f:websocket> (comunicação
full duplex. Ex.: chat).
– Validação de bean em nível de classe por meio da nova tag <f:validateWholeBean>.
– Uma anotação @ManagedProperty compatível com CDI.
– Estrutura aprimorada de expressão de pesquisa de componente.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A plataforma Java EE 8 requer JavaServer Faces 2.3 e Expression Language 3.0.



Exemplo: as empresas que estão construindo um servidor JEE não irão implementar dire-
tamente a biblioteca do JSF, mas colocarão uma biblioteca. Quando isso ocorre, é preciso
verificar se aquela biblioteca atende a versão da especificação.

JavaServer Pages
• A tecnologia JavaServer Pages (JSP) permite inserir trechos de código de servlet dire-
tamente em um documento baseado em texto. Uma página JSP é um documento
baseado em texto que contém dois tipos de texto:
– Dados estáticos, que podem ser expressos em qualquer formato baseado em texto,
como HTML ou XML;
30m
– Elementos JSP, que determinam como a página constrói conteúdo dinâmico.
• A plataforma Java EE 8 requer o JavaServer Pages 2.3 para compatibilidade com ver-
sões anteriores, mas recomenda o uso do Facelets como a tecnologia de exibição em
novos aplicativos.

GABARITO
1. b

2. b
3. e

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE V

BIBLIOTECA DE TAGS PADRÃO DO JAVASERVER PAGES

• A JSTL (JavaServer Pages Standard Tag Library) encapsula a funcionalidade principal


comum a muitos aplicativos JSP. Em vez de misturar tags de vários fornecedores em
seus aplicativos JSP, pode-se usar um único conjunto padrão de tags. Essa padroni-
zação permite implementar seus aplicativos em qualquer contêiner JSP que suporte
JSTL e aumenta a probabilidade de otimização da implementação das Tags.
- JSTL é uma biblioteca de tags básicas.
- JSP é uma página que tem HTML e pode-se colocar dentro dele um pouco de
código Java.
• O JSTL possui tags iterador e condicional para manipular controle de fluxo, tags para
manipular documentos XML, tags de internacionalização, tags para acessar bancos de
dados usando SQL e tags para funções comumente usadas.
5m
• A plataforma Java EE 8 requer JSTL 1.2.

<%@ tagliburi = "http://java.sun.com/jsp/jstl/core" prefix= "c" %>


<html>
<head>
<title><c:if> TagExample</title>
</head>
<body>
<c:setvar = "salary" scope= "session" value= "${2000*2}"/>
<c:iftest= "${salary> 2000}">
<p>Mysalaryis: <c:outvalue= "${salary}"/><p>
</c:if>
</body>
</html>

No código, sai-se de uma linguem que usa código de Java, para usar as tags. Essa é uma
forma intermediária de estabelecer o código.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Java Transaction API


• A Java Transaction API (JTA) fornece uma interface padrão para demarcar transações.
Exemplo: transação que diminui o saldo de um cliente e aumenta o saldo de outro. Isso
não pode ficar no meio do caminho, fazendo somente a diminuição do saldo de um
cliente, com erro no aumento do saldo do outro. Por isso, é preciso demarcar através
de uma transaction e as coisas serão desfeitas automaticamente, caso algo dê errado.
• A arquitetura Java EE fornece auto commit para gerenciar commits e rollbacks de
transações.
• Auto commit significa que quaisquer outros aplicativos que estão visualizando
dados verão os dados atualizados após cada operação de leitura ou gravação do
banco de dados.
• No entanto, se o seu aplicativo executar duas operações de acesso ao banco de dados
separadas que dependem uma da outra, convém usar a API JTA para demarcar onde
a transação inteira, incluindo operações, begins, rolls back, e commits.
• A plataforma Java EE 8 requer o Java Transaction API 1.2.
10m

O PULO DO GATO
Algumas provas cobram o número das versões que estão sendo utilizados. Porém, não
são todas as bancas que cobram dessa forma.

Java Transaction API - Via Annotation


@Transactional
public void executeTransfer(String fromAccontId, String
toAccountId, BigDecimal amount) {
bankAccountService.transfer(fromAccontId, toAccountId, amount);
auditService.log(fromAccontId, toAccountId, amount);
BigDecimal balance =
bankAccountService.balanceOf(fromAccontId);
if(balance.compareTo(BigDecimal.ZERO) < 0) {
throw new RuntimeException(“Insufficient fund.”);
}
}
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se não for lançada a exceção durante a execução do método, chegando ao fim, a tran-
sação dos comits vão ser feitas no banco de dados ou nas camadas de persistência. Caso
seja lançado um erro, as ações vão ser desfeitas, porque foi anotado como @Transaction.
No entanto, em alguma outra situação, o programador precisará ter um controle maior e pode
ser feito manualmente.

Java Transaction API – Programática


userTransaction.begin();
bankAccountService.transfer(fromAccontId, toAccountId, amount);
auditService.log(fromAccontId, toAccountId, amount);
BigDecimal balance = bankAccountService.balanceOf(fromAccontId); if(balance.
compareTo(BigDecimal.ZERO) < 0) {
userTransaction.rollback();
throw new RuntimeException(“Insufficient fund.”);
} else {
userTransaction.commit();
}

API Java para Serviços Web RESTful


• A API Java para Serviços da Web RESTful (JAX-RS) define APIs para o desenvolvi-
mento de serviços da Web criados de acordo com o estilo de arquitetura Representa-
tional State Transfer (REST).
• Um aplicativo JAX-RS é um aplicativo da web que consiste em classes empacotadas
como um servlet em um arquivo WAR junto com as bibliotecas necessárias.
15m
• Na plataforma Java EE 8, os novos recursos de serviços da web RESTful incluem
o seguinte:
- API do cliente reativa (rx):
Quando os resultados de uma chamada em um recurso de destino são recebidos, os
aprimoramentos nas APIs do estágio de conclusão no Java SE permitem que a sequência
desses resultados seja especificada, priorizada, combinada ou concatenada e como as exce-
ções podem ser tratadas. As APIs reativas têm sido comuns em outras linguagens trabalham
com os dados em forma de fluxos.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

- Aprimoramentos no suporte a eventos enviados pelo servidor.


-Os clientes podem assinar notificações de eventos emitidas pelo servidor usando
uma conexão de longa duração. Foi adicionado suporte para um novo tipo de mídia: text/
event-stream.
- Suporte para objetos JSON-B e integração aprimorada às tecnologias CDI, Ser-
vlet e Validação de Bean.
• A plataforma Java EE 8 requer JAX-RS 2.1.
Essa API do JAX-RS é muito utilizada e muito populares. Elas são uma forma simples de
definir recursos, verbos HTTP e respostas acionadas.
@Path(“/todo”)
public class TodoResource {
// Caso um XML seja solicitado
@GET
@Produces({MediaType.APPLICATION_XML})
public Todo getXML() {
Todo todo = new Todo();
todo.setSummary(“Application XML
Todo Summary”); todo.setDescription(“Application XML Todo Description”);
return todo;
}

Não foi necessário fazer nenhum tipo de correção explícita para XML.
// Caso um JSON seja solicitado
@GET
@Produces({MediaType.APPLICATION_JSON})
public Todo getJSON() {
Todo todo = new Todo();
todo.setSummary(“Application JSON Todo Summary”);
todo.setDescription(“Application JSON Todo Description”);
return todo;
}
Em geral, as API RESTful frontend dão mais preferência para trabalhar com o JSON por
ser um formato mais leve e de fácil leitura.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Managed Beans
• Managed Beans, POJOs (Objetos Gerenciados por Contêiner Leve) com requisitos
mínimos, suportam um pequeno conjunto de serviços básicos, como injeção de recur-
sos, callbacks do ciclo de vida e interceptadores.
• Managed Beans representam uma generalização dos Managed Beans especificados
pela tecnologia JavaServer Faces e podem ser usados em qualquer lugar em um apli-
cativo Java EE, não apenas em módulos da web.
20m
• A especificação Managed Beans faz parte da especificação da plataforma Java EE 8
(JSR 366). A plataforma Java EE 8 requer o Managed Beans 1.0.

@ManagedBean(value=”mybean”)
public class MyManagedBean {
@PostConstruct public void setupResources() {
System.out.println(“Setting up resources...”);
}
@PreDestroy
public void cleanupResources() {
System.out.println(“Collecting them back...”);
}
public String sayHello(String name) {
return “Hello “ + name;
}
}

Esse bean pode ser injetado em um Servlet ou em qualquer outro componente geren-
ciado de três maneiras diferentes:
1. Usando a anotação @Resource:
@Resource
MyManagedBean bean;
2. Usando a anotação “@Inject”:
@Inject
MyManagedBean bean;
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

3. Utilizando a referência JNDI


InitialContext ic = new InitialContext();
MyManagedBean bean = (MyManagedBean)ic.lookup(“java:module/mybean”);
Uma injeção só pode ser utilizada dentro de outro componente que também esteja sendo
controlado pelo contêiner.

Contextos e Injeção de Dependência para Java EE


• Contextos e injeção de dependência para Java EE (CDI) definem um conjunto de ser-
viços contextuais, fornecidos por contêineres Java EE, que facilitam para os desen-
volvedores o uso de beans corporativos junto com a tecnologia JavaServer Faces em
aplicativos da web. Projetado para uso com objetos com estado, o CDI também possui
muitos usos mais amplos, permitindo aos desenvolvedores uma grande flexibilidade
para integrar diferentes tipos de componentes de uma maneira pouco acoplada, mas
tipicamente segura.
• Na plataforma Java EE 8, os novos recursos do CDI incluem o seguinte:
- Uma API para inicializar um contêiner CDI no Java SE 8.
- Suporte à ordem do observador, que determina a ordem na qual os métodos do
observador para um evento específico são chamados e suporte para disparar
eventos de forma assíncrona.
- Interfaces de configuradores, usadas para definir e modificar dinamicamente
objetos CDI.
• A plataforma Java EE 8 requer CDI 2.0.
Exemplo: o carrinho de compras no e-comerce é possível ser injetado em vários locais da
aplicação que necessite dessa informação.
Dependency Injection
• Injeção de Dependência para Java define um conjunto padrão de anotações (e uma
interface) para uso em classes injetáveis.
• Na plataforma Java EE, o CDI fornece suporte para injeção de dependência. Especifi-
camente, pode-se usar pontos de injeção apenas em um aplicativo habilitado para CDI.
• A plataforma Java EE 8 requer Dependency Injection 1.0;

import javax.inject.Named;
@Named
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

public class UmManagedBean {

public void executarRotina(){


//TODO: funcionalidades
}
}

@Named
public class MinhaClasseUtil {
@Inject
private UmManagedBean bean;

@PostConstruct
public void init(){ b
ean.executarRotina();
}
}
Em nenhum momento foi chamado o new um managedbean. Ele será instanciado e
gerenciado diretamente para o contêiner. Essa é a grande utilidade do CDI.
25m

DIRETO DO CONCURSO
1. (2014/CESPE/TJ-SE/ANALISTA JUDICIÁRIO/ANÁLISE DE SISTEMAS) Acerca de sis-
temas transacionais e de arquitetura Java EE 7, julgue os itens subsequentes.
O Hibernate é instalado automaticamente na arquitetura Java EE 7, quando escolhido
o recurso JDBC. O Hibernate passou a ser utilizado como solução padrão para mape-
amento objeto-relacional nessa versão de arquitetura, porque a JPA (Java Persistence
API), não é mais suportada para realizar tal mapeamento, tendo sido marcada como
deprecated na versão Java EE 5.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
A especificação é a JPA e a implementação do código é feita através do Hibernate. Há ou-
tras possibilidades de fornecedores além do Hibernate para colocar no servidor.

2. (2016/SUGEP/UFRPE/TÉCNICO EM TECNOLOGIA DA INFORMAÇÃO) Acerca do


Java Enterprise Edition (JEE), analise as afirmações abaixo.
1. Consiste de uma série de especificações detalhadas, dando uma receita de como
deve ser implementado um software que implementa serviços de infraestrutura.
2. Trata-se de uma plataforma para desenvolvimento e execução de aplicações ser-
vidoras, com capacidade de suporte ao desenvolvimento de aplicações robustas e
escaláveis.
3. JEE é um servidor de aplicação que implementa as APIs da plataforma Java EE e
fornece serviços padrão Java EE.
4. Alguns dos componentes fundamentais do Java EE são: Enterprise JavaBeans (EJB),
Java Persistence API (JPA), JavaServer Pages (JSP) e servlets.
Estão corretas:
a. 1, 2, 3 e 4.
b. 1, 2 e 3, apenas.
c. 1, 2 e 4, apenas.
d. 1, 3 e 4, apenas.
e. 2, 3 e 4, apenas.

COMENTÁRIO
JEE é uma plataforma, não um servidor de aplicação.

GABARITO
1. e
2. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
ANOTAÇÕES

preparada e ministrada pelo professor Tiago Lage Payne de Pádua.


�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JAVA EE VI

BEAN VALIDATION

Essa API é bastante utilizada e permite que um bean, um cliente ou produto, através de
anotation, tenha uma série de restrições, como número de caracteres, valores máximos ou
mínimos. De forma automática, o bean será validado e apresentará para o usuário os erros
preenchidos.
• A especificação de Bean Validation define um modelo de metadados e uma API para
validar dados nos componentes JavaBeans. Em vez de distribuir a validação de dados
por várias camadas, como o navegador e o servidor, pode-se definir as restrições de
validação em um único local e compartilhá-las nas diferentes camadas.
• Na plataforma Java EE 8, os novos recursos de Bean Validation incluem:
– Suporte para novos recursos no Java SE 8, como a API Date-Time;
– Adição de novas restrições internas de Bean Validation.
• A plataforma Java EE 8 requer Bean Validation 2.0.

public class User {


@NotNull(message = “Nome não pode ser nulo”)
private String name;

@AssertTrue
private boolean working;

@Size(min = 10, max = 200, message


= “Deve ter entre 10 e 200 caracteres”)
private String aboutMe;

@Min(value = 18, message = “Idade não pode ser menor que 18”)
@Max(value = 150, message = “Idade não pode ser maior que 150”) private int age;

@Email(message = “Email deve ser válido”)


ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

private String email;

// setters e getters padrão


}
5m

JAVA MESSAGE SERVICE API

• A API do Java Message Service (JMS) é um padrão de sistema de mensagens que


permite aos componentes de aplicativos Java EE criar, enviar, receber e ler mensagens.
• Ele permite a comunicação distribuída fracamente acoplada, confiável e assíncrona.
• A plataforma Java EE 8 requer JMS 2.0.
– JMS é um recurso mais avançado e o invalidation é um recurso básico.

public class HelloWorldProducer {


public static void main(String[] args) throws NamingException,
JMSException {
Connection connection = null;
try {
System.out.println(“Create JNDI Context”);
Context context = ContextUtil.getInitialContext();

System.out.println(“Get connection facory”);


ConnectionFactory connectionFactory = (ConnectionFactory) context
.lookup(“ConnectionFactory”);

System.out.println(“Create connection”);
connection = connectionFactory.createConnection();

System.out.println(“Create session”);
Session session = connection.createSession(false,
QueueSession.AUTO_ACKNOWLEDGE);

ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

System.out.println(“Lookup queue”);
Queue queue = (Queue) context.lookup(“/queue/HelloWorldQueue”);

System.out.println(“Start connection”);
connection.start();

System.out.println(“Create producer”);
MessageProducer producer = session.createProducer(queue);

System.out.println(“Create hello world message”);


Message hellowWorldText = session.createTextMessage(“Hello World!”);
System.out.println(“Send hello world message”);
producer.send(hellowWorldText);
} finally {
if (connection!= null) {
System.out.println(“close the connection”);
connection.close();
}
}
}
}

Hoje, é muito comum no Desenvolvimento Web trabalhar com transações assíncronas.


Isso faz com que se diminua a quantidade de erros e o número de acoplamentos é mais baixos.

Java EE Connector Architecture


• A Arquitetura do Java EE Connector é usada por fornecedores de ferramentas e
integradores de sistemas para criar adaptadores de recursos que suportam acesso
a sistemas de informações corporativos que podem ser conectados a qualquer
produto Java EE.
– Exemplo: em instituições financeiras, há de um lado os mainframes e de outro o
Java. Para que eles conversem, usa-se o Java EE Connector Architecture.
10m
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Um adaptador de recursos é um componente de software que permite que os


componentes de aplicativos Java EE acessem e interajam com o gerenciador de
recursos subjacente do EIS.
• Como um adaptador de recursos é específico para seu gerenciador de recursos,
normalmente existe um adaptador de recursos diferente para cada tipo de banco de
dados ou sistema de informações corporativas.
• A Arquitetura do Java EE Connector também fornece uma integração transacional
baseada em mensagens, segura, escalável e baseada em desempenho dos serviços
da Web baseados na plataforma Java EE com EISs existentes que podem ser
síncronos ou assíncronos. Aplicativos existentes e EISs integrados através da Java
EE Connector Architecture à plataforma Java EE podem ser expostos como serviços
da Web baseados em XML usando modelos de componentes JAX-WS e Java EE.
• Assim, o JAX-WS e a Java EE Connector Architecture são tecnologias complementares
para integração de aplicativos corporativos (EAI) e integração comercial de ponta a
ponta. A plataforma Java EE 8 requer o Java EE Connector Architecture 1.7.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A palavra que define o Java EE Connector Architecture é integração.

JAVAMAIL API

• Os aplicativos Java EE usam a API JavaMail para enviar notificações por email. A API
JavaMail possui duas partes:
– Uma interface no nível do aplicativo usada pelos componentes do aplicativo para
enviar email.
– Uma interface de provedor de serviço.
• A plataforma Java EE inclui a API JavaMail com um provedor de serviços que permite
que os componentes do aplicativo enviem email.
• A plataforma Java EE 8 requer o JavaMail 1.6.

public class SendEmail {


public static void main(String [] args){
String to = “destinatario@gmail.com”;
String from = “remetente@gmail.com”;
String host = “localhost”;

// Obtém um objeto de sessão


Properties properties = System.getProperties();
properties.setProperty(“mail.smtp.host”, host);
Session session = Session.getDefaultInstance(properties);

// Compõe a mensagem
try{
MimeMessage message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new
InternetAddress(to));
message.setSubject(“Ping”);
message.setText(“Olá, esta é uma mensagem”);
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

// Envia
Transport.send(message);
System.out.println(“enviada com sucesso....”);
}catch (MessagingException mex) {mex.printStackTrace();}
}
}
15m

JAVA EE SECURITY API

• Define interfaces portáteis, de plug-in para autenticação HTTP e armazenamento


de identidades, e uma interface SecurityContext injetável que fornece uma API para
segurança programática.
• As implementações da interface HttpAuthenticationMechanism podem ser usadas
para autenticar chamadores de aplicativos da web.
• Um aplicativo pode fornecer por conta própria HttpAuthenticationMechanism ou usar
uma das implementações padrão fornecidas pelo contêiner.
– O Java EE vai oferecer uma API de autenticação e segurança para proteger o sistema
de uma invasão através de login e senha do usuário.
• As implementações da IdentityStoreinterface podem ser usadas para validar credenciais
do usuário e recuperar informações do grupo.
• Um aplicativo pode fornecer por conta própria IdentityStore ou usar o armazenamento
LDAP ou banco de dados embutido.
• As APIs HttpAuthenticationMechanism e IdentityStore fornecem uma vantagem
sobre as implementações fornecidas por contêiner, pois permitem que um aplicativo
controle o processo de autenticação e os armazenamentos de identidade usados para
autenticação, de maneira portátil e padrão.
• A SecurityContextAPI deve ser usada pelo código do aplicativo para consultar e
interagir com o contexto de segurança atual.
• A especificação também fornece mapeamento de grupo para função padrão e define
um tipo principal chamado CallerPrincipal que pode representar a identidade de um
chamador de aplicativo.
• A plataforma Java EE 8 requer o Java EE Security API 1.0.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

API JAVA PARA WEBSOCKET

• O WebSocket é um protocolo de aplicativo que fornece comunicações fullduplex entre


dois pares por TCP.
– Em uma comunicação HTTP tradicional, o navegador faz uma solicitação para o
servidor, o servidor faz o processamento e devolve uma resposta para o cliente,
acabando a comunicação. O WebSocket traz uma conexão persistente, ficando
ativa entre o navegador e o servidor, sem ter novas solicitações.
20m
• A API Java para WebSocket permite que aplicativos Java EE criem terminais usando
anotações que especificam os parâmetros de configuração do terminal e designam
seus métodos de retorno de chamada do ciclo de vida.
• A plataforma Java EE 8 requer a API Java para WebSocket 1.1.

@ServerEndpoint(“/actions”)
public class DeviceWebSocketServer {

@OnOpen
public void open(Session session) {
// Implementação
}

@OnClose
public void close(Session session) {
// Implementação
}

@OnError
public void onError(Throwable error) {
// Implementação
}

@OnMessage
public void handleMessage(String message, Session session) {
// Implementação
}
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Java EE VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (2017/IBFC/TJ-PE/ANALISTA JUDICIÁRIO/ANALISTA DE SISTEMAS) Adquiriu-se a
última versão do Java Platform, Enterprise Edition. Nessa última versão do Java EE
temos containers e API’s tais como:
(1) JTA (Java Transaction API).
(2) JSF (JavaServer Faces).
(3) JDBC (Java Database Connectivity).
(4) JPA (Java Persistence API).
a. da relação apresentada somente são aplicados o 1, 2 e 3.
b. da relação apresentada somente são aplicados o 1, 2 e 4.
c. da relação apresentada somente são aplicados o 2, 3 e 4.
d. da relação apresentada somente são aplicados o 1, 3 e 4.
e. da relação apresentada todos podem ser aplicados

2. (2013/FEPESE/JUCESC/ANALISTA TÉCNICO EM GESTÃO DE REGISTRO


MERCANTIL/ANALISTA DE INFORMÁTICA) São todos componentes do Java
EE versão 6.
a. Servlets; JDBC; EJB; JPA.
b. EJB; JPC; JTA; webservice.
c. AJAX; Servlet; JPDC; JPA.
25m
d. JMS; JTA; XML; JBOSS.
e. JPC; JSF; JTA; JMS.

GABARITO
1. e

2. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JPA

BIBLIOGRAFIA

https://www.javacodegeeks.com/minibook/jpa-minibook
https://docs.oracle.com/javaee/7/tutorial/partpersist.htm

Obs.: dependendo do intuito, utiliza-se uma bibliografia diferente. Para o dia a dia, o livro
é mais interessante e prático; para concurso, a documentação é mais interessante.
As provas têm sido bem teóricas, com conteúdo pouco prático. Em geral, ao elaborar
as provas, as bancas utilizam a documentação oficial para elaborar as questões. Por
isso, o conteúdo da aula é mais textual. Nos slides, já é possível revisar o conteúdo.

Introdução

“O Java Persistence API (JPA) fornece aos desenvolvedores Java um recurso de mape-
amento objeto/relacional para gerenciar dados em aplicativos Java.”
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o JPA tenta automatizar algumas tarefas.

Consiste em quatro áreas:


5m

• Uma API de persistência Java;


• Uma linguagem de consulta;

Obs.: é uma linguagem semelhante ao SQL, mas é orientada ao objeto. É uma simplifica-
ção do SQL.

• Uma Java Persistence Criteria API;


• Metadados de mapeamento objeto/relacional.

Obs.: o JPA infere muita coisa do próprio objeto, mas, muitas vezes, é preciso usar dicas
para especificar. Esses metadados servem para dar uma orientação ao JPA, marcan-
do na classe como eles devem persistir ou tratar aquela entidade.

Entidades

• Uma entidade é um objeto de domínio da persistência.

Obs.: geralmente, há uma classe cliente, que estará relacionada a uma tabela chama-
da cliente.

• Normalmente, uma entidade representa uma tabela em um banco de dados rela-


cional e cada instância da entidade corresponde a uma linha nessa tabela.
• O principal artefato de programação de uma entidade é a classe de entidade, embora
as entidades possam usar classes auxiliares.
• O estado persistente de uma entidade é representado por campos persistentes ou
propriedades persistentes.

Obs.: esse estado persistente é o estado que persistirá no banco de dados.


ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Esses campos ou propriedades usam anotações de mapeamento objeto/relacional


para mapear as entidades e os relacionamentos de entidade com os dados relacionais
no armazenamento de dados subjacente.

Obs.: em geral, se houver uma classe cliente, o cliente terá um nome, uma lista de ende-
reços. O endereço será uma outra entidade; haverá um relacionamento. O cliente
tem uma lista de endereço; esse endereço é uma outra tabela de banco de dados.
Por meio dos metadados, determina-se como é o relacionamento de cliente com en-
dereço (pode ser de um para um; de um para muitos; de muitos para um; de muitos
para muitos). Isso depende de como é definido o relacionamento, que é definido em
função do negócio.

O objetivo geral do JPA é definir algumas classes, anotá-las com alguns metadados e
essas classes serão mais fáceis para persistir no banco de dados. Muitas tarefas serão feitas
de forma automática pelo JPA, sem escrever todo o SQL verboso.

Requisitos para classes de entidade


10m

• A classe deve ser anotada com a anotação javax.persistence.Entity;

Obs.: @entity.

• A classe deve ter um construtor público ou protegido, sem argumentos.


• A classe não deve ser declarada final. Nenhum método ou variável de instância per-
sistente deve ser declarado final.
• As entidades podem estender as classes de entidade e não entidade, e as classes
que não são de entidade podem estender as classes de entidade.
• Variáveis de instância persistentes devem ser declaradas como privadas, pro-
tegidas ou privadas de pacotes e podem ser acessadas diretamente apenas pelos
métodos da classe de entidade. Os clientes devem acessar o estado da entidade
por meio de métodos de acesso ou de negócios.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Campos persistentes e propriedades em classes de entidade

• O estado persistente de uma entidade pode ser acessado por meio das proprie-
dades ou variáveis da instância da entidade. Os campos ou propriedades podem
ser dos seguintes tipos: primitivos, String ou tipos serializáveis, wrappers de tipos pri-
mitivos, BigDecimal, Date, etc.
• As entidades podem usar campos persistentes, propriedades persistentes ou uma
combinação de ambos.
• Se as anotações de mapeamento forem aplicadas às variáveis de instância da enti-
dade, a entidade usará campos persistentes.
• Se as anotações de mapeamento forem aplicadas aos métodos getter da entidade
para propriedades no estilo JavaBeans, a entidade usará propriedades persistentes.

Obs.: o metadado de persistência pode ser utilizado aplicado tanto a uma propriedade di-
reto na classe quanto no método getter.

Campos persistentes

• Se a classe de entidade usar campos persistentes, o runtime de persistência acessará


diretamente as variáveis de instância da classe de entidade.
• Todos os campos não anotados como javax.persistence.Transient ou não marcados
como transitórios Java serão persistidos no armazenamento de dados.

Obs.: ao anotar como transiente, ao fazer a persistência da entidade, esse campo anotado
como transiente não será persistido no banco de dados.
15m

• As anotações de mapeamento objeto/relacional devem ser aplicadas às variáveis da


instância.

Propriedades persistentes

• Se a entidade usar propriedades persistentes, a entidade deverá seguir as conven-


ções de método dos componentes JavaBeans;
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• As propriedades no estilo JavaBeans usam métodos getter e setter que normalmente


são nomeados utilizando os nomes das variáveis da instância da classe da entidade;
• Para cada propriedade persistente do tipo “Type” da entidade, há um método getter
getPropriedade e um método setter setPropriedade;
• Se a propriedade for booleana, pode-se usar isPropriedade em vez de getPropriedade;

Propriedades persistentes, exemplo:

• Se uma entidade Cliente usar propriedades persistentes e tiver uma variável de ins-
tância privada chamada primeiroNome, a classe definirá um método getPrimeiro-
Nome e setPrimeiroNome para recuperar e definir o estado da variável de instância
primeiroNome.
• As anotações de mapeamento objeto/relacional para propriedades persistentes devem
ser aplicadas aos métodos “getter”.
• As anotações de mapeamento não podem ser aplicadas a campos ou propriedades
anotadas como @Transient ou marcadas como transitórias.

Usando coleções em campos de entidades e propriedades

Obs.: lembre-se do exemplo eu que há um cliente e uma lista de endereços. É um caso


de coleção.

• Os campos e propriedades persistentes com valor de coleção (múltiplos) devem usar


as interfaces de coleção Collection, Set, List ou Map.
• Se a classe de entidade usa campos persistentes, o tipo nas assinaturas de métodos
deve ser um desses tipos de coleção.
• Variantes genéricas desses tipos de coleção também podem ser usadas.
• Por exemplo, se tiver uma propriedade persistente que contenha um conjunto de
números de telefone, a entidade Cliente teria os seguintes métodos:

- Set getNumerosDeTelefone() {...}


- void setNumerosDeTelefone(Set) {...}
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Se um campo ou propriedade de uma entidade consistir em uma coleção de tipos bási-


cos ou classes incorporáveis, usa-se anotação javax.persistence.ElementCollection
no campo ou na propriedade.
20m
• Os dois atributos de @ElementCollection são targetClass e fetch. O atributo target-
Class especifica o nome da classe básica ou incorporável e é opcional se o campo ou
a propriedade for definido usando genéricos da linguagem de programação Java. O
atributo de busca opcional é usado para especificar se a coleção deve ser recuperada
tardia ou antecipadamente, usando as constantes javax.persistence.FetchType de
LAZY ou EAGER, respectivamente. Por padrão, a coleção será buscada tardiamente.

Obs.: imagine que haja clientes e uma lista de endereços. Suponha que essa lista possa
ter quantos endereços quiser. Às vezes, por descuido ou desconhecimento, o desen-
volvedor coloca EAGER. Quando carregar o cliente, carrega toda a lista. Só que a
lista pode ser muito grande e os objetos podem ficar pesados. Em geral, o padrão é
utilizar o método LAZY, ou seja, o carregamento é tardio. Ele será feito à medida que
os campos forem acessados.

Usando coleções, exemplo:

• A entidade a seguir, Person, possui um campo persistente, nicknames, que é uma


coleção de classes String que serão buscadas antecipadamente. O elemento target-
Class não é obrigatório, porque usa generics para definir o campo:

@Entity
public class Person {
... @ElementCollection(fetch=EAGER)
protected Set nickname = new HashSet();
...
}
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Validando campos e propriedades persistentes

• A API Java para validação de JavaBeans (Bean Validation) fornece um mecanismo


para validar dados de aplicativos. O Bean Validation é integrado aos contêineres do
Java EE, permitindo que a mesma lógica de validação seja usada em qualquer um dos
níveis de um aplicativo corporativo.
• As restrições de validação de bean podem ser aplicadas a classes de entidade per-
sistentes, classes incorporáveis e superclasses mapeadas. Por padrão, o provedor
de persistência executará automaticamente a validação em entidades com campos
persistentes ou propriedades anotadas com restrições de validação de bean imediata-
mente após os eventos de ciclo de vida PrePersist, PreUpdate e PreRemove.
• Restrições de validação de bean são anotações aplicadas aos campos ou proprieda-
des de classes de linguagem de programação Java.
25m
• O Bean Validation fornece um conjunto de restrições, bem como uma API para definir
restrições personalizadas.
• Restrições personalizadas podem ser combinações específicas das restrições padrão
ou novas restrições que não usam as restrições padrão.
• Cada restrição é associada a pelo menos uma classe de validador que valida o valor
do campo ou propriedade restrita.
• As restrições de validação de bean são aplicadas aos campos ou propriedades persis-
tentes de classes persistentes.
• Ao adicionar restrições Bean Validation, usa-se a mesma estratégia de acesso que a
classe persistente.
• Ou seja, se a classe persistente usar o acesso ao campo, aplique as anotações de
restrição Bean Validation nos campos da classe.
• Se a classe usar o acesso à propriedade, aplique as restrições nos métodos getter.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

@Entity
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
protected String firstName;
@NotNull
protected String lastName;
@Pattern(regexp = “[a-z0-9!#$%&’*+/=?^_`{|}~-]+(?:\\.”
+ “[a-z0-9!#$%&’*+/=?^_`{|}~-]+)*@”
+ “(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]”
+ “(?:[a-z0-9-]*[a-z0-9])?”,
message = “{invalid.email}”)
protected String email;
@Pattern(regexp = “^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$”,
message = “{invalid.
phonenumber}”)
protected String mobilePhone;
...
}

DIRETO DO CONCURSO
1. (2013/CESPE/TRE-MS/TÉCNICO JUDICIÁRIO – PROGRAMAÇÃO DE SISTEMAS)
Assinale a opção correspondente ao elemento que, além de ser utilizado para definir
um meio de mapeamento objeto-relacional para objetos Java simples e comuns (PO-
JOs), denominados beans de entidade, também é utilizado para gerenciar o desenvol-
vimento de entidades do modelo relacional em plataforma nativa Java SE e Java EE.
a. JSF
b. SVN
c. JPA
d. spring
e. struts
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
JPA
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
30m
O JPA pode ser utilizado no Java SE e Java EE.
Destaque para o trecho: mapeamento objeto-relacional para objetos Java simples e co-
muns (POJOs).
É preciso saber que o JPA faz o mapeamento objeto-relacional.

GABARITO
1. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JPA II

CHAVES PRIMÁRIAS EM ENTIDADES

• Cada entidade possui um identificador de objeto exclusivo.


• Uma entidade de cliente, por exemplo, pode ser identificada por um número de cliente.
• O identificador exclusivo, ou chave primária, permite que os clientes localizem uma
determinada instância da entidade.
• Toda entidade deve ter uma chave primária.
• Uma entidade pode ter uma chave primária simples ou composta.

ATENÇÃO
• Chave primária é um conceito bem conhecido no banco de dados. O ID do cliente não
pode ser repetido, é um identificador único.
• As chaves primárias simples são aquelas mais naturais, que têm um ID, e a chave com-
posta pode ser constituída de várias outras propriedades combinadas.

• As chaves primárias simples usam a anotação javax.persistence.Id para denotar a pro-


priedade ou o campo da chave primária.
• Chaves primárias compostas são usadas quando uma chave primária consiste em
mais de um atributo, que corresponde a um conjunto de propriedades ou campos per-
sistentes únicos.
• Chaves primárias compostas devem ser definidas em uma classe de chave primária.
• As chaves primárias compostas são indicadas usando as anotações javax.persistence.
EmbeddedId e javax.persistence.IdClass.

ATENÇÃO
Para criar uma entidade que tenha uma chave composta, é necessário criar uma classe
para que a mesma seja uma chave composta.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

MULTIPLICIDADE EM RELACIONAMENTOS DE ENTIDADES

Um-para-um (One-to-one):

• Cada instância de entidade está relacionada a uma única instância de outra entidade.
• Por exemplo, para modelar um armazém físico no qual cada depósito contém uma
única ferramenta, a ferramentaDepositada e a ferramenta teriam um relacionamento
de um para um.
• Relacionamentos um-para-um usam a anotação javax.persistence.OneToOne na pro-
priedade ou campo persistente correspondente.
5m

ATENÇÃO
A propriedade irá se relacionar com uma outra tabela.

UM-PARA-MUITOS (ONE-TO-MANY):

• Uma instância de entidade pode estar relacionada a várias instâncias das outras
entidades.
• Um pedido de venda, por exemplo, pode ter vários itens.
• No aplicativo de pedido, OrdemDeCompra teria um relacionamento um-para-
muitos com Item.
• Relacionamentos um-para-muitos usam a anotação javax.persistence.OneToMany na
propriedade ou campo persistente correspondente.

MUITOS-PARA-UM (MANY-TO-ONE):

• Várias instâncias de uma entidade podem estar relacionadas a uma única instância da
outra entidade.
• Essa multiplicidade é o oposto de um relacionamento um-para-muitos.
• No exemplo mencionado, o relacionamento com OrdemDeCompra da perspectiva de
Item é de muitos para um.
• Relacionamentos muitos-para-um usam a anotação javax.persistence.ManyToOne na
propriedade ou campo persistente correspondente.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Muitos-para-muitos (Many-to-many):

• As instâncias da entidade podem estar relacionadas a várias instâncias umas


das outras.
• Por exemplo, cada curso universitário tem muitos alunos e cada aluno pode fazer
vários cursos.
• Portanto, em um aplicativo de inscrição, o curso e o aluno teriam um relacionamento
• muitos-para-muitos.
• Relacionamentos muitos-para-muitos usam a anotação javax.persistence.ManyTo-
Many na propriedade ou campo persistente correspondente.

Direção em relacionamentos de entidade

• A direção de um relacionamento pode ser bidirecional ou unidirecional.


• Um relacionamento bidirecional tem um lado próprio e um lado inverso.
• Um relacionamento unidirecional tem apenas um lado próprio.
• O lado próprio de um relacionamento determina como o runtime de persistência faz
atualizações no relacionamento no banco de dados.

ATENÇÃO
Se a classe cliente tem uma lista de endereços e, na classe endereço tem a referência ao
cliente esse relacionamento é bidirecional, pois, tanto o cliente sabe a lista de endereços que
tem quanto o endereço sabe a qual cliente está relacionado. Mas, caso somente o cliente
saiba da sua lista de endereços, ou vice versa, este seria um relacionamento unidirecional.
10m

Relacionamentos Bidirecionais

• Em um relacionamento bidirecional, cada entidade possui um campo ou propriedade


de relacionamento que se refere à outra entidade.
• Por meio do campo ou propriedade de relacionamento, o código de uma classe de
entidade pode acessar seu objeto relacionado.
• Se uma entidade tiver um campo relacionado, a entidade é “conhecida” sobre seu
objeto relacionado.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Por exemplo, se OrdemDeCompra souber quais instâncias de Item ele possui e se Item
souber a qual OrdemDeCompra pertence, eles terão um relacionamento bidirecional.

Relacionamentos Bidirecionais: Regras

• O lado inverso de um relacionamento bidirecional deve referir-se ao seu lado proprie-


tário usando o elemento mappedBy da anotação @OneToOne, @OneToMany ou @
ManyToMany. O elemento mappedBy designa a propriedade ou campo na entidade
que é o proprietário do relacionamento.
• O lado “muitos” dos relacionamentos bidirecionais muitos-para-um não deve definir o
elemento mappedBy. O lado “muitos” é sempre o lado proprietário do relacionamento.
• Para relações bidirecionais um-para-um, o lado proprietário corresponde ao lado que
contém a chave estrangeira correspondente.
• Para relacionamentos bidirecionais muitos-para-muitos, qualquer lado pode ser o lado
proprietário.

RELACIONAMENTOS UNIDIRECIONAIS

• Em um relacionamento unidirecional, apenas uma entidade possui um campo ou pro-


priedade de relacionamento que se refere ao outro.
• Por exemplo, Item teria um campo de relacionamento que identifica o Produto, mas o
Produto não teria um campo ou propriedade de relacionamento para o Item.
• Em outras palavras, Item conhece o Produto, mas o Produto não sabe quais instâncias
de Item se referem a ele.

Consultas e Direção de Relacionamento

• A linguagem de consulta Java Persistence e as consultas Criteria API geralmente


• navegam pelos relacionamentos.
• A direção de um relacionamento determina se uma consulta pode navegar de uma
entidade para outra.
• Por exemplo, uma consulta pode navegar de Item para Produto, mas não pode nave-
gar na direção oposta.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Para OrdemDeCompra e Item, uma consulta pode navegar nas duas direções, porque
essas duas entidades têm um relacionamento bidirecional.

 Obs.: o relacionamento sendo uni ou bidirecional determinará como é feita a navegação


entre as entidades.

Operações em cascata e relacionamentos

• Entidades que usam relacionamentos geralmente têm dependências da existência da


outra entidade no relacionamento.
• Por exemplo, um Item faz parte de uma OrdemDeCompra. Se a OrdemDeCompra for
excluída, o Item também deverá ser excluído. Isso é chamado de relacionamento de
exclusão em cascata.

ATENÇÃO
Se houver um cliente com vários endereços, e, na entidade cliente foi inserido ou excluído
um endereço. Se a remoção não for feita fisicamente na tabela, pode acontecer daquele
endereço ficar “órfão” na tabela ocupando apenas o espaço.
15m

• O tipo enumerado javax.persistence.CascadeType define as operações em cascata


que são aplicadas ao elemento.

Operação em Cascata Descrição


Todas as operações em cascata serão aplicadas à entidade relacio-
ALL nada da entidade controladora. ALL é equivalente a especificar casca-
de={DETACH, MERGE, PERSIST, REFRESH, REMOVE}.
Se a entidade pai for separada do contexto de persistência, a entidade
DETACH
relacionada também será separada.
Se a entidade pai for mesclada no contexto de persistência, a entidade
MERGE
relacionada também será mesclada.
Se a entidade pai for persistida no contexto de persistência, a entidade
PERSIST
relacionada também será persistida.
Se a entidade pai for atualizada no contexto de persistência atual, a
REFRESH
entidade relacionada também será atualizada.
Se a entidade pai for removida do contexto de persistência atual, a enti-
REMOVE
dade relacionada também será removida.

• Os relacionamentos de exclusão em cascata são especificados usando a especifica-


ção do elemento cascade=REMOVE para os relacionamentos @OneToOne e @One-
ToMany. Por exemplo:

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

@OneToMany(cascade=REMOVE, mappedBy=”cliente”)
public Set<OrdemCliente> getOrdens() { return ordens; }

REMOÇÃO ÓRFÃ EM RELACIONAMENTOS

• Quando uma entidade de destino em um relacionamento um-para-um ou um-para-


• muitos é removida do relacionamento, geralmente é desejável fazer cascata da opera-
ção de remoção para a entidade de destino.
• Essas entidades de destino são consideradas “órfãs” e o atributo orphanRemoval pode
ser usado para especificar que entidades órfãs devem ser removidas.
• Por exemplo, se um pedido tiver muitos itens e um deles for removido do pedido, o item
removido será considerado órfão.
• Se orphanRemoval estiver definido como true, a entidade do item será excluída quando
o item for removido do pedido.
20m

ATENÇÃO
O orphanRemoval é diferente da operação cascata remove pois, na operação em cascata
remove, se uma ordem com vários itens é removida, implica a remoção de todos os itens,
mas se a ordem continua sem a lista dos itens e um item é removido, mas a ordem continua
a existir, esse item será considerado órfão e deverá ser excluído pela operação de órfãos.

• O exemplo a seguir fará cascata da operação de remoção para a entidade de ordem


órfã quando a entidade do cliente for excluída:
@OneToMany(mappedBy=”customer”, orphanRemoval=”true”)
public List<CustomerOrder> getOrders() {... }

 Obs.: neste caso não ficará nenhuma entidade órfã na tabela, a mesma permanecerá limpa.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
JPA II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (FEPESE/2013/JUCESC/ANALISTA TÉCNICO EM GESTÃO DE REGISTRO MER-
CANTIL – ANALISTA DE INFORMÁTICA) Em relação à JPA e Hibernate, considere as
seguintes afirmativas.

1) JPA Especifica uma JSR (Java Specification Requests)


2) Hibernate Especifica uma JSR
3) Hibernate cuida da camada de persistência enquanto JPA da camada de transação
4) Hibernate é uma implementações de JSR
5) JPA é uma Implementação de JSR

Assinale a alternativa que indica todas as afirmativas corretas.


a. São corretas apenas as afirmativas 1 e 4.
b. São corretas apenas as afirmativas 2 e 3.
c. São corretas apenas as afirmativas 3 e 4.
d. São corretas apenas as afirmativas 1, 2 e 3.
e. São corretas apenas as afirmativas 3, 4 e 5

25m
COMENTÁRIO
O JPA é uma especificação, o Hibernate é uma implementação. Existem 3 (três) níveis:
JSR (nível mais alto de abstração, uma solicitação de especificação); depois o nível mais
baixo entre eles, o JPA, que é uma especificação; e, por último, o Hibernate, que é uma
implementação da especificação e costuma ser mais popular.
• O Hibernate não especifica uma JSR, ele a implementa.

GABARITO
1. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JPA III

Gerenciando Entidades

• As entidades são gerenciadas pelo gerenciador de entidades (Entity Manager), que é


representado pelas instâncias javax.persistence.EntityManager;
• Cada instância do EntityManager está associada a um contexto de persistência (Per-
sistence Context): um conjunto de instâncias de entidades gerenciadas que existem
em um armazenamento de dados específico;
• Um contexto de persistência define o escopo sob o qual instâncias de entidades espe-
cíficas são criadas, persistidas e removidas;
• A interface EntityManager define os métodos que são usados para interagir com o con-
texto de persistência.

A interface do EntityManager

A API do EntityManager cria e remove instâncias de entidade persistentes, localiza enti-


dades pela chave primária da entidade e permite que as consultas sejam executadas em
entidades.

Obs.: ou seja, as operações básicas sobre as entidades (inserir, remover, localizar etc.)
serão feitas utilizando o API do EntityManager.

Gerenciadores de entidades gerenciados por contêiner

Obs.: existem duas formas de gerir o gerenciador – pelo contêiner ou pela aplicação.

• Com um gerenciador de entidades gerenciado pelo contêiner (servidor), o con-


texto de persistência de uma instância EntityManager é automaticamente propagado
pelo contêiner para todos os componentes da aplicação que usam a instância Enti-
tyManager em uma única transação Java Transaction API (JTA).
• As transações de JTA geralmente envolvem chamadas nos componentes do aplicativo.
• Para concluir uma transação JTA, esses componentes geralmente precisam acessar
um único contexto de persistência.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Isso ocorre quando um EntityManager é injetado nos componentes da aplicação por


meio da anotação javax.persistence.PersistenceContext.
5m

Obs.: será utilizada essa forma gerenciada pelo contêiner em casos mais simples, ou seja,
na maioria dos casos. Ela tem algumas vantagens, como por exemplo o gerencia-
mento automático de transações. Ou seja, o próprio contêiner iniciará uma transação
e se der algum erro nas operações ele fará o rollback daquelas transações auto-
maticamente.

• O contexto de persistência é automaticamente propagado com a transação JTA atual


e as referências EntityManager que são mapeadas para a mesma unidade de persis-
tência fornecem acesso ao contexto de persistência dentro dessa transação.
• Ao propagar automaticamente o contexto de persistência, os componentes do apli-
cativo não precisam passar referências às instâncias do EntityManager entre si para
fazer alterações em uma única transação.
• O contêiner Java EE gerencia o ciclo de vida de gerenciadores de entidades gerencia-
dos por contêiner.
• Para obter uma instância do EntityManager, injeta-se o gerenciador de entidades no
componente da aplicação:

@PersistenceContext
EntityManager em;

Gerenciadores de entidades gerenciados por aplicação

Obs.: no caso dos gerenciadores de entidades gerenciados por aplicação haverá um con-
trole bem mais manual sobre como são feitas as transações.

• Com um gerenciador de entidades gerenciado por aplicação, o contexto de persistên-


cia não é propagado para componentes do aplicativo, e o ciclo de vida de instâncias
do EntityManager é gerenciado pela aplicação;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Os gerenciadores de entidades gerenciados por aplicação são usados quando as


aplicações precisam acessar um contexto de persistência que não é propagado com
a transação JTA nas instâncias do EntityManager em uma unidade de persistência
específica.
• Nesse caso, cada EntityManager cria um novo contexto de persistência isolado.
• O EntityManager e seu contexto de persistência associado são criados e destruídos
explicitamente pela aplicação.
• Eles também são usados quando a injeção direta de instâncias do EntityManager não
pode ser feita porque as instâncias do EntityManager não são seguras para threads.
10m
• As instâncias de EntityManagerFactory são seguras para threads.
• As aplicações criam instâncias do EntityManager nesse caso usando o método crea-
teEntityManager de javax.persistence.EntityManagerFactory.
• Para obter uma instância EntityManager, primeiro deve-se obter uma instância Enti-
tyManagerFactory, injetando-a no componente da aplicação por meio da anotação
javax.persistence.PersistenceUnit:

@PersistenceUnit
EntityManagerFactory emf;

• Em seguida, obtém-se um EntityManager da instância EntityManagerFactory:

EntityManager em = emf.createEntityManager();

• Gerenciadores de entidades gerenciados por aplicação não propagam automatica-


mente o contexto de transação JTA.
• As aplicações precisam obter acesso manualmente ao gerenciador de transações
JTA e adicionar informações de demarcação de transação ao executar operações
de entidade.
• A interface javax.transaction.UserTransaction define métodos para iniciar, consolidar e
reverter transações.
• Injeta-se uma instância de UserTransaction criando uma variável de instância anotada
com @Resource:

@Resource
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

UserTransaction utx;

• Para iniciar uma transação, chama-se o método UserTransaction.begin.


• Quando todas as operações da entidade estiverem concluídas, chama-se o método
UserTransaction.commit para confirmar a transação.
• O método UserTransaction.rollback é usado para reverter a transação atual.

@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
utx.begin();
em.persist(SomeEntity);
em.merge(AnotherEntity);
em.remove(ThirdEntity);
utx.commit();
} catch (Exception e) {
utx.rollback();
}

Encontrando Entidades Usando o EntityManager

• O método EntityManager.find é usado para procurar entidades no armazenamento de


dados pela chave primária da entidade:

@PersistenceContext
EntityManager em;
public void enterOrder(int custID, CustomerOrder newOrder) {
Customer cust = em.find(Customer.class, custID);
cust.getOrders().add(newOrder);
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

newOrder.setCustomer(cust);
}
15m

Gerenciando o ciclo de vida de uma instância de entidade

Obs.: uma nova entidade por enquanto ainda não tem referências no banco de dados,
ainda não está gerenciada de nenhuma forma e estará em determinado estado. Se
o usuário persistir aquela entidade, ela mudará o seu estado. E quando o usuário
recuperar aquela entidade do banco de dados, ela estará gerenciada, diferentemente
de quando é feito um novo cliente.

Gerencia-se instâncias de entidades invocando operações na entidade por meio de uma


instância EntityManager. As instâncias de entidades estão em um dos quatro estados: novo,
gerenciado, destacado ou removido.

• Novas instâncias de entidade não têm identidade persistente e ainda não estão
associadas a um contexto de persistência.
• Instâncias de entidades gerenciadas possuem uma identidade persistente e estão
associadas a um contexto de persistência.
• As instâncias de entidades desanexadas têm uma identidade persistente e não
estão atualmente associadas a um contexto de persistência.
• As instâncias de entidade removidas têm uma identidade persistente, estão asso-
ciadas a um contexto persistente e são agendadas para remoção do armazena-
mento de dados.

Persistindo instâncias de entidade

• Novas instâncias de entidade tornam-se gerenciadas e persistentes chamando o


método persist ou por uma operação persistente em cascata chamada a partir de enti-
dades relacionadas que possuem o conjunto cascade = PERSIST ou cascade = ALL
definido na anotação de relacionamento.
20m
• Isso significa que os dados da entidade são armazenados no banco de dados quando
a transação associada à operação persist for concluída.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Se a entidade já estiver gerenciada, a operação persist será ignorada, embora a


operação persistirá em cascata para entidades relacionadas que tenham o elemento
em cascata configurado como PERSIST ou ALL na anotação de relacionamento.
• Se persist for chamado em uma instância de entidade removida, a entidade será
gerenciada.
• Se a entidade for destacada, a persistência lançará um IllegalArgumentException, ou
a confirmação da transação falhará.

Obs.: as entidades têm um ciclo de vida que está relacionado ao fato de elas terem sido
persistidas ou não no banco de dados.

@PersistenceContext
EntityManager em;
...
public LineItem createLineItem(CustomerOrder order, Product product, int quantity) {
LineItem li = new LineItem(order, product, quantity);
order.getLineItems().add(li);
em.persist(li);
return li;
}

• A operação persist é propagada para todas as entidades relacionadas à entidade de


chamada que possuem o elemento cascade configurado como ALL ou PERSIST na
anotação de relacionamento:

@OneToMany(cascade=ALL, mappedBy=”order”)
public Collection<LineItem> getLineItems() {
return lineItems;
}
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
JPA III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (FCC/TRT 19ª REGIÃO – AL/2011/TÉCNICO JUDICIÁRIO – TECNOLOGIA DA IN-
FORMAÇÃO) Os estados do ciclo de vida de uma instância de uma entidade, definidos
na JPA 2.0, são
a. novo (new), gerenciado (managed), destacado (detached) e removido (removed).
b. ativo (active), inativo (inactive) e removido (removed).
c. novo (new), temporário (temporary), permanente (permanent) e destacado (detached).
d. novo (new), temporário (temporary) e destacado (detached).
e. gerenciado (managed), temporário (temporary), permanente (permanent) e desta-
cado (detached).

COMENTÁRIO
Conforme visto durante a aula, os estados do ciclo de vida de uma instância de uma enti-
dade, definidos na JPA 2.0, são novo (new), gerenciado (managed), destacado (detached)
e removido (removed).
25m

GABARITO
1. . a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JPA IV

REMOVENDO INSTÂNCIAS DE ENTIDADE

• Instâncias de entidades gerenciadas são removidas chamando o método remove ou


por uma operação de remoção em cascata chamada de entidades relacionadas que
possuem o conjunto cascade=REMOVE ou cascade=ALL definido na anotação de
relacionamento.
• Se o método remove for invocado em uma nova entidade, a operação de remoção
será ignorada, embora a remoção caia em cascata para entidades relacionadas que
tenham o elemento cascade configurado como REMOVE ou ALL na anotação de rela-
cionamento.

ATENÇÃO
A entidade é nova, ainda não estava persistida e então foi feita o REMOVE dela.

• Se a remoção for invocada em uma entidade desanexada, o remove emitirá uma Ille-
galArgumentException, ou a confirmação da transação falhará.
• Se invocado em uma entidade já removida, a remoção será ignorada.
• Os dados da entidade serão removidos do armazenamento de dados quando a tran-
sação for concluída ou como resultado da operação de flush.
• No exemplo a seguir, todas as entidades LineItem associadas ao pedido também são
removidas, pois CustomerOrder.getLineItems tem cascade=ALL definido na anotação
de relacionamento:

public void removeOrder(Integer orderId) {


try {
CustomerOrder order = em.find(CustomerOrder.class, orderId);
em.remove(order);
}...
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ATENÇÃO
Há uma remoção da ordem para que a entidade seja gerenciada e posteriormente removida.

Sincronizando dados da entidade no banco de dados

Obs.: sincronizar é o mesmo que salvar as alterações, sincronizar o que está na memória
JAVA com o que está na memória do banco de dados.

• O estado de entidades persistentes é sincronizado com o banco de dados quando a


transação com a qual a entidade está associada é confirmada.
• Se uma entidade gerenciada estiver em um relacionamento bidirecional com outra enti-
dade gerenciada, os dados serão persistentes, com base no lado proprietário do rela-
cionamento.
• Para forçar a sincronização da entidade gerenciada para o armazenamento de dados,
chama-se o método flush da instância do EntityManager. ( )
5m
• Se a entidade estiver relacionada a outra entidade e a anotação de relacionamento
tiver o elemento em cascata configurado como PERSIST ou ALL, os dados da enti-
dade relacionada serão sincronizados com o armazenamento de dados quando o flush
for chamado.
• Se a entidade for removida, chamar o flush removerá os dados da entidade do armaze-
namento de dados.

Unidades de Persistência

Obs.: a camada que gerencia a conexão direta com o banco de dados é chamada de
PersistenceContents.

• Uma unidade de persistência define um conjunto de todas as classes de entidade que


são gerenciadas por instâncias do EntityManager em um aplicativo.
• Esse conjunto de classes de entidade representa os dados contidos em um único arma-
zenamento de dados.
• Unidades de persistência são definidas pelo arquivo de configuração persistence.xml.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<persistence>
<persistence-unit name=”OrderManagement”>
<jta-data-source>jdbc/MyOrderDB</jta-data-source>
<jar-file>MyOrderApp.jar</jar-file>
<class>com.widgets.CustomerOrder</class>
<class>com.widgets.Customer</class>
</persistence-unit>
</persistence>

Consultando Entidades

O JPA fornece os seguintes métodos para consultar entidades:

• A linguagem de consulta Java Persistence (JPQL) é uma linguagem simples, baseada


em sequência de caracteres, semelhante ao SQL, usada para consultar entidades e
seus relacionamentos;
10m

Obs.: o JPQL é muito parecido com SQL, porém mais poderoso, pois tem uma orientação
objeto, permite que navegue nas entidades, entre outros.

• A APICriteria é usada para criar consultas de tipos seguros usando APIs da linguagem
de programação Java para consultar entidades e seus relacionamentos.

Obs.: é baseada na chamada de método que vai chamando e concatenando a chamada


para no final executar a transação e convertido para SQL.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Tanto o JPQL quanto o Criteria API possuem vantagens e desvantagens.


• Com apenas algumas linhas, as consultas JPQL são geralmente mais concisas e mais
legíveis do que as consultas Criteria.
• Desenvolvedores familiarizados com SQL acharão fácil aprender a sintaxe do JPQL.
• As consultas nomeadas em JPQL podem ser definidas na classe de entidade usando
uma anotação de linguagem de programação Java ou no descritor de implementação
do aplicativo.
• As consultas JPQL não são tipadas, no entanto, e requerem uma conversão ao recupe-
rar o resultado da consulta do gerenciador de entidades.
• Isso significa que os erros de conversão de tipos podem não ser detectados em tempo
de compilação.
• Consultas JPQL não suportam parâmetros abertos.

ATENÇÃO
Um outro problema obtido com o JPQL, que talvez seja até maior, é que, ao fazer um
JPQL, não pode fazer consultas, chamadas de consultas abertas, o que vai ter são parâ-
metros que são imutáveis para evitar problemas na injeção e no código.

• Consultas via Criteria API permitem que se defina a consulta na camada de negócios
do aplicativo.
• Embora isso também seja possível usando consultas dinâmicas JPQL, as consultas
Criteria fornecem melhor desempenho porque as consultas dinâmicas JPQL devem
ser analisadas sempre que forem chamadas.
• As consultas via Criteria são seguras e, portanto, não exigem conversão de tipos, como
as consultas de JPQL.

ATENÇÃO
As consultas via Criteria estão mais ligadas ao código, será uma consulta mais programá-
tica no código e já consegue fazer as validações do tipo de forma prévia, sem a possibili-
dade de erro de conversão do tipo.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A API Criteria é apenas outra API da linguagem de programação Java e não exige que
os desenvolvedores aprendam a sintaxe de outra linguagem de consulta.
15m
• As consultas via Criteria são geralmente mais detalhadas do que as consultas JPQL e
exigem que o desenvolvedor crie vários objetos e realize operações nesses objetos
antes de enviar a consulta ao gerenciador de entidades.

CRIAÇÃO DE ESQUEMA DO BANCO DE DADOS

• O provedor de persistência pode ser configurado para criar automaticamente as tabe-


las do banco de dados, carregar dados nas tabelas e remover as tabelas durante a
implantação da aplicação usando propriedades padrão no descritor de implantação da
aplicação.
• Essas tarefas são normalmente usadas durante a fase de desenvolvimento de uma
liberação, não em um banco de dados de produção.
• A seguir, um exemplo de um descritor de implantação persistence.xml que especifica
que o provedor deve eliminar todos os artefatos de banco de dados usando um script
fornecido, criar os artefatos com um script fornecido e carregar dados de um script for-
necido quando a aplicação for implantada.

<?xml version=”1.0” encoding=”UTF-8”?>


<persistence version=”2.1” xmlns=”http://xmlns.jcp.org/xml/ns/
persistence”
xmlns:xsi=”http://www.w3ºrg/2001/XMLSchema-instance”
xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd”>
<persistence-unit name=”examplePU” transaction-type=”JTA”>
<jta-data-source>java:global/ExampleDataSource</jta-data-source>
<properties>
<property name=”javax.persistence.schema-generation.data-
base.action”
value=”drop-and-create”/>
<property name=”javax.persistence.schema-generation.create-source”
value=”script”/>
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<property name=”javax.persistence.schema-generation.create-s-
cript-source”
value=”META-INF/sql/create.sql” />
<property name=”javax.persistence.sql-load-script-source”
value=”META-INF/sql/data.sql” />
<property name=”javax.persistence.schema-generation.drop-source”
value=”script” />
<property name=”javax.persistence.schema-generation.drop-s-
cript-source”
value=”META-INF/sql/drop.sql” />
</properties>
</persistence-unit>
</persistence>

CONFIGURANDO UMA APLICAÇÃO PARA CRIAR OU DESCARTAR TABELAS


DE BANCO DE DADOS

• A propriedade javax.persistence.schema-generation.database.action é usada para


especificar a ação executada pelo provedor de persistência quando a aplicação é
implantada.
• Se a propriedade não estiver configurada, o provedor de persistência não criará nem
eliminará nenhum artefato do banco de dados.
20m

Configuração Descrição
none Nenhuma criação ou exclusão de esquema ocorrerá.

O provedor criará os artefatos do banco de dados na implantação da aplicação. Os


create
artefatos permanecerão inalterados após a reimplantação da aplicação.

drop-and- Quaisquer artefatos no banco de dados serão excluídos e o provedor criará os


create artefatos do banco de dados na implementação.
drop Quaisquer artefatos no banco de dados serão excluídos na implantação da aplicação.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Configurando uma aplicação para criar ou descartar tabelas de banco de dados

• Por padrão, os metadados objeto/relacional na unidade de persistência são usados


para criar os artefatos do banco de dados.
• Pode-se também fornecer scripts usados pelo provedor para criar e excluir os artefatos
do banco de dados.
• As propriedades javax.persistence.schema-generation.create-source e javax.persis-
tence.schema- generation.drop-source controlam como o provedor criará ou excluirá
os artefatos do banco de dados.

Obs.: há a opção de utilizar algum script, que talvez no banco de dados tenha algum
comando especifico e então cria-se o comando SQL que vai gerar as tabelas do banco de
dados. Mas, caso o banco de dados seja mais simples, não é necessário criar um script pois
o sistema ou contêiner vai analisar a relação entre as classes e criar tabelas automatica-
mente com base nos metadados.

Configuração Descrição

Utiliza os metadados objeto/relacional no aplicativo para criar ou excluir os


metadata
artefatos do banco de dados.

script Utiliza um script fornecido para criar ou excluir os artefatos do banco de dados.

Utiliza uma combinação de metadados objeto/relacional e, em seguida, um


Metadata-then-script script fornecido pelo usuário para criar ou excluir os artefatos do banco de
dados.
Utiliza uma combinação de um script fornecido pelo usuário e, em seguida,
script-then-
os metadados objeto / relacional para criar e excluir os artefatos do banco de
metadata
dados

Carregando dados usando scripts SQL


25m

• Para preencher as tabelas de banco de dados com dados antes do carregamento do


aplicativo, especifica-se o local de um script de carregamento na propriedade javax.
persistence.sql-load- script-source.
• A localização especificada nesta propriedade é relativa à raiz da unidade de persistência.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Neste exemplo, o script de carregamento é um arquivo chamado data.sql no diretório


META- INF/sql relativo a raiz da unidade de persistência:

<property name=”javax.persistence.sql-load-script-source”
value=”META-INF/sql/data.sql” />

ATENÇÃO
Os comandos SQL de inserção de dados no banco de dados, para criar dados fictícios ou
para criar listas de dados iniciais como listas de estados ou municípios, já pré-carregados
no banco de dados.

1. (FCC/TRT - 9ª REGIÃO (PR)Técnico JudiciárioÁrea Apoio Especializado/2015)


Em uma aplicação que utiliza JPA e Hibernate, no arquivo persistence.xml
a. são definidas as configurações do servidor de aplicação, como número de conexões
simultâneas permitidas e dados de log.
b. é definido o mapeamento objeto-relacional entre as tabelas do banco de dados e as
classes de entidade da aplicação.
c. são definidas as queries nomeadas, que são queries pré-definidas que podem ser
chamadas pelo nome a partir de classes de acesso a dados da aplicação.
d. há o mapeamento de componentes da camada de apresentação para os respectivos
componentes da camada de acesso a dados da aplicação.
e. são definidas as propriedades de conexão com o banco de dados, como o driver
JDBC, a URL de conexão, o nome do usuário e a senha.

COMENTÁRIO
• O mapeamento entre as tabelas de entidades vai ser direto na entidade.
• As queries são definidas no código.
<?xml version=”1.0” encoding=”UTF-8”?>
<persistence xmlns=”http://xmlns.jcp.org/xml/ns/persistence”
xmlns:xsi=”http://www.w3ºrg/2001/XMLSchema-instance” version=”2.1”
xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd”>
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
JPA IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

<persistence-unit name=”TestPersistence” transaction-type=”RE-


SOURCE_LOCAL”>
<class>
<!-- Entity Manager Class Name -->
</class>
<properties>
<property name=”javax.persistence.jdbc.driver” value=”Database Dri-
ver Name” />
<property name=”javax.persistence.jdbc.url” value=”Database Url” />
<property name=”javax.persistence.jdbc.user” value=”Database
Username” />
<property name=”javax.persistence.jdbc.password” value=”Database
Password” />
</properties>
</persistence-unit>
</persistence>

GABARITO
1. E

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

EJB

Bibliografia

• The Java EE 6 Tutorial: <https://docs.oracle.com/javaee/6/tutorial/doc/gijsz.html>.

Introdução

Enterprise Beans são componentes Java EE que implementam a tecnologia Enterprise


JavaBeans (EJB). São executados no contêiner EJB, que é um servidor Java EE. Embora
transparente para o desenvolvedor do aplicativo, o contêiner EJB fornece serviços no nível
do sistema, como transações e segurança, para seus beans corporativos. Esses serviços
5m
permitem que se crie e implante rapidamente beans corporativos, que formam o núcleo de
aplicativos Java EE transacionais.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é um Enterprise Bean?

É escrito na linguagem de programação Java. Um Enterprise Bean é um componente do


lado do servidor que encapsula a lógica de negócios de um aplicativo. Desse modo, a lógica
de negócios é o código que cumpre o propósito do aplicativo. Em um aplicativo de controle
de estoque, por exemplo, os Enterprise Beans podem implementar a lógica de negócios em
métodos chamados “checarNivelEstoque” e “solicitarProduto”. Invocando esses métodos, os
clientes podem acessar os serviços de estoque fornecidos pelo aplicativo.

Benefícios dos Enterprise Beans

Simplificam o desenvolvimento de aplicativos grandes e distribuídos: como o contêiner


EJB fornece serviços no nível do sistema, o desenvolvedor pode se concentrar na solução de
problemas de negócios. O contêiner EJB é responsável pelos serviços como gerenciamento
10m
de transações e autorização de segurança. Como os Beans contém a lógica de negócios do
aplicativo, o desenvolvedor do cliente pode se concentrar na camada de apresentação, não
precisa codificar as rotinas que implementam regras de negócios ou acessam bancos de
dados. Dito isso, os Enterprise Beans são componentes portáteis, o desenvolvedor pode criar
aplicativos a partir de beans existentes, desde que usem as APIs padrão, esses aplicativos
podem ser executados em qualquer servidor Java EE compatível.
Quando utilizar Enterprise Beans?
O aplicativo deve ser escalável para acomodar um número crescente de usuários, pode-se
necessitar distribuir os componentes de um aplicativo por várias máquinas. Os Enterprise
Beans de um aplicativo não só podem ser executados em máquinas diferentes, mas também
sua localização permanecerá transparente para os clientes. Com isso, as transações devem
garantir a integridade dos dados, assim, os beans corporativos suportam transações, os
mecanismos que gerenciam o acesso simultâneo de objetos compartilhados. Além disso,
terá uma variedade de clientes. Com apenas algumas linhas de código, os clientes remotos
podem localizar facilmente os Enterprise Beans. Esses clientes podem ser pequenos,
diversos e numerosos.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No diagrama acima, há um web browser e uma aplicação desktop, que irá se comunicar
direto com a Enterprise Bean. Já a web browser irá de encontro com um web container, que
irá consumir por meio do Enterprise Bean. Além disso, há fronteiras que dividem a máquina
15m
do cliente e o servidor Java EE. Por fim, há o acesso ao banco de dados.

Tipos de Enterprise Beans

• Session: executa uma tarefa para um cliente; opcionalmente, pode implementar um


serviço da web;
• Message-driven: atua como ouvinte de um determinado tipo de sistema de mensagens,
como a API do Java Message Service.

Basicamente, existem beans onde há a comunicação direta, ou seja, uma comunicação


síncrona, e outros que são de comunicações assíncronas, nas quais se dispara uma
mensagem e continua a execução do programa, que entrará em uma fila de processamento
e será processada no futuro.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é um Session Bean?


Um Session Bean encapsula a lógica de negócios que pode ser chamada programaticamente
por um cliente local, remoto ou da web. Para acessar um aplicativo que é implementado no
servidor, o cliente chama os métodos do Session Bean. O Session Bean realiza trabalho
para seu cliente, protegendo-o da complexidade executando tarefas de negócios dentro do
servidor. Ademais, não é persistente, ou seja, seus dados não são salvos em um banco de
dados. Existem três tipos de Session Beans.

Stateful Session Beans

O estado de um objeto consiste nos valores de suas variáveis de instância. Em um Stateful


Session Bean, as variáveis de instância representam o estado de uma sessão exclusiva de
cliente/bean. Um bean de sessão é semelhante a uma sessão interativa, não é compartilhado,
ele pode ter apenas um cliente. Quando o cliente termina, seu bean de sessão encerra. O
estado é retido pela duração da sessão cliente/bean. Se o cliente remover o bean, a sessão
será encerrada e o estado desaparecerá. Por exemplo, um carrinho de compras de um site.
Enquanto o cliente estiver logado, o carrinho deve manter as suas compras.
20m

Stateless Session Beans

Não mantém um estado conversacional com o cliente. Quando um cliente chama os


métodos de Stateless Session Beans, as variáveis de instância do bean podem conter um
estado específico para esse cliente, mas apenas pela duração da chamada. Como podem
suportar vários clientes, os Stateless Session Beans podem oferecer melhor escalabilidade
para aplicativos que exigem muitos clientes. Um Stateless Session Bean pode implementar
um serviço da web, mas um Stateful Session Bean não pode. Por exemplo, é possível haver
um bean para efetuar um pagamento, ou seja, após o processo, não é preciso guardar
aquelas informações.

Singleton Session Beans

É instanciado uma vez por aplicativo e existe pelo ciclo de vida do aplicativo. São projetados
para circunstâncias em que uma única instância de Enterprise Bean é compartilhada e acessada
simultaneamente pelos clientes. Oferecem funcionalidade semelhante aos stateless Session
Beans, mas diferem deles no sentido de que há apenas um por aplicativo, ao contrário de
um conjunto de stateless Session Beans. Ademais, podem implementar endpoints de web
services. Trata-se de uma informação que será aplicada a todas as aplicações.

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando usar Stateful Session Beans?

O estado do bean representa a interação entre o bean e um cliente específico. Desse


modo, precisa manter informações sobre o cliente nas chamadas do método, pois o bean é
um mediador entre o cliente e os outros componentes do aplicativo, apresentando uma visão
simplificada para o cliente. Nos bastidores, o bean gerencia o fluxo de trabalho de vários
Enterprise Beans.

Quando usar Stateless Session Beans?

Para melhorar o desempenho, quando o estado do bean não tem dados para um cliente
específico. Em uma única chamada de método, o bean executa uma tarefa genérica para
todos os clientes. Por exemplo, você pode usar um Stateless Session Bean para enviar um
e-mail que confirme um pedido on-line. O bean implementou uma web service.

Quando usar Singleton Session Beans?

Quando um estado precisa ser compartilhado através do aplicativo, um único Enterprise


Bean precisa ser acessado por vários threads simultaneamente, o aplicativo precisa de um
Enterprise Bean para executar tarefas na inicialização e no encerramento do aplicativo e
quando o bean implementar um web service.
25m

Tipos de Session Beans


ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é um Message-Driven Bean?

É um Enterprise Bean que permite que aplicativos Java EE processem mensagens de


forma assíncrona. Normalmente age como um listener de mensagens JMS. As mensagens
podem ser enviadas por qualquer componente Java EE (um aplicativo cliente, outro bean
corporativo ou um componente da Web). Podem processar mensagens JMS ou outros tipos
de mensagens.

Qual a diferença entre Message-Driven Beans e Session Beans?

A principal diferença é que os clientes não acessam o Message-Driven Beans por meio
de interfaces. Ao contrário de um Session Bean, ele tem apenas uma classe de bean.
Assemelha-se a um bean de sessão sem estado, pois não retém nenhum dado ou estado
de conversação para um cliente específico, todas as instâncias são equivalentes, permitindo
que o contêiner EJB atribua uma mensagem a qualquer instância de bean e um único bean
pode processar mensagens de vários clientes.

Características dos Message-Driven Beans

São executados após o recebimento de uma única mensagem do cliente. São acionados
de forma assíncrona. Geralmente, são relativamente de curta duração e não representam
dados compartilhados diretamente no banco de dados, mas podem acessar e atualizar esses
dados. Podem estar conscientes das transações e não têm estado.

Quando Utilizar Message-Driven Beans?

Session Beans permitem enviar mensagens JMS e recebê-las de forma síncrona, mas
não de forma assíncrona. Para evitar a dependência dos recursos do servidor, não se utiliza
o bloqueio de recebimento síncrono em um componente do lado do servidor. Em geral, as
mensagens JMS não devem ser enviadas ou recebidas de forma síncrona. Para receber
mensagens de forma assíncrona, usa-se um Message-Driven Beans.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No diagrama acima, a aplicação ao cliente manda uma mensagem, que entra em uma fila
de processamento que recebe a mensagem e a entrega para o servidor, no qual está o EJB
container, onde está a instância do Message-Driven Beans.
30m

Java EE Containers

• Java EE server: a parte runtime de um produto Java EE. Um servidor Java EE fornece
containers EJB e da web;
• Enterprise JavaBeans (EJB) container: gerencia a execução de beans corporativos
para aplicativos Java EE. Os beans corporativos e seu contêiner são executados no
servidor Java EE;
• Web container: gerencia a execução de páginas da Web, servlets e alguns componentes
EJB para aplicativos Java EE. Componentes da Web e seu contêiner são executados
no servidor Java EE;
• Application client container: gerencia a execução de componentes do aplicativo cliente.
Clientes de aplicativos e seus contêineres são executados no cliente;
• Applet container: gerencia a execução de applets. Consiste em um navegador da web
e plug-in Java sendo executado no cliente juntos.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (FCC/2015) O Servlet Container que suporta as tecnologias servlet, JSP, JSTL e JSF,
mas não suporta EJB é o:
a. JBoss.
b. WebSphere.
c. GlassFish.
d. Jetty.
e. Weblogic.

COMENTÁRIO
O Servlet Container que suporta as tecnologias servlet, JSP, JSTL e JSF, mas não suporta
EJB, é o Jetty.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
EJB
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (SUGEP-UFRPE/2016) Acerca do Enterprise Java Beans (EJB), analise as


afirmações abaixo.
1) Toda aplicação EJB é executada e gerenciada por um EJB Container. Há diversas
opções de EJB Container disponíveis.
2) A arquitetura EJB define um suporte sofisticado para utilização de transações. Esse
suporte é integrado com a Java Transaction API (JTA) e oferece, inclusive, a possibilidade
de realizar transações distribuídas.
3) A arquitetura EJB permite que as aplicações sejam acessadas por múltiplos usuários
simultaneamente, de maneira controlada, para evitar problemas de concorrência.
4) Por questões de segurança, as aplicações EJB não podem ser acessadas remotamente
através dos diversos protocolos de comunicação.
Estão corretas:
a. 1, 2, 3 e 4.
b. 1, 2 e 3, apenas.
c. 1, 2 e 4, apenas.
d. 1, 3 e 4, apenas.
e. 2, 3 e 4, apenas.

COMENTÁRIO
Existem diversos protocolos para os quais é possível comunicar, no que se refere às
aplicações EJB.
35m

GABARITO
1. d
2. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
ANOTAÇÕES

preparada e ministrada pelo professor Tiago Lage Payne de Pádua.


A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva
deste material.

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JSF

O JavaServer Faces (JSF) é uma tecnologia muito utilizada para desenvolver pági-
nas da web.

Bibliografia:

Recomenda-se a leitura dos tutoriais em: https://docs.oracle.com/javaee/7/tutorial/


jsf-intro.htm

Esse conteúdo da Oracle é utilizado com frequência pelas bancas examinadoras para
elaborar suas provas.

Introdução

"A tecnologia JavaServer Faces é um framework de componentes do lado do servidor


para criar aplicativos da Web baseados na tecnologia Java".
O JSF possui um escopo de atuação bem amplo, permitindo, dentre outras coisas, geren-
ciar estados, views e o fluxo de telas. É por isso que ele é considerado um framework, visto
que funciona como uma estrutura completa para a aplicação.
5m
Nesse sentido, o JSF possuirá componentes visuais e lógicos, que estarão codificados
ao lado do servidor que for escolhido.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Além disso, o JSF também funciona como uma especificação, que tem várias implemen-
tações. Assim, é possível colocar uma aplicação JSF em vários servidores JEE que imple-
mentam aquela especificação.
O JSF é bastante utilizado para o desenvolvimento de aplicações web, pois é adequado,
por exemplo, para aplicações do tipo carrinho de compras ou sistemas que gerenciam o fluxo
de entrada em prédios.
A depender da finalidade da aplicação, talvez o JSF não seja tão útil. Por exemplo, é pos-
sível fazer um blog utilizando JSF, mas existem outros frameworks mais indicados para isso
em PHP. Já quando se tratar de uma aplicação, principalmente se for corporativa, o JSF vem
bastante ao caso.

Características

Uma API para representar componentes e gerenciar seu estado; manipulação de eventos,
validação no lado do servidor e conversão de dados; definir navegação de página; apoiar a
internacionalização e acessibilidade; e fornecendo extensibilidade para todos esses recursos.

Obs.: nesse sentido, o JSF funciona como um “canivete suíço”, ou seja, possui múltiplas
funcionalidades. Todos os seus recursos são extensíveis pelo desenvolvedor. Nesse
sentido, apesar de o JSF trabalhar com um validador padrão, se for de interesse do
desenvolvedor, pode-se criar um outro validador específico para o caso.

Possuir bibliotecas de tags para adicionar componentes a páginas da Web e para conec-
tar componentes a objetos do lado do servidor.
10m
A tecnologia JavaServer Faces fornece um modelo de programação bem definido e várias
bibliotecas de tags.
As bibliotecas de tags contêm controladores de tags (handlers) que implementam as tags
de componentes.
Esses recursos facilitam significativamente o ônus de criar e manter aplicativos da Web
com interfaces de usuário (UIs) do lado do servidor.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: esse modelo de programação fornecido pelo JSF é o framework e conta com opiniões
bastante fortes de como o usuário deve desenvolver a sua página. É possível que o
desenvolvedor não concorde com essas opiniões, contudo, precisará segui-las, pois
será fornecido um modelo de programação.

O que é uma aplicação JavaServer Faces

A funcionalidade fornecida por um aplicativo JavaServer Faces é semelhante a de qual-


quer outro aplicativo da Web Java. Um aplicativo típico do JavaServer Faces inclui as seguin-
tes partes:
• Um conjunto de páginas da web em que os componentes são dispostos;
• Um conjunto de tags para adicionar componentes à página da web;
• Um conjunto de beans gerenciados (POJOs);
• Um descritor de implementação da web (arquivo web.xml).

Opcionalmente, um ou mais arquivos de recursos de configuração da aplicação, como


um arquivo faces-config.xml, que podem ser usados para definir regras de navegação de
página e configurar beans e outros objetos customizados, como componentes customizados.
Opcionalmente, um conjunto de objetos personalizados, que podem incluir componen-
tes personalizados, validadores, conversores ou listeners, criados pelo desenvolvedor
do aplicativo.

Obs.: esses componentes personalizados fazem parte das estruturas que tanto o JSF irá
fornecer quanto o desenvolvedor pode expandi-las, na medida em que vai desenvol-
vendo. É possível criar as próprias tags do JSF.

Opcionalmente, um conjunto de tags personalizadas para representar objetos personali-


zados na página.
15m

Obs.: é recomendado conhecer os nomes dos arquivos, pois há itens em que a banca pode
dispor o nome do arquivo XML errado.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: um browser só reconhece arquivos HTML, CSS e JavaScript. O browser, em si, não
“entende” os arquivos JSF e Java. Assim, toda aplicação desenvolvida via JSF, no
final, deve passar por um processo para gerar, como resultado, um arquivo HTML,
CSS ou JavaScript. Regra geral, esse processo é chamado de renderização.

Tags de componente são usadas para adicionar componentes à view, que é a represen-
tação do lado do servidor da página.
Além dos componentes, a página da Web também pode fazer referência a objetos, como
os seguintes:
• Listeners, validadores e conversores de eventos registrados nos componentes;
• Os componentes do JavaBeans que capturam os dados e processam a funcionali-
dade específica do aplicativo dos componentes;
• A pedido do cliente, a visualização é renderizada como uma resposta. Renderização
é o processo pelo qual, com base na visualização do lado do servidor, o contêiner da
web gera uma saída, como HTML ou XHTML, que pode ser lida pelo cliente, como um
navegador.
20m
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Benefícios

Separação entre comportamento e apresentação para aplicativos da web.

Obs.: quando o JSF surgiu, a estruturação da programação para a web ainda não era tão
madura quanto é hoje. Dessa forma, ocorria muita mistura entre o código da view e o
código do controlador, sendo a manutenção desse código muito complexa. É por isso
que o JSF surge como um modelo de programação, sendo uma de como se deveria
organizar uma página da web. Um dos principais elementos é a orientação para que
se divida o código da apresentação do código da view.

A separação da lógica da apresentação permite que cada membro de uma equipe de


desenvolvimento de aplicativos da Web se concentre em uma única parte do processo de
desenvolvimento e forneça um modelo de programação simples para vincular as partes.

Obs.: ou seja, uma equipe pode trabalhar na view e outra pode se concentrar na lógica de
negócio. Assim, posteriormente é possível unir esses códigos, mas em componentes
que interagem entre si e logicamente separados.

Aproveitar os conceitos familiares de componentes e da web, sem limitá-los a uma deter-


minada tecnologia de script ou linguagem de marcação.

Obs.: nesse sentido, é possível expandir as tags em JSF para criar componentes ricos e in-
terativos na medida em que for surgindo a necessidade. Não há uma limitação dentro
do JSF.

API em Camadas

As camadas de APIs permite vários casos de uso importantes, como a utilização de


diferentes tecnologias de apresentação, a criação de seus próprios componentes personali-
zados diretamente das classes de componentes e a geração de saída para vários dispositi-
vos clientes.

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

25m
Facelets

É a tecnologia de apresentação preferida para a criação de aplicativos da Web baseados


na tecnologia JavaServer Faces.
A tecnologia Facelets oferece várias vantagens:
• O código pode ser reutilizado e estendido para componentes por meio dos recursos
como templates e componentes compostos;
• Usa-se anotações para registrar automaticamente o bean gerenciado como um recurso
disponível para aplicativos JavaServer Faces. Além disso, as regras de navegação
implícitas permitem que os desenvolvedores configurem rapidamente a navegação
de páginas.

Ciclo de Vida

Cada aplicativo da web possui um ciclo de vida. Tarefas comuns, como manipular solici-
tações recebidas, decodificar parâmetros, modificar e salvar estados e renderizar páginas da
web no navegador, são executadas durante o ciclo de vida de um aplicativo da web.
Alguns frameworks ocultam os detalhes do ciclo de vida, enquanto outros exigem geren-
ciamento manual.
Por padrão, o JavaServer Faces manipula automaticamente a maioria das ações do ciclo
de vida. No entanto, ele também expõe os vários estágios do ciclo de vida da solicitação,
para que se possa modificar ou executar ações dependendo dos requisitos da aplicação.
30m

Obs.: como o JSF faz um gerenciamento automático, em muitos casos, o usuário acaba
não percebendo a existência desse ciclo de vida.

O ciclo de vida de um aplicativo JavaServer Faces inicia e termina com as seguintes ativi-
dades: O cliente faz uma solicitação para a página da Web e o servidor responde com a página.
O ciclo de vida consiste em duas fases principais: Execute e Render.

Obs.: vale lembrar que o resultado do processamento de um JSF deve ser um conteúdo
HTML.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Execute

Durante a fase de execução, várias ações podem ocorrer:


• A view do aplicativo é criada ou restaurada.
• Os valores do parâmetro de solicitação são aplicados.
• Conversões e validações são realizadas para valores de componentes.
• Os beans gerenciados são atualizados com valores de componentes.
• A lógica do aplicativo é chamada.

Para uma primeira solicitação (inicial), somente a visão é construída. Para solicitações
subsequentes (postback), algumas ou todas as outras ações podem ocorrer.

Render

Na fase Render, a view solicitada é renderizada como uma resposta ao cliente.


A renderização é tipicamente o processo de geração de saída, como HTML ou XHTML,
que pode ser lido pelo cliente, geralmente um navegador.

Exemplo: um aplicativo de exemplo hello1 passa pelos seguintes estágios quando é


implantado no GlassFish Server:
1. Quando o aplicativo hello1 é construído e implantado no GlassFish Server, o aplicativo
está em um estado não iniciado.
2. Quando um cliente faz uma solicitação inicial para a página da web index.xhtml, o apli-
cativo hello1 Facelets é compilado.
3. O aplicativo Facelets compilado é executado e uma nova árvore de componentes é
construída para o aplicativo hello1 e colocada em um FacesContext.
4. A árvore de componentes é preenchida com o componente e a propriedade do bean
gerenciado associada a ela, representada pela expressão EL hello.name.
5. Uma nova view é construída, baseada na árvore de componentes.
6. A view é renderizada para o cliente solicitante como uma resposta.
7. A árvore de componentes é destruída automaticamente.
8. Em solicitações subsequentes (postback), a árvore de componentes é reconstruída e
o estado salvo é aplicado. 
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: essa árvore de componentes será o modelo lógico, em memória, que será mantido
pelo JSF para renderizar a página.

DIRETO DO CONCURSO
1. (2009/CESPE/SECONT-ES/AUDITOR DO ESTADO – TECNOLOGIA DA INFORMA-
ÇÃO) O JSF é um framework web embasado em interface gráfica, capaz de renderizar
componentes e manipular eventos em aplicações web no padrão Java EE, no qual os
componentes JSF são orientados a eventos. O JSF fornece, ainda, mecanismos para
conversão, validação, execução de lógica de negócios e controle de navegação.

COMENTÁRIO
Item correto, pois apresenta um conceito geral do JSF.

GABARITO
1. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JSF II

MODELO DE COMPONENTES DE INTERFACE DO USUÁRIO

Os componentes JavaServer Faces são os blocos de construção de uma view


JavaServer Faces.
Um componente pode ser um componente de interface do usuário (UI) ou um
componente não UI.
Os componentes de UI do JavaServer Faces são elementos configuráveis e reutilizáveis
que compõem as interfaces com o usuário dos aplicativos JavaServer Faces.

Obs.: Nesse sentido, os componentes podem ser reutilizados várias vezes em uma página
e, além disso, ele ainda pode ser parametrizado de formas diferentes, o que pode
mudar o comportamento ou as ações resultantes por meio de atributos do XML.

Um componente pode ser simples, como um botão, ou pode ser composto, como uma
tabela composta de vários componentes.
A tecnologia JavaServer Faces fornece uma arquitetura de componentes que inclui
o seguinte:
• Um conjunto de classes javax.faces.component.UIComponent para especificar o
estado e o comportamento dos componentes da interface do usuário;
• Um modelo de renderização que define como renderizar os componentes de
várias maneiras;
• Um modelo de conversão que define como registrar conversores de dados em um
componente;
• Um modelo de evento e listener que define como manipular eventos de componentes;
5m
• Um modelo de validação que define como registrar validadores em um componente.

Obs.: Ou seja, é possível que se aplique algum tipo de validação a um input de texto para
saber se o dado inserido está certo ou errado. Existem regras de validação diferentes
para diferentes ações, tais como: tornar um número digitado válido, reconhecer um
CPF como válido etc.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

CLASSES DE COMPONENTES DA INTERFACE DO USUÁRIO

A tecnologia JavaServer Faces fornece um conjunto de classes de componentes de


interface do usuário e interfaces comportamentais associadas que especificam toda a
funcionalidade do componente de UI, como manter o estado do componente, manter uma
referência a objetos e orientar a manipulação e a renderização de eventos para um conjunto
de componentes padrão.
As classes de componentes são completamente extensíveis, permitindo que os criadores
de componentes criem seus próprios componentes personalizados.
A classe base é abstrata para todos os componentes é javax.faces.component.
UIComponent. As classes do componente UI do JavaServer Faces estendem a classe
UIComponentBase (uma subclasse do UIComponent), que define o estado e o comportamento
padrão de um componente.

Obs.: Nesse sentido, existem duas formas de estender o JSF. Uma delas é criar novos
componentes básicos, o que, no geral, não é muito comum no dia a dia. A outra forma
é compor componentes utilizando o Facelets, o que já é mais comum no dia a dia.

MODELO DE RENDERIZAÇÃO DE COMPONENTES

As funcionalidades dos componentes do JSF são definidas pelas classes do componente,


enquanto a renderização do componente pode ser definida por uma classe de renderizador
separada. Esse design tem vários benefícios, incluindo os seguintes:
• Criadores de componentes podem definir o comportamento de um componente uma
vez, mas criar vários representantes, cada um dos quais define uma maneira diferente
de renderizar o componente para o mesmo cliente ou para diferentes clientes.
• Autores de páginas e desenvolvedores de aplicativos podem alterar a aparência de um
componente na página, selecionando a tag que representa a combinação apropriada
de componente e renderizador.

Obs.: A depender da maneira como é feita a combinação para um mesmo componente, é


possível utilizar vários renderizadores, que irão gerar componentes visuais diferentes.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Um kit de renderização define como as classes de componentes são mapeadas para


tags de componentes apropriadas para um determinado cliente (browser/navegador).
A implementação do JavaServer Faces inclui um kit de renderização HTML padrão para
renderização em um cliente HTML.
10m
O kit de renderização define um conjunto de classes javax.faces.render.Renderer para
cada componente que ele suporta. Cada classe Renderer define uma maneira diferente de
renderizar o componente específico para a saída definida pelo kit de renderização.
Por exemplo, um componente UISelectOne possui três renderizadores diferentes. Um
deles renderiza o componente como um grupo de opções. Outro processa o componente como
uma caixa de combinação. O terceiro processa o componente como uma caixa de listagem.

MODELO DE CONVERSÃO

Uma aplicação JSF pode associar um componente a dados do objeto do lado do


servidor. Esse objeto é um componente JavaBeans, como um bean gerenciado. Um aplicativo
obtém e define os dados do objeto para um componente chamando as propriedades de
objeto apropriadas para esse componente.
Quando um componente é vinculado a um objeto, o aplicativo tem duas exibições dos
dados do componente:
• A visualização de modelo, na qual os dados são representados como tipos de dados,
como int ou long.
• A visualização da apresentação, na qual os dados são representados de uma maneira
que pode ser lida ou modificada pelo usuário. Por exemplo, um java.util.Date pode ser
representado como uma cadeia de texto no formato mm/dd/aa ou como um conjunto
de três cadeias de texto.

Obs.: Ou seja, ao enviar a informação que está no bean para o navegador, regra geral, ela
será representada de forma textual como uma string, mesmo que seja uma idade, um
nome ou uma data. Assim, é importante saber, por exemplo, como se converte um
date, que está ao lado do servidor, para a view por meio de uma string. Isso porque
há diferentes maneiras de se digitar uma data, a depender da região em que está o
usuário. Assim, quando essa data voltar para o servidor, é importante que ele saiba
converter essa string novamente para um objeto do tipo date.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A implementação do JSF converte automaticamente os dados do componente entre


essas duas visualizações quando a propriedade do bean associada ao componente é de
um dos tipos suportados pelos dados do componente. Por exemplo, se um componente
UISelectBoolean estiver associado a uma propriedade de bean do tipo java.lang.Boolean, a
implementação JavaServer Faces converterá automaticamente os dados do componente de
String para Boolean.
15m
Pode-se converter os dados de um componente em um tipo diferente do padrão ou
converter o formato dos dados. A tecnologia JavaServer Faces permite registrar uma
implementação javax.faces.convert.Converter em componentes e componentes UIOutput
cujas classes subclassificam UIOutput.

MODELO DE EVENTOS E LISTENERS

O modelo de evento e listener JSF é semelhante ao modelo de eventos JavaBeans, pois


tem classes de eventos e interfaces de listeners fortemente tipadas que um aplicativo
pode usar para manipular eventos gerados por componentes.
A especificação JavaServer Faces define três tipos de eventos: eventos de aplicativo,
eventos de sistema e eventos de modelo de dados.

Obs.: O exemplo mais trivial de um evento é o clique de um botão. Tal evento deverá ser
associado a um código Java que será executado.

EVENTOS DE APLICAÇÃO

São vinculados a uma aplicação específica e são gerados por um UIComponent.


Um objeto de evento identifica o componente que gerou o evento e armazena informações
sobre o evento. Para ser notificado de um evento, uma aplicação deve fornecer uma
implementação da classe do listener e deve registrá-lo no componente que gera o
evento. Quando o usuário ativa um componente, por exemplo, ao clicar em um botão, um
evento é disparado. Isso faz com que a implementação do JavaServer Faces invoque o
método listener que processa o evento.
O JavaServer Faces suporta dois tipos de eventos de aplicativo: eventos de ação e
eventos de mudança de valor.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Um evento de ação (classe javax.faces.event.ActionEvent) ocorre quando o usuário


ativa um componente que implementa o ActionSource (Exemplo: botões e links).
Um evento de mudança de valor (classe javax.faces.event.ValueChangeEvent) ocorre
quando o usuário altera o valor de um componente representado por UIInput ou uma de
suas subclasses. Um exemplo é selecionar uma caixa de seleção, uma ação que resulta na
alteração do valor do componente para true. Os eventos de alteração de valor são acionados
somente se nenhum erro de validação for detectado.
Eventos do sistema são gerados por um objeto em vez de um UIComponent. Eles são
gerados durante a execução de um aplicativo em horários predefinidos. Eles são aplicáveis
a todo o aplicativo e não a um componente específico.
Um evento de modelo de dados ocorre quando uma nova linha de um componente
UIData é selecionada.
20m
Há duas maneiras de fazer com que uma aplicação reaja a eventos de ação ou a eventos
de alteração de valor emitidos por um componente padrão:
• Implementar uma classe listener de evento para manipular o evento e registre o
listener no componente aninhando uma tag f:valueChangeListener ou uma tag
f:actionListener dentro da tag do componente;
• Implementar um método de um bean gerenciado para manipular o evento e referenciar
o método com uma expressão de método no atributo apropriado da tag do
componente.

MODELO DE VALIDAÇÃO

A tecnologia JSF suporta um mecanismo para validar os dados locais de componentes


editáveis (como campos de texto). Essa validação ocorre antes que os dados do modelo
correspondente sejam atualizados para corresponder ao valor local.

Obs.: Por meio da validação, o desenvolvedor pode adicionar uma regra a um determinado
campo. Exemplo: o nome do usuário não pode ter mais que 50 caracteres. Assim,
quando o usuário digitar um nome maior do que 50 caracteres, ocorrerá um erro de
validação, mesmo antes de o valor digitado pelo usuário ser associado ao bean.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Como o modelo de conversão, o modelo de validação define um conjunto de classes


padrão para executar verificações comuns de validação de dados. A biblioteca de tags
do núcleo do JavaServer Faces também define um conjunto de tags que correspondem às
implementações padrão javax.faces.validator.Validator.
A maioria das tags possui um conjunto de atributos para configurar as propriedades do
validador, como os valores mínimo e máximo permitidos para os dados do componente. O
autor da página registra o validador em um componente aninhando a tag do validador na tag
do componente.
O modelo de validação também permite que se crie validadores customizados e as tags
correspondente para executar a validação customizada. O modelo de validação fornece duas
maneiras de implementar a validação customizada:
1. Implementar uma interface do validador que realize a validação;
2. Implementar um método de bean gerenciado que executa a validação.

DIRETO DO CONCURSO
1. (2010/CESPE/MPU/ANALISTA DE INFORMÁTICA/PERITO) A respeito da tecnologia
JSF (JavaServer Faces), julgue os próximos itens. Uma aplicação web deve prover
mecanismos de validação de dados. O JSF fornece vários validadores de dados padrões
que podem ser utilizados no lado do cliente (client-side).
25m

COMENTÁRIO
A validação é feita do lado do servidor (server-side).

GABARITO
1. E

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JSF III

Modelo de navegação
Em blocos anteriores, foi feito o estudo dos demais modelos do JSF, tais como o modelo
de validação de dados, o modelo de conversão e o modelo de componentes. Nesse sentido,
o modelo de navegação é um dos mais elaborados, pois irá ditar como o usuário realiza uma
determinada ação em uma página e navega para outra página.
Navegação é um conjunto de regras para escolher a próxima página a ser exibida após
uma ação do aplicativo, como quando um botão ou link são clicados.
A navegação pode ser implícita ou definida pelo usuário. A navegação implícita ocorre
quando regras de navegação definidas pelo usuário não são configuradas nos arquivos de
recursos de configuração do aplicativo.
Quando se adiciona um componente como um commandButton a uma página Facelets
e atribui outra página como o valor para sua propriedade de ação, o gerenciador de navega-
ção padrão tentará corresponder uma página adequada dentro do aplicativo implicitamente.
No exemplo a seguir, o manipulador de navegação padrão tentará localizar uma página
chamada response.xhtml dentro do aplicativo e navegar até ela:

<h:commandButton value="submit" action="response">

Como regra geral, a navegação implícita é utilizada em casos mais simples. Ex.: um
botão que direciona o usuário para outra página.
As regras de navegação definidas pelo usuário são declaradas em zero ou mais arquivos
de recursos de configuração do aplicativo, como faces-config.xml, usando um conjunto de
elementos XML. A estrutura padrão de uma regra de navegação é a seguinte:

A navegação definida pelo usuário é tratada da seguinte maneira:

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
5m Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Defina as regras no arquivo de recursos de configuração do aplicativo;


• Consulte uma String de resultado do atributo de ação do botão ou componente de link.
Esta String é usada pela implementação do JavaServer Faces para selecionar a regra
de navegação.

Exemplo:

Esta regra determina que quando um componente (como h:commandButton ou


h:commandLink) em greeting.xhtml é ativado, o aplicativo navegará da página greeting.xhtml
para a página response.xhtml se o resultado referenciado pelo tag do componente de botão
é sucesso. Segue exemplo de uma tag h:commandButton de greeting.xhtml que especificaria
um resultado lógico de sucesso:

<h:commandButton id="submit" value="Submeter" action="success"/>

Em aplicativos mais complexos, o resultado lógico pode vir do valor de retorno de um


método de ação em um bean gerenciado.
Este método realiza algum processamento para determinar o resultado.

O ciclo de vida do JSF


10m
O ciclo de vida de um aplicativo refere-se aos vários estágios de processamento desse
aplicativo, desde o início até a sua conclusão. Durante o ciclo de vida de um aplicativo da
Web, tarefas comuns são executadas, incluindo as seguintes:
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Gerenciar os requests recebidos;


• Decodificar parâmetros;
• Modificar e salvar o estado;
• Renderizar páginas da web para o navegador.

Esse ciclo de vida do JSF será um modelo com fases bem definidas e regras bem estru-
turadas sobre como deve ser feita cada uma dessas fases e qual é a sua finalidade, além do
que deve ocorrer se uma dessas fases gerar um erro.

Visão geral do ciclo de vida do JSF


O ciclo de vida de um aplicativo JavaServer Faces começa quando o cliente faz uma
solicitação HTTP para uma página e termina quando o servidor responde com a página,
traduzido para HTML.
O ciclo de vida pode ser dividido em duas fases principais: Execute e Render.
A fase Execute é dividida em subfases para suportar a sofisticada árvore de componentes.
Essa estrutura requer que os dados do componente sejam convertidos e validados,
que os eventos do componente sejam manipulados e que os dados do componente
sejam propagados para os beans de maneira ordenada.
Uma página JavaServer Faces é representada por uma árvore de componentes, cha-
mada visão. Durante o ciclo de vida, a implementação do JavaServer Faces deve construir
a visualização enquanto considera o estado salvo de um envio anterior da página. Quando
o cliente solicita uma página, a implementação do JavaServer Faces executa várias tarefas,
como validar a entrada de dados dos componentes na exibição e converter os dados de
entrada em tipos especificados no lado do servidor.
A implementação do JavaServer Faces executa todas essas tarefas como uma série de
etapas no ciclo de vida de solicitação-resposta do JavaServer Faces.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A depender do nível do concurso, é preciso ter esse diagrama decorado ou, pelo menos,
conhecer boa parte dele. Há muitas informações que podem ser inferidas pelo candidato,
contudo, é possível que uma ordem ou outra seja mais difícil de concluir. É importante saber
que existe uma ordem nesse ciclo de vida, quais são os elementos que podem ser executa-
dos e qual a responsabilidade de cada fase. Isso é bastante cobrado em provas.
15m
O ciclo de vida de solicitação-resposta manipula dois tipos de solicitações: solicitações
iniciais e postbacks.
Uma solicitação inicial ocorre quando um usuário faz uma solicitação para uma página
pela primeira vez.
Uma solicitação de postback ocorre quando um usuário envia o formulário contido em
uma página que foi carregada anteriormente no navegador como resultado da execução de
uma solicitação inicial.
Quando o ciclo de vida recebe uma solicitação inicial, ele executa apenas as fases Res-
tore View e Render Response, porque não há entrada ou ação do usuário para processar.
Por outro lado, quando o ciclo de vida recebe um postback, ele executa todas as fases.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Há uma exceção no ciclo de vida, quando o atributo "immediate" de um componente


é definido como "true", a validação, a conversão e os eventos associados a esses compo-
nentes são processados durante a fase "Apply Request Values Phase", e não em uma fase
posterior.
A fase de execução do ciclo de vida do aplicativo JSF contém as seguintes subfases:

• Restore View;
• Apply Request Values;
• Process Validations;
• Update Model Values;
• Invoke Application; e
• Render Response.

As fases acima são apresentadas em ordem, ou seja, regra geral, elas serão executadas
uma após a outra.

DIRETO DO CONCURSO
1. (2013/CCV-UFC/UFC/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO – ENGENHA-
RIA DE SOFTWARE) O Framework JSF (JavaServer Faces) é utilizado no desenvolvi-
mento de aplicações Java para web que utilizam o padrão de projeto MVC (Model-View-
-Controller). Sobre o JSF 2 é correto afirmar:

a. Recebe requisições dos componentes View do MVC, por meio do JSFServlet.


b. Disponibiliza bibliotecas que suportam Ajax (Asynchronous JavaScript And XML).
c. O arquivo web-config.xml. é o arquivo principal de configuração de aplicações que
usam o JSF.
d. Os mapeamentos das ações e regras de navegação são armazenados, respectiva-
mente, nos arquivos WEB-INF.xml e face-config.xml.
e. Fornece controladores pré-construídos e código para manipular eventos, estimulando
o uso de código Java convencional dentro do componente View do MVC.

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
a. Na realidade, é por meio do FacesServlet.
c. Não se trata do arquivo web-config.xml, mas sim do arquivo web.xml.
20m
d. Na realidade, o correto é web.xml e faces-config.xml.
e. O correto é Controller e não View.

GABARITO
1. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JSF IV

Restore View – Restauração da Visão

Obs.: é importante memorizar o nome dessas fases tanto em inglês quanto em português.
Isso porque cada banca cobra esses nomes de uma maneira diferente.

Quando uma solicitação para uma página JavaServer Faces é feita, geralmente por uma
ação, como quando um link ou um componente de botão é clicado, a implementação do JSF
inicia a fase Restore View.
Durante essa fase, a implementação do JavaServer Faces cria a visualização da página,
manipula os identificadores de eventos e os validadores para os componentes na exibição e
salva a exibição na instância do FacesContext, que contém todas as informações necessá-
rias para processar uma única solicitação.

Obs.: nesse sentido, quando chega uma requisição para um determinado endereço, o JSF
irá restaurar a view (que tinha sido obstruída depois da última requisição) e aplica os
novos parâmetros que chegaram.

Se a solicitação para a página for uma solicitação inicial, a implementação JavaServer


Faces cria uma visualização vazia durante essa fase e o ciclo de vida avança para a fase
Render Response, durante a qual a visualização vazia é preenchida com os componentes
referenciados pelas tags na página.
Se a solicitação da página for um postback, já existe uma exibição correspondente a
essa página na instância do FacesContext. Durante essa fase, a implementação do JavaSer-
ver Faces restaura a visão usando as informações de estado salvas no cliente ou no servidor.
5m

Apply Request Values – Aplicar Valores de Requisição


Depois que a árvore de componentes é restaurada durante uma solicitação de postback,
cada componente da árvore extrai seu novo valor dos parâmetros de solicitação usando seu
método de decodificação. O valor é então armazenado localmente em cada componente.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se algum método de decodificação ou listener de evento tiver chamado o método ren-


derResponse na instância atual do FacesContext, a implementação do JavaServer Faces irá
para a fase Render Response.
Se alguns componentes da página tiverem seus atributos imediatos definidos como true,
as validações, conversões e eventos associados a esses componentes serão processados
durante essa fase. Se alguma conversão falhar, uma mensagem de erro associada ao com-
ponente será gerada e enfileirada no FacesContext. Essa mensagem será exibida durante a
fase de resposta à renderização, juntamente com quaisquer erros de validação resultantes
da fase de validações do processo.

Obs.: ou seja, o JSF irá acumular os erros que podem ocorrer durante todas as fases.

No final dessa fase, os componentes são definidos para seus novos valores e as mensa-
gens e os eventos são enfileirados.

ATENÇÃO
Nessa fase, somente os componentes da árvore de componentes estão com os seus va-
lores atualizados. Tais valores ainda não foram convertidos e validados para passar para o
bean, o que será feito em uma fase posterior.

Process Validations – Processar Validação


Durante essa fase, a implementação do JavaServer Faces processa todos os validado-
res registrados nos componentes da árvore usando seu método validate (processValidators).
Ele examina os atributos do componente que especificam as regras para a validação e
compara essas regras com o valor local armazenado para o componente.
A implementação do JavaServer Faces também conclui conversões para componentes
de entrada que não possuem o atributo imediato configurado como true.
Se o valor local for inválido ou se qualquer conversão falhar, a implementação JavaServer
Faces incluirá uma mensagem de erro na instância FacesContext e o ciclo de vida avançará
diretamente para a fase Render Response para que a página seja renderizada novamente
com as mensagens de erro exibidas.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se houver erros de conversão da fase Apply Request Values, as mensagens desses


erros também serão exibidas.
10m
Se algum método de validação ou listener de evento tiver chamado o método ren-
derResponse no FacesContext atual, a implementação JavaServer Faces irá para a fase
Render Response.

Update Model Values – Atualizar Valores do Modelo


Depois que a implementação do JavaServer Faces determina que os dados são válidos,
ela percorre a árvore de componentes e define as propriedades correspondentes do objeto
do lado do servidor para os valores locais dos componentes.
A implementação do JavaServer Faces atualiza apenas as propriedades do bean apon-
tadas pelo atributo de valor de um componente de entrada.
Se os dados locais não puderem ser convertidos para os tipos especificados pelas pro-
priedades do bean, o ciclo de vida avança diretamente para a fase Render Response para
que a página seja renderizada novamente com erros exibidos. Isso é semelhante ao que
acontece com os erros de validação.

Invoke Application – Invocar Aplicação


Durante essa fase, a implementação do JavaServer Faces controla todos os eventos no
nível do aplicativo, como o envio de um formulário ou o link para outra página.
Neste ponto, se o aplicativo precisar redirecionar para um recurso de aplicativo da web
diferente ou gerar uma resposta que não contenha nenhum componente JavaServer Faces,
ele poderá chamar o método FacesContext.responseComplete.
Se a visualização que está sendo processada foi reconstruída a partir de informações de
estado de uma solicitação anterior e se um componente tiver disparado um evento, esses
eventos serão transmitidos para ouvintes interessados.

Obs.: é nesse momento do invoke application que, por exemplo, uma ação associada a um
botão será chamada no bean.

Finalmente, a implementação do JavaServer Faces transfere o controle para a fase


Render Response.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Render Response – Renderizar Resposta


Durante essa fase, o JavaServer Faces cria a visão e delega autoridade ao recurso apro-
priado para renderizar as páginas.
Se esta for uma solicitação inicial, os componentes representados na página serão adi-
cionados à árvore de componentes. Se não for uma solicitação inicial, os componentes já
estão adicionados à árvore e não precisarão ser adicionados novamente.
Se a solicitação for um postback e forem encontrados erros durante a fase Apply Request
Values, Process Validations, ou Update Model Values, a página original será renderizada
novamente durante essa fase. Se as páginas contiverem as tags h:message ou h:messages,
todas as mensagens de erro enfileiradas serão exibidas na página.
15m

Obs.: nesse sentido, se o desenvolvedor define um campo para uma entrada de número,
mas o usuário digita um texto, será possível definir uma mensagem de erro e, auto-
maticamente, quando o JSF perceber que o valor está inválido, exibirá a mensagem
de erro, que será renderizada automaticamente.

Depois que o conteúdo da visualização é renderizado, o estado da resposta é salvo para


que as solicitações subsequentes possam acessá-lo. O estado salvo está disponível para a
fase de exibição de restauração.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo:

ATENÇÃO
Tanto a parte conceitual quanto o funcionamento do ciclo de vida do JSF estão entre os
tópicos mais cobrados pelas bancas examinadoras em provas que cobram esse assunto,
logo é importante estudá-lo com atenção.

Processamento Parcial e Renderização Parcial


O ciclo de vida do JavaServer Faces abrange todos os processos de execução e rende-
rização de um aplicativo. Também é possível processar e renderizar apenas partes de um
aplicativo, como um único componente. Por exemplo, a estrutura do JavaServer Faces Ajax
pode gerar solicitações contendo informações sobre qual componente específico pode ser
processado e qual componente específico pode ser renderizado de volta para o cliente.
20m

Obs.: no começo, o JSF não contava com o Ajax. Por conta disso, toda vez que era feita
uma requisição, era preciso processar a página inteira, o que gerava um consumo
de rede um pouco elevado. Hoje, com o Ajax, o JSF pode atualizar partes de uma
página sem que seja feita uma navegação completa. Ou seja, fará com que trafegue
na rede somente o componente que foi atualizado e não a página inteira a cada nova
atualização parcial da página.

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
JSF IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando esse pedido parcial entra no ciclo de vida do JavaServer Faces, as informa-
ções são identificadas e processadas por um objeto javax.faces.context.PartialViewContext.
O ciclo de vida do JavaServer Faces ainda está ciente dessas solicitações do Ajax e modifica
a árvore de componentes de acordo.
Os atributos de execução e renderização da tag f:ajax são usados para identificar quais
componentes podem ser executados e renderizados.

DIRETO DO CONCURSO
1. (NC-UFPR/ITAIPU BINACIONAL/PROFISSIONAL DE NÍVEL SUPERIOR JR/2017) So-
bre o ciclo de vida de uma aplicação JSF 2.2, em que fase é feita a extração dos valores
da requisição?
a. Restore View.
b. Invoke Application.
c. Apply Request Value.
d. Update Model Values.
e. Process Validations.

COMENTÁRIO
A extração dos valores da requisição é feita na fase Apply Request Value.

GABARITO
1. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROGRAMAÇÃO

JMS

Referências

https://docs.oracle.com/javaee/7/tutorial/index.html

O que é o Messaging?
É um método de comunicação entre componentes ou aplicativos de software. Um sis-
tema de mensagens é um recurso ponto a ponto (peer-to-peer): um cliente de mensagens
pode enviar e receber mensagens de qualquer outro cliente. Por exemplo, um chat ou um
e-mail. Cada cliente se conecta a um agente de mensagens que fornece recursos para criar,
enviar, receber e ler mensagens. O sistema de mensagens permite a comunicação distribu-
ída fracamente acoplada. Dessa forma, um componente envia uma mensagem para um des-
tino e o destinatário pode recuperar a mensagem do destino.
5m
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que torna a comunicação pouco acoplada é que o destino é tudo o que o remetente e
o destinatário têm em comum. O remetente e o destinatário não precisam estar disponíveis
ao mesmo tempo para se comunicar. De fato, o remetente não precisa saber nada sobre o
destinatário nem o receptor precisa saber nada sobre o remetente. O remetente e o destina-
tário precisam saber apenas qual formato de mensagem e qual destino usar. Nesse aspecto,
as mensagens diferem das tecnologias fortemente acopladas, como RMI (Remote Method
Invocation), que exigem que um aplicativo conheça os métodos de um aplicativo remoto.
O sistema de mensagens também difere do correio eletrônico (e-mail), que é um método
de comunicação entre pessoas ou entre aplicativos de software e pessoas. As mensagens
são usadas para comunicação entre aplicativos ou componentes de software.

O que é a API JMS?

É uma API Java que permite aos aplicativos criar, enviar, receber e ler mensagens. Dessa
forma, define um conjunto comum de interfaces e semânticas associadas que permitem que
os programas escritos na linguagem de programação Java se comuniquem com outras imple-
mentações de mensagens. Além disso, minimiza o conjunto de conceitos que um programa-
dor deve aprender para usar produtos de mensagens, mas fornece recursos suficientes para
suportar aplicativos sofisticados de mensagens. Ele também se esforça para maximizar a
portabilidade dos aplicativos JMS entre os provedores JMS.
10m
O JMS permite uma comunicação não apenas fracamente acoplada, mas também:
– Assíncrona: um cliente receptor não precisa receber mensagens ao mesmo tempo
em que o cliente remetente as envia. O cliente remetente pode enviá-los e continuar
com outras tarefas; o cliente receptor pode recebê-los muito mais tarde;
– Confiável: Um provedor de mensagens que implementa a API JMS pode garantir
que uma mensagem seja entregue uma e apenas uma vez. Níveis mais baixos de
confiabilidade estão disponíveis para aplicativos que podem perder mensagens ou
receber mensagens duplicadas.
15m
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando é recomendável usar a API JMS?

Quando o provedor deseja que os componentes não dependam de informações sobre as


interfaces de outros componentes, para que os componentes possam ser facilmente substi-
tuídos, que o aplicativo seja executado, independentemente de todos os componentes esta-
rem funcionando simultaneamente e quando o modelo de negócios do aplicativo permite
que um componente envie informações para outro e continue operando sem receber uma
resposta imediata.

Como a API JMS funciona com a plataforma Java EE?

A API JMS é parte integrante da plataforma Java EE, e os desenvolvedores de aplicativos


podem usar o sistema de mensagens com componentes Java EE. Já o JMS 2.0 faz parte do
release Java EE 7. A API JMS na plataforma Java EE tem os seguintes recursos: aplicativos
clientes, componentes Enterprise JavaBeans (EJB) e componentes da Web podem enviar ou
receber de forma síncrona uma mensagem JMS. Além disso, os aplicativos clientes podem
definir um ouvinte de mensagens que permita que as mensagens JMS sejam entregues de
forma assíncrona, sendo notificadas quando uma mensagem estiver disponível.
Os beans controlados por mensagens permitem o consumo assíncrono de mensagens
no contêiner EJB. Um servidor de aplicativos normalmente agrupa beans acionados por
mensagens para implementar o processamento simultâneo de mensagens. As operações de
envio e recebimento de mensagens podem participar de transações JTA (Java Transaction
API), que permitem que as operações JMS e os acessos ao banco de dados ocorram em
uma única transação.

Arquitetura da API JMS

Um aplicativo JMS é composto pelas seguintes partes:


– Um provedor JMS é um sistema de mensagens que implementa as interfaces JMS
e fornece recursos administrativos e de controle. Uma implementação da plataforma
Java EE que suporta o perfil completo inclui um provedor JMS;
– Clientes JMS são os programas ou componentes, escritos na linguagem de progra-
mação Java, que produzem e consomem mensagens. Qualquer componente do
aplicativo Java EE pode atuar como um cliente JMS.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os aplicativos Java SE também podem atuar como cliente JMS.


20m
As mensagens são os objetos que comunicam informações entre clientes JMS e os obje-
tos administrados são objetos JMS configurados para o uso de clientes. Os dois tipos de
objetos administrados pelo JMS são destinos e connection factories.

As ferramentas ou anotações administrativas permitem ligar destinos e connection fac-


tories a um namespace JNDI. Um cliente JMS pode, então, usar a injeção de recursos para
acessar os objetos administrados no namespace e, em seguida, estabelecer uma conexão
lógica com os mesmos objetos através do provedor JMS.

Estilos de mensagens

Antes da API JMS existir, a maioria dos produtos de mensagens suportava o estilo de
mensagem ponto a ponto (Peer to Peer) ou de publicação/assinatura. A especificação JMS
define comportamentos para cada estilo. Um provedor JMS deve implementar ambos os esti-
los, e a API JMS fornece interfaces específicas para cada um. A API JMS, no entanto, torna
desnecessário usar apenas um dos dois estilos. Ela permite que se use o mesmo código para
enviar e receber mensagens usando o estilo Peer to Peer ou pub/sub.
Os destinos que se usa permanecem específicos para um estilo e o comportamento do
aplicativo dependerá em parte se estiver usando uma fila ou um tópico. Contudo, o próprio
código pode ser comum aos dois estilos, tornando os aplicativos flexíveis e reutilizáveis.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Estilo de mensagem ponto a ponto

Baseia-se no conceito de filas de mensagens, remetentes e receptores. Cada mensagem


é endereçada a uma fila específica e os clientes receptores extraem mensagens das filas
estabelecidas para reter suas mensagens. As filas retêm todas as mensagens enviadas até
que as mensagens sejam consumidas ou expirem. Cada mensagem tem apenas um consu-
midor e o destinatário pode buscar a mensagem, esteja ela em execução ou não, quando o
cliente enviou a mensagem.
25m

Estilo de Mensagens de Publicação/Assinatura

Os clientes endereçam mensagens para um tópico, que funciona como um quadro de


avisos. Sendo assim, publicadores e assinantes podem publicar ou assinar dinamicamente o
tópico. O sistema se encarrega de distribuir as mensagens que chegam de vários publicado-
res de um tópico para seus múltiplos assinantes. Ademais, os tópicos retêm as mensagens
apenas pelo tempo necessário para distribuí-las aos assinantes.
Com as mensagens de pub/sub, é importante distinguir entre o consumidor que assina
um tópico (o assinante) e a assinatura que é criada. O consumidor é um objeto JMS dentro de
um aplicativo, enquanto a assinatura é uma entidade dentro do provedor JMS. Normalmente,
um tópico pode ter muitos consumidores, mas uma assinatura tem apenas um assinante. É
possível, entretanto, criar assinaturas compartilhadas.
As mensagens de pub/sub possuem as seguintes características: cada mensagem pode
ter vários consumidores; um cliente que assina um tópico pode consumir apenas mensagens
enviadas depois que o cliente criou uma assinatura e o consumidor deve continuar ativo para
poder consumir mensagens; a API JMS relaxa esse requisito, até certo ponto, permitindo que
os aplicativos criem assinaturas duráveis, que recebem mensagens enviadas enquanto os
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

consumidores não estão ativos. As assinaturas duráveis fornecem a flexibilidade e a confia-


bilidade das filas, mas ainda permitem que os clientes enviem mensagens para muitos des-
tinatários.

Consumo de Mensagens

Os produtos de mensagens são inerentemente assíncronos: não há dependência de


tempo fundamental entre a produção e o consumo de uma mensagem. No entanto, a espe-
cificação JMS usa esse termo em um sentido mais preciso. As mensagens podem ser con-
sumidas de duas maneiras:
– Sincronicamente: um consumidor busca explicitamente a mensagem do destino cha-
mando o método receive. O método receive pode bloquear até que uma mensagem
chegue ou atingir o tempo limite, se uma mensagem não chegar dentro de um prazo
especificado;
– Assíncrona: um aplicativo cliente pode registrar um ouvinte de mensagem com
um consumidor. Um ouvinte de mensagem é semelhante a um ouvinte de evento.
Sempre que uma mensagem chega ao destino, o provedor JMS entrega a mensa-
gem chamando o método onMessage do ouvinte, que atua no conteúdo da mensa-
gem. Em um aplicativo Java EE, um bean acionado por mensagens serve como um
ouvinte de mensagens (também possui um método onMessage), mas um cliente
não precisa registrá-lo com um consumidor.
30m
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO

1. (CESGRANRIO/2013) Suporte Java Message Service (JMS) é uma tecnologia voltada


para o envio e processamento de mensagens na qual o:
a. modelo ponto a ponto de troca de mensagens estabelece que cada mensagem
enviada para uma fila deve ser recebida por um único consumidor.
b. modelo ponto a ponto de troca de mensagens permite que cada mensagem enviada
para uma fila seja lida várias vezes por diferentes consumidores.
c. modelo publish/subscribe de troca de mensagens estabelece que até dois consumi-
dores podem ler o conteúdo de uma mensagem enviada.
d. modelo publish/subscribe de troca de mensagens estabelece que somente um con-
sumidor pode ler o conteúdo de uma mensagem enviada.
e. conceito de tópico de mensagens é usado no modelo ponto a ponto para o envio de
uma mensagem em multicast, enquanto o conceito de filas de mensagens é usado
no modelo publish/subscribe para o envio de uma mensagem para no máximo um
consumidor.

COMENTÁRIO
Cada mensagem tem apenas um consumidor.

GABARITO
1. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES

A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo minis-
trado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva deste
material.

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROGRAMAÇÃO

JMS II

O Modelo de Programação da API JMS

Os blocos de construção básicos de um aplicativo JMS são:


– Objetos administrados: connection factories e destinos;
– Conexões;
– Sessões; Objetos JMSContext, que combinam uma conexão e uma sessão em
um objeto;
– Produtores de mensagens;
– Consumidores de mensagens;
– Mensagens.

Objetos administrados pelo JMS

Duas partes de um aplicativo JMS, destinos e connection factories, geralmente são man-
tidas administrativamente e não programaticamente. A tecnologia subjacente a esses objetos
provavelmente será muito diferente de uma implementação da API JMS para outra. Portanto,
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

o gerenciamento desses objetos pertence a tarefas administrativas que variam de provedor


para provedor. Os clientes JMS acessam objetos administrados por meio de interfaces por-
táteis, para que um aplicativo cliente possa ser executado com pouca ou nenhuma alteração
em mais de uma implementação da API JMS.
Normalmente, um administrador configura objetos administrados em um namespace
JNDI e os clientes JMS acessam-nos usando injeção de recursos. A especificação da plata-
forma Java EE permite que um desenvolvedor crie objetos administrados usando anotações
ou elementos descritores de implementação. Os objetos criados dessa maneira são específi-
cos para o aplicativo para o qual foram criados; As definições em um descritor de implemen-
tação substituem as especificadas pelas anotações.
5m

Fábricas de conexão JMS

É o objeto que um cliente usa para criar uma conexão com um provedor. Um connection
factory encapsula um conjunto de parâmetros de configuração de conexão que foram defini-
dos por um administrador. Cada fábrica de conexões é uma instância da interface Connec-
tionFactory, QueueConnectionFactory ou TopicConnectionFactory. No início de um programa
cliente JMS, geralmente injeta-se um recurso de connection factory em um objeto Connec-
tionFactory. Um servidor Java EE deve fornecer um connection factory JMS com o nome
lógico da JNDI java:comp/DefaultJMSConnectionFactory. O nome JNDI real será específico
da implementação
@Resource(lookup = “java:comp/DefaultJMSConnectionFactory”)
private static ConnectionFactory connectionFactory;

Destinos JMS

É o objeto que um cliente usa para especificar o destino das mensagens que produz e
a origem das mensagens que consome. Em mensagens PTP, os destinos são chamados
de filas. Em mensagens de pub/sub, os destinos são chamados de tópicos. Um aplicativo
JMS pode usar várias filas ou tópicos (ou ambos). Além de injetar um recurso de connection
factory em um programa cliente, normalmente injeta-se um recurso de destino. Ao contrá-
rio das fábricas de conexão, os destinos são específicos para o estilo de mensagens PTP
ou pub/sub.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

@Resource(lookup = “jms/MyQueue”)
private static Queue queue;
@Resource(lookup = “jms/MyTopic”)
private static Topic topic;
Com as interfaces comuns, pode-se misturar ou combinar fábricas e destinos de cone-
xão, ou seja, além de usar a interface ConnectionFactory, pode-se injetar um recurso Queue-
ConnectionFactory e usá-lo com o Topic, e pode-se injetar um recurso TopicConnectionFac-
tory e usá-lo com a Queue. O comportamento do aplicativo dependerá do tipo de destino que
se usa e não do tipo de connection factory que se usa.

Conexões

Uma conexão encapsula uma conexão virtual com um provedor JMS. Por exemplo, uma
conexão pode representar um soquete TCP/IP aberto entre um cliente e um daemon de ser-
viço do provedor. Usa-se uma conexão para criar uma ou mais sessões. Na plataforma Java
EE, a capacidade de criar várias sessões a partir de uma única conexão é limitada aos aplica-
tivos clientes. Nos componentes de web e enterprise bean, uma conexão pode criar somente
uma sessão. Normalmente cria-se uma conexão criando um objeto JMSContext.

Sessões

Uma sessão é um contexto single-thread para produção e consumo de mensagens. Nor-


malmente cria-se uma sessão (assim como uma conexão) criando um objeto JMSContext.
Usa-se sessões para criar produtores de mensagens, consumidores de mensagens, men-
sagens, navegadores de fila e destinos temporários. As sessões realizam a execução dos
ouvintes da mensagem. Uma sessão fornece um contexto transacional com o qual agrupar
um conjunto de envios e recebimentos em uma unidade atômica de trabalho.

Objetos JMSContext

Um objeto JMSContext combina uma conexão e uma sessão em um único objeto, ou


seja, ele fornece uma conexão ativa com um provedor JMS e um contexto de single-thread
para enviar e receber mensagens. Usa-se o JMSContext para criar os seguintes objetos:
10m
– Produtores de mensagens;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– Consumidores de mensagens;
– Mensagens;
– Navegadores de fila; Filas e tópicos temporários.


JMSContext context = connectionFactory.createContext();
Quando chamado sem argumentos, quando não há nenhuma transação JTA ativa em
andamento, o método createContext cria uma sessão não transacionada com um modo de
reconhecimento de JMSContext.AUTO_ACKNOWLEDGE. Quando chamado sem argumen-
tos quando há uma transação JTA ativa em andamento, o método createContext cria uma
sessão transacionada. Também pode-se chamar o método createContext com o argumento
JMSContext.SESSION_TRANSACTED para criar uma sessão transacionada:
JMSContext context = connectionFactory.createContext(JMSContext.SESSION_
TRANSACTED);

Produtores de Mensagens JMS

É um objeto criado por um JMSContext ou uma sessão e usado para enviar mensagens
para um destino. Um produtor de mensagem criado por a JMSContext implementa a interface
JMSProducer:
try (JMSContext context = connectionFactory.createContext();) {
JMSProducer producer = context.createProducer();
...
O JMSProducer é um objeto leve que não consome recursos significativos. Por esse
motivo, não é necessário salvar a variável JMSProducer; pode-se criar um sempre que enviar
uma mensagem:
context.createProducer().send(dest, message);

Consumidores de Mensagens JMS

Um consumidor de mensagem é um objeto criado por uma JMSContext ou uma sessão


é usado para receber mensagens enviadas para um destino. Um produtor de mensagem
criado pela JMSContext implementa a interface JMSConsumer. A maneira mais simples de
criar um consumidor de mensagem é usar o método JMSContext.createConsumer:
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

try (JMSContext context = connectionFactory.createContext();) {


JMSConsumer consumer = context.createConsumer(dest);
...
Um consumidor de mensagem permite que um cliente JMS registre interesse em um
destino com um provedor JMS. O provedor JMS gerencia a entrega de mensagens de um
destino para os consumidores registrados do destino.
Quando se usa o JMSContext para criar um consumidor de mensagem, a entrega da
mensagem começa assim que se cria o consumidor. Pode-se desativar esse comportamento
chamando setAutoStart(false) ao criar o JMSContext e, em seguida, chamando o método
start explicitamente para iniciar a entrega da mensagem. Para interromper a entrega de men-
sagens temporariamente sem fechar a conexão, pode-se chamar o método stop; para reini-
ciar a entrega da mensagem, aciona-se start.
15m
Usa-se o método receive para consumir uma mensagem de forma síncrona. Pode-se
usar esse método a qualquer momento após criar o consumidor. Caso não se especifique
argumentos (ou 0 como argumento), o método será bloqueado indefinidamente até que uma
mensagem chegue:
Message m = consumer.receive();
Para um cliente simples, isso pode não importar. Mas se for possível que uma mensagem
não esteja disponível, usa-se um recebimento síncrono com um tempo limite:
Message m = consumer.receive(1000);

Ouvintes de Mensagens JMS

Um ouvinte de mensagem (listener) é um objeto que atua como um tratador de even-


tos assíncrono para mensagens. Este objeto implementa a interface MessageListener, que
contém um método onMessage. No método onMessage, define-se as ações a serem execu-
tadas quando uma mensagem chega.
Listener meuListener = new Listener();
consumer.setMessageListener (meuListener);
Quando a entrega da mensagem começa, o provedor JMS chama automaticamente o
método onMessage do ouvinte da mensagem sempre que uma mensagem é entregue. O
método onMessage usa um argumento do tipo Message, que sua implementação do método
pode converter para outro subtipo de mensagem. Usa-se beans acionados por mensagens
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

para entrega de mensagens assíncronas. Um bean acionado por mensagens também imple-
menta a interface MessageListener e contém um método onMessage.

Mensagens JMS

O objetivo de um aplicativo JMS é produzir e consumir mensagens que podem ser usadas
por outros aplicativos de software. As mensagens JMS têm um formato básico que é simples,
mas altamente flexível, permitindo criar mensagens que correspondem aos formatos usados
por aplicativos não JMS em plataformas heterogêneas. Uma mensagem JMS pode ter três
partes: um cabeçalho, propriedades e um corpo. Somente o cabeçalho é necessário.

Exemplo de Queue/fila

Há um “sender” que irá enviar a mensagem. Para isso, primeiramente, faz um “connec-
20m
tion factory”, onde ocorre o lookup, que é o JNDI, para estabelecer um queue. Em seguida,
cria uma conexão, dá uma start na “connection”. Sendo assim, cria-se uma sessão, na qual
automaticamente irá receber as mensagens. Logo após, cria-se um “sender session” para
enviar as mensagens, seguido de uma mensagem de texto. Assim, toda vez que o usuário
digitar uma mensagem, ele irá verificar, pois se igual a “fim”, termina, caso contrário, deverá
digitar “msg.setText” e “sender.send(msg).
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Nesse momento, cria-se um “receiver”. Sendo assim, é importante a definição do “listener”.

De um lado, executa-se um programa que abrirá um input de texto, onde é possível ficar
digitando e do outro, executa-se um programa que ficará aguardando as mensagens chega-
rem. Como ambos se conectam na mesma fila e provedor de mensagens, a mensagem sai
de um e chega ao outro. E quem está recebendo, recebe de forma assíncrona.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo de Topic

O formato de tópico é parecido, mudando a classe. Além disso, no formato de filas, o usu-
ário envia a mensagem, no de tópico, ele publica.
25m

O “receiver” também é parecido.


ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Programação
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A diferença é que no topic, é possível ter diversos “subscribers” para o mesmo tópico,
enquanto no esquema da fila, a cada mensagem enviada, chegará apenas para uma pessoa
que está na fila.

DIRETO DO CONCURSO

1. (CESPE/2010) A API JMS é usada para a construção de sistemas de mensageria na


plataforma JEE, sendo algumas de suas características relevantes a assincronia das
mensagens, a arquitetura peer-to-peer e o suporte ao estilo de mensageria publish-
-subscribe.

COMENTÁRIO

A API JMS é usada para a construção de sistemas de mensageria na plataforma JEE, sen-
do algumas de suas características relevantes a assincronia das mensagens, a arquitetura
peer-to-peer e o suporte ao estilo de mensageria publish-subscribe.

GABARITO
1. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula prepa-
ANOTAÇÕES

rada e ministrada pelo professor Tiago Lage Payne de Pádua.


A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo minis-
trado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva deste
material.

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
JVM
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JVM

JAVA

É comum ocorrer uma certa confusão quanto ao Java, pois “Java” pode ser referente
tanto à plataforma quanto à linguagem. Java se refere à plataforma Java, que abrange a JVK,
a JVM etc. Nesta aula o que será abordado será a linguagem.

• O Java é uma linguagem de propósito geral. As linguagens de propósito geral são


destinadas a resolver variados tipos de problemas na computação. O Java abrange
tanto aplicações científicas quanto aplicações bancárias, por exemplo. Apesar disso,
existem certos segmentos em que outras linguagens podem ser mais bem-sucedidas.
5m
• O Java é uma linguagem concorrente. Os dados são executados de forma concor-
rente, ou seja, é uma linguagem que lida com threads. Em geral, as threads são um
pouco complicadas de se trabalhar. Existem linguagens que não são voltadas para
threads, como o JavaScript.
• O Java é uma linguagem orientada a objetos, ou seja, utiliza objetos para representar
estruturas. Tais objetos possuem tanto métodos quanto propriedades.
• Possui sintaxe semelhante ao C++. A linguagem C++ também é orientada a objetos,
mas não se tornou muito popular devido ao Java ser muito mais popular. O C++ é uma
linguagem complicada. A linguagem do Java é mais restrita e possui controles automá-
ticos de segurança.
10m
• O Java é multiplataforma, ou seja, possui uma estrutura que possibilita que o mesmo
código binário possa ser executado em vários tipos de plataforma, tanto sistemas ope-
racionais distintos quanto arquiteturas de processador distintas.

O Java, quando compilado, gera um código intermediário executado pela JVM.

Java Virtual Machine

• É a base da plataforma Java, pois o código do Java roda sobre a JVM, ou seja, o Java
é dependente da JVM.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JVM
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• É responsável por sua independência de hardware e sistema operacional. Ela é feita


para cada arquitetura e cada sistema operacional, mas pode rodar em vários sistemas
ou arquiteturas diferentes.
• É uma máquina de computação abstrata, pois pega o código intermediário gerado e
funciona como um outro computador, realizando uma compilação do código em tempo
real e executando ele em qualquer uma das arquiteturas distintas.
• A JVM possui muito foco em segurança, seja relacionada a memória, seja a invasões.

Visão Geral

15m

Os arquivos A.java, B.java e C.java passam pelo processo de compilação e geram os


arquivos .class. Tais arquivos contém o bytecode, que é um código intermediário. Ele nem
está em alto nível como o arquivo .java, nem está em baixo nível como um arquivo que o
processador da máquina entenderia. É por isso que ele necessita da JVM para ser execu-
tado. Não é apenas o código .java que roda na JVM. A JVM é também capaz de executar o
.class, importando para a JVM apenas o .class. Várias outras linguagens foram surgindo com
o passar do tempo e essas linguagens também compilam para a JVM, gerando também um
bytecode. Exemplos de linguagem:

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JVM
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Novas linguagens podem surgir a qualquer momento, basta que elas possuam o
arquivo .class

A Estrutura da Java Virtual Machine

• Uma JVM precisa ler o formato de arquivo “class” e executar corretamente as ope-
rações nele especificadas. O arquivo “class” é como se fosse um programa, sendo a
tradução da respectiva linguagem para o bytecode da JVM. Existem várias JVMs e
vários fabricantes podem desenvolvê-la.
• Detalhes de implementação que não fazem parte da especificação da JVM como o
layout de memória das áreas de dados de runtime, o algoritmo de coleta de lixo usado
e qualquer otimização interna das instruções são deixadas ao critério da implementa-
ção específica. A JVM é definida num nível de abstração maior, pois dependendo do
detalhe em questão de melhoria da plataforma, é possível haver implementação sem
que se saia da especificação da JVM.
20m

Às vezes é necessário algum programa nativo da máquina. O diagrama possui um alto


nível de abstração que não necessariamente reflete como vai ser a implementação da JVM.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JVM
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tipos de Dados

• Como a linguagem de programação Java, a Java Virtual Machine opera em dois tipos
de dados: tipos primitivos e tipos de referência.
• A JVM espera que a verificação de tipos seja feita antes do tempo de execução, por
um compilador, e não precisa ser feita pela própria JVM. Os tipos de dados não são
necessariamente os tipos do Java. A JVM opera com tipos de dados estáticos. Tal tipa-
gem forte tenta fazer com que não haja colisão. No processo de compilação do arquivo
.java para o arquivo .class vai ocorrer uma validação de tipos, para que na hora em
que chegar na JVM, a validação não precise ocorrer novamente. Se a JVM precisasse
25m
atuar na validação dos tipos, sua performance cairia muito.
• A JVM contém suporte explícito para objetos. Um objeto é uma instância de classe
alocada dinamicamente ou uma matriz.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JVM
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tipo Intervalo
byte 8-bit (-2⁷ a 2⁷ - 1)
short 16-bit (-2¹⁵ a 2¹⁵ - 1)
int 32-bit (-2³¹ a 2³¹ - 1)
long 64-bit (-2⁶³ a 2⁶³ - 1)
char 16-bit (0 a 2¹⁶ - 1)
float 32-bit IEEE 754
double 64-bit IEEE 754
returnAddress Endereço de um opcode dentro do mesmo método
reference Referência a um objeto no heap ou null

�Este material foi elaborado pela equipe pedagógica do Gran Concursos, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JVM II

Tipos de referência e valores

• Existem três tipos de tipos de referência: tipos de classe, tipos de matriz e tipos de
interface.
• Um tipo de matriz consiste em um tipo de componente com uma única dimensão (cujo
comprimento não é fornecido pelo tipo).
• Um valor de reference também pode ser a referência nula especial, uma referência
a nenhum objeto, que será denotada por null. Quando se trabalha com os tipos que
são objetos, eles podem ser null. O Java possui essa característica de ter os tipos
primitivos além dos objetos por uma questão de performance. Existem vários tipos de
números com várias quantidades de bits diferentes para que se possa trabalhar com
economia de dados e ter a melhor performance possível. Existem outras linguagens
que são puramente voltadas a objetos, como a Rub. Tais linguagens podem ter um
poder de performance inferior ao Java. O JavaScript, por exemplo, possui apenas um
tipo numérico, que é o tipo number.

Áreas de dados de Runtime

• Registrador PC.
• Java Virtual Machine Stacks.
• Heap.
• Área dos Métodos.
5m

A JVM é uma máquina abstrata baseada nos recursos que existem atualmente e o que
ela faz é adicionar alguns tipos de maior nível.

Registrador PC

• A JVM pode suportar vários threads de execução simultâneos.


ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Cada thread da JVM possui seu próprio registrador pc (contador de programa). É pos-
sível trabalhar com várias threads operando de forma simultânea. É necessário haver
alguma maneira que seja possível saber qual ponto do código em que a thread está
presente, pois a thread não está conectada à quantidade de núcleos do processador.
• A qualquer momento, cada thread da JVM está executando o código de um único
método. O registrador do pc conterá o endereço da instrução JVM atualmente sendo
executada. Ele aponta para a língua de código que está sendo executado.

O registrador pc sabe em quais pontos as threads estão em execução. Cada thread tem
uma pilha de execução.

• Stacks (pilhas) da Java Virtual Machine.


• Cada thread da JVM tem uma pilha criada ao mesmo tempo que a thread.
• Uma stack da JVM armazena frames (quadros).
• Uma stack da JVM é análoga à stack de uma linguagem convencional como C: ela
contém variáveis locais, resultados parciais e desempenha um papel na chamada e
retorno do método. A pilha está relacionada à execução dos métodos.
10m

Heap

• A JVM possui um heap que é compartilhado entre todas as threads.


• O heap é a área de dados de runtime a partir da qual a memória de todas as instâncias
de classes e matrizes é alocada.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O heap é criado na inicialização da máquina virtual. O armazenamento de heap para


objetos é recuperado por um sistema de gerenciamento de armazenamento automá-
tico, conhecido como coletor de lixo.
• Se uma computação exigir mais heap do que pode ser disponibilizado pelo sistema de
gerenciamento de armazenamento automático, a JVM lançará um OutOfMemoryError.
A Heap é onde os dados estão de fato. A Heap é compartilhada entre as threads, então
várias threads podem acessar a mesma informação na Heap.

A Stack Memory está relacionada a códigos que serão executados. O coletor de lixo
armazena referências. Ele sabe que o programa está apontando para determinando cliente.
A partir do momento que não existem mais referências para o objeto, o coletor de lixo des-
carta a memória. Assim, ele possui a função de fazer com que o gerenciamento de memória
seja automático.
15m

Method Area (área do método)

• É compartilhada entre todas as threads da JVM.


ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Armazena estruturas por classe, como o conjunto de constantes de runtime, dados de


campo e método e o código de métodos e construtores, incluindo os métodos usados
na inicialização de classes e instâncias e na inicialização da interface.
• A área do método é criada na inicialização da máquina virtual.
• Se a memória na área do método não puder ser disponibilizada para satisfazer um
pedido de alocação, a JVM lançará um OutOfMemoryError. O objetivo da Method Area
é armazenar as informações das classes.

Run-Time Constant Pool

• É uma representação de tempo de execução por classe ou por interface da tabela


constant_pool em um arquivo de class. Contém vários tipos de constantes, variando
de literais numéricos conhecidos em tempo de compilação a referências a métodos e
campos que devem ser resolvidos em tempo de execução.
• Ao criar uma classe ou interface, se a construção do conjunto constante de tempo de
execução exigir mais memória do que pode ser disponibilizada na área do método da
JVM, a JVM emitirá um OutOfMemoryError.

Native Method Stacks

• Uma implementação da Java Virtual Machine pode usar pilhas convencionais, chama-
das de “C stacks”, para suportar métodos nativos (métodos escritos em uma lingua-
gem diferente da linguagem de programação Java).
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• As pilhas de métodos nativos também podem ser usadas pela implementação de um


interpretador para o conjunto de instruções da Java Virtual Machine em uma lingua-
gem como C. O Native Method Stack possibilita que a JVM chame métodos que não
estão escritos em Java e potencialmente escritos em linguagem nativa. Quando essas
chamadas nativas são feitas, a portabilidade do código diminui, pois a comunicação
está sendo feita com um recurso nativo, fora da JVM.

20m
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Diferença entre JDK, JRE e JVM

A JVM executa o código. Em geral, o JVM está em incluso no JRE quando ele é instalado.
Para desenvolver um programa no Java, é necessário o JDK. O JDK abrange ferramentas
de desenvolvimento.

DIRETO DO CONCURSO
1. (FCC/2017/ARTESP/ESPECIALISTA EM REGULAÇÃO DE TRANSPORTE I – TECNO-
LOGIA DA INFORMAÇÃO) Na arquitetura da JVM existe a JVM Memory que contém
uma área de memória que armazena os objetos criados pela aplicação por meio do
operador new ou qualquer outro método que crie um objeto. Essa área de memória é
chamada de:
a. stack frame
b. method area
c. heap
d. perm
e. native Stack
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
JVM II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
O Stack frame é a parte que contém códigos, não objetos em si. Method área também não
contém objetos. A perm é outra área de memória.

2. (FCC/2010/TRT 9ª REGIÃO (PR)/TÉCNICO JUDICIÁRIO – TECNOLOGIA DA INFOR-


MAÇÃO) O JVM mais o núcleo de classes da plataforma Java e os arquivos de
suporte formam o:
a. o J2EE
b. o JDK
c. o JRE
d. uma JSP
e. uma API

COMENTÁRIO
O J2EE é uma especificação; o JDK é o development quit; o JRE é o tempo de execução;
JSP é uma página; API é um padrão de comunicação.
25m

GABARITO
1. c
2. c

�Este material foi elaborado pela equipe pedagógica do Gran Online, de acordo com a aula prepa-
rada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ARQUITETURAS PARA DESENVOLVIMENTO DE APLICATIVOS EM


DISPOSITIVOS MÓVEIS

INTRODUÇÃO

Um projeto de arquitetura está preocupado com a compreensão de como um sistema


deve ser organizado e com a estrutura geral desse sistema. No modelo do processo de
desenvolvimento de software, o projeto de arquitetura é o primeiro estágio no processo de
projeto de software.
É o elo crítico entre o projeto e a engenharia de requisitos, pois identifica os principais
componentes estruturais de um sistema e os relacionamentos entre eles.
O resultado do processo de projeto de arquitetura é um modelo de arquitetura que des-
creve como o sistema está organizado em um conjunto de componentes de comunicação.
Arquitetura é a definição dos elementos que compõem uma estrutura e como eles se
relacionam.
A estrutura é o próprio software e os elementos são os constituintes do software, como:
– Classes;
– Componentes;
– Serviços.

A arquitetura define como são organizados esses elementos para montar o software e o
arquiteto é o responsável pela sua criação.
O mais importante é saber quais as possíveis escolhas e que fatores influenciam na
sua seleção;
Neste ponto entra a caixa de ferramentas do arquiteto (conjunto de possíveis escolhas/
soluções) e os requisitos que o software deve atender (permitem selecionar quais as solu-
ções viáveis/interessantes).
5m
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DESENVOLVIMENTO DE APLICATIVOS PARA DISPOSITIVOS MÓVEIS

É o ato ou processo pelo qual um aplicativo móvel é desenvolvido para dispositivos


móveis, como assistentes digitais pessoais, assistentes digitais corporativos ou telefones
celulares (smartphones).
Esses aplicativos podem ser pré-instalados (nativos) em telefones ou disponibilizados
como aplicativos da Web usando o processamento do lado do servidor ou do lado do cliente
(por exemplo, JavaScript) para fornecer uma experiência de "aplicativo" em um navega-
dor da Web.
Os desenvolvedores de software de aplicativos também devem considerar uma longa
variedade de tamanhos de tela, especificações de hardware e configurações, devido à intensa
concorrência no software móvel e às alterações em cada uma das plataformas.

Obs.: quando vai ser desenvolvido um aplicativo móvel, a questão do hardware dificulta
bastante, pois envolve variáveis como processador, memória etc.

Ao considerar a melhor maneira de incorporar a tecnologia móvel em um modelo de


negócios existente, o principal problema para clientes e desenvolvedores é a escolha entre
aplicativos nativos e aplicativos da Web – ou uma combinação dos dois.
– Ex.: um aplicativo de web pode ser uma página totalmente adaptada ao mobile.

Devem ser considerados fatores como:


– As restrições inerentes causadas por problemas de carregamento, armazenamento
em cache e latência em dispositivos móveis;
– Os modelos de interação exclusivos no hardware móvel;
– Taxas de transferência de dados nas redes móveis.
10m

PLATAFORMAS

Dentre as plataformas possíveis para desenvolvimento estão: Nativo (Android/iOS) ou


Híbrido (Cordova/Phonegap);
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Ao considerar uma estratégia para dispositivos móveis, uma das grandes decisões de
muitos clientes é concentrar os recursos em um aplicativo da Web ou em aplicativos nativos
voltados para plataformas móveis específicas.
Não existe uma solução perfeita para esse problema, devido ao número de plataformas
em operação, e a melhor abordagem para um negócio pode ser totalmente diferente daquela
para outro.

APLICATIVO WEB E NATIVO

Existem duas opções amplas na implantação de um sistema para usuários móveis:


– Criação de aplicativos nativos personalizados destinados a algumas ou todas as
principais plataformas móveis;
– Desenvolver um aplicativo da Web otimizado para acesso móvel.

Há uma série de benefícios e desvantagens em cada abordagem, que precisam ser pon-
deradas junto às especificidades de qualquer projeto em particular.

Aplicativos Nativos

Aplicativos direcionados a plataformas móveis específicas desfrutam de vários benefí-


cios naturais:
– O acesso nativo à interface do usuário cria um nível de interação que é difícil, se não
impossível, alcançar por meio de um navegador da Web;

Obs.: existe uma série de interação no celular que uma aplicação web não consegue atingir
a expectativa do usuário.

– Os aplicativos nativos estão em posição privilegiada para explorar as funcionalida-


des exclusivas de hardware e software em dispositivos móveis, como GPS e ferra-
mentas de localização, acelerômetros e telas sensíveis ao toque.

A principal consideração ao implementar um serviço usando aplicativos móveis é o


número de plataformas.
15m
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se o objetivo for atingir uma parte considerável do mercado, os recursos necessários


podem ser consideráveis, uma vez que o desenvolvimento Nativo é exclusivo para uma
plataforma.
Os aplicativos nativos que são distribuídos comercialmente pelas lojas de aplicativos
estão sujeitos a cobranças de transação de vendas.
A promoção e adoção por novos usuários é cada vez mais desafiadora, já que muitas
lojas de aplicativos estão se tornando extremamente superlotadas.
As implicações de desenvolvimento de aplicativos nativos no curto e longo prazo incluem:
– Um conjunto diversificado de habilidades é necessário para desenvolver aplicativos
para várias plataformas;
– Existem implicações significativas de manutenção, pois os vários contextos de
sistemas operacionais, software e hardware estão em constante estado de fluxo
de mudanças.

Obs.: um aplicativo nativo é mais suscetível a mudanças de hardware do que um aplicativo


web, pois ela passa por mudanças e atualizações constantes.

Aplicativos Web

Há também vantagens significativas para concentrar recursos de desenvolvimento em


aplicativos da Web acessíveis pela rede móvel:
– Apenas um sistema precisa ser desenvolvido, otimizado e aprimorado para atender
aos usuários;
– Tanto o desenvolvimento quanto a manutenção são mais simples e exigem menos
trabalho para uma única aplicação, permitindo até mesmo os aprimoramentos
necessários para lidar com as plataformas dos usuários.

Aspectos positivos adicionais da Web para dispositivos móveis incluem:


– O nível de sofisticação nos navegadores da Web para dispositivos móveis está avan-
çando a tal ponto que, em alguns casos, a lacuna entre a funcionalidade móvel e de
desktop está diminuindo;
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: inicialmente, o Iphone 1 possuía somente aplicativos web, mas após viu-se a grande
possibilidade de lucro com aplicativos nativos.
20m

– Para aplicações comerciais, as primeiras evidências sugerem que os consumidores


estão mais inclinados a fazer compras através de sites móveis do que os aplicati-
vos nativos.

VELOCIDADE

A navegação na Web móvel mudou drasticamente nos últimos anos, em grande parte
como resultado das velocidades mais rápidas da Internet (4G).
Além disso, as mudanças tecnológicas nos próximos anos serão substanciais. Muito já
mudou. Por exemplo, hoje, o tamanho da tela do dispositivo móvel de um usuário pode ser
desde um relógio de pulso (tecnologia vestível) até o tamanho de um pequeno laptop (tablet).
O 5G aumentará significativamente a velocidade e a capacidade de resposta das redes
sem fio. O 5G é 100x mais rápido que o 4G, com 10x menos latência do que a atual infra-
estrutura 4G. A velocidade de transmissão de dados em uma rede 5G pode atingir 20 Gbps.

HTML5

No passado, os aplicativos da Web foram limitados em termos de exploração de hardware


e interação do usuário. Usos inovadores de scripts podem aproximar uma experiência nativa
em um aplicativo da Web, por exemplo, via HTML5. No entanto, o aplicativo nativo atual-
mente tem a capacidade de criar uma experiência de usuário muito mais intuitiva e imersiva;
O HTML5 teve um impacto dramático na Web para dispositivos móveis. Ele adiciona
recursos sintáticos que são vitais para enriquecer a experiência do usuário. Estes incluem
elementos de vídeo, áudio e tela, bem como a integração de conteúdo gráfico vetorial esca-
lável (SVG). Esses recursos são projetados para facilitar a inclusão e o manuseio de conte-
údo gráfico e multimídia na Web para uma melhor interação do usuário, sem utilizar plugins
e APIs proprietários.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O HTML5 possui os seguintes recursos aprimorados:


– Suporte offline – O manifesto de cache e o banco de dados de armazenamento off-
-line possibilitam que os desenvolvedores de dispositivos móveis armazenem dados
localmente em um dispositivo e permitem que as interrupções na conectividade não
afetem o usuário;
– Tela e vídeo – Esses dois recursos foram projetados para facilitar a adição de grá-
ficos e vídeos a uma página sem se preocupar com plug-ins. As APIs HTML5 per-
mitem níveis abrangentes de controle sobre as funções de desenho e reprodução
de mídia;
25m

Obs.: esses dois pontos anteriores supriram o flash.

– API de Geolocalização – Embora não faça parte do HTML5, essa especificação é


geralmente incluída nele porque os telefones móveis habilitados para HTML5 geral-
mente suportam a API de Geolocalização. A API promete ser um elemento-chave
para preencher a lacuna entre aplicativos nativos e aplicativos da Web, pois criará
uma maneira padronizada de fornecer funções de localização;
– Formulários avançados – A incorporação da especificação Web Forms 2.0 no
HTML5 permite melhorias significativas em formulários em aplicativos móveis.

APLICATIVOS HÍBRIDOS

É uma mistura de um aplicativo nativo e um aplicativo web. O aplicativo híbrido é cons-


truído na linguagem HTML5, CSS e Javascript, assim como o site mobile. Esse código é alo-
cado dentro de um container, integrando as funcionalidades que o seu dispositivo oferece,
oferecendo, desse modo, uma experiência melhor ao usuário que os web Apps.
Assim, apenas uma parte do código nativo deverá ser escrito para esses Apps. Isso pos-
sibilita que apenas uma parte do código seja reescrita caso queira oferecer o aplicativo para
outra plataforma.
Eles estarão disponíveis para download nas App Stores, oferecendo um canal de tráfego
e download. Da mesma forma como o aplicativo nativo, o híbrido apresenta um custo de
manutenção nas App Stores.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É mais simples e, consequentemente, mais rápido de se desenvolver. Não se é neces-


sário fazer o download sempre que uma atualização for feita em seu aplicativo. Porém, sua
utilização ainda dependerá de conexão com a Internet e da velocidade dela, não funcionando
tão rápido quanto um aplicativo nativo.
Para funcionar corretamente em qualquer plataforma, o aplicativo híbrido necessitará de
um certo tempo e trabalho duro dos desenvolvedores. Em algumas situações eles podem ter
o custo bem parecido com um aplicativo nativo, dependendo do quão excelente você quer
que seja a experiência oferecida ao usuário.

DIRETO DO CONCURSO
1. (FAURGS/TJ-RS/ANALISTA DE SISTEMAS/2018) Acerca do desenvolvimento de apli-
cativos para dispositivos móveis, é correto afirmar que aplicativos:
a. desenvolvidos para a web são ditos “não responsivos”, pois são apresentados atra-
vés dos navegadores instalados nos dispositivos.
b. nativos são programados em plataformas de desenvolvimento genéricas, mas encap-
sulados em páginas web para uso em diferentes dispositivos.
c. nativos são sempre mais lentos do que aplicativos para a web, pois não utilizam as
otimizações disponíveis nos navegadores.
d. híbridos exigem a escrita de código em diferentes plataformas, para que a parte nativa
possa ser integrada à parte genérica.
e. híbridos podem ser gerados através da compilação de código para diferentes sistemas.

COMENTÁRIO
a. Responsividade tem a ver com a adaptabilidade à tela.
b. Trata-se do híbrido.
c. Os nativos são mais rápidos, pois utilizam recursos dos sistemas operacionais.
d. Não exige, pois ele vai ser comum nas plataformas.
e. Correto.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (CESPE/BACEN/ANALISTA – ANÁLISE E DESENVOLVIMENTO DE SISTEMAS/2013)


Julgue o item subsequente, relativo às arquiteturas para desenvolvimento de aplicativos
em dispositivos móveis.
30m

No projeto de aplicações para dispositivos móveis, devem ser considerados, entre ou-
tros aspectos, as características dos dispositivos de hardware para os quais a aplicação
está sendo desenvolvida e o consumo de energia gerado por cada recurso do sistema,
visando-se a economia de bateria

COMENTÁRIO
Deve-se pensar no consumo da bateria ao desenvolver um aplicativo móvel.

GABARITO
1. e
2. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ARQUITETURAS PARA DESENVOLVIMENTO DE APLICATIVOS EM


DISPOSITIVOS MÓVEIS II

PWA E HÍBRIDAS
DESENVOLVIMENTO MOBILE

MOBILE WEB APPLICATIONS

• São aplicativos para dispositivos móveis que exigem que apenas um navegador da
Web seja instalado no dispositivo;
• Normalmente usam HTML e Ajax (e, cada vez mais, componentes HTML5) e não são
escritas especificamente para um dispositivo;
• Têm uma usabilidade praticamente equivalente a aplicativos Web em PC, quando
projetados especificamente para formatos menores;
• Os aplicativos da Web para dispositivos móveis diferem dos aplicativos nativos móveis,
pois usam tecnologias da Web e não estão limitados à plataforma subjacente
para implantação.

Obs.: Quando se trata de Mobile Web Applications, trata-se de um site que foi altamente
especializada para ser executado em um celular.

DIVISÕES DESSA TECNOLOGIA

PWA
• Progressive web applications são uma categoria de mobile Web Application criado
com tecnologias comuns da Web, incluindo HTML, CSS e JavaScript;
• Funcionam em qualquer plataforma que use um navegador compatível com os padrões
definidos pela W3C;
• Possuem funcionalidades como trabalho off-line (sem necessidade de acesso à
internet), notificações por push e acesso ao hardware do dispositivo, permitindo
a criação de experiências ao usuário semelhantes a aplicativos nativos em
dispositivos móveis;
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Como são um tipo de página da Web ou site conhecido como aplicativo da Web, não é
necessário que desenvolvedores ou usuários instalem os aplicativos da Web por meio
de sistemas de distribuição digital, como App Store da Apple ou Google Play;
5m
• Embora os aplicativos web sempre estiveram disponíveis para dispositivos móveis,
eles geralmente ficaram atrás de aplicativos nativos em termos de velocidade, recursos
e adoção de usuários, especialmente em dispositivos móveis;
• O acesso direto ao hardware e a capacidade de trabalhar off line, anteriormente
disponível apenas para aplicativos nativos, permite que os PWAs tenham um
desempenho muito mais rápido e forneçam mais recursos de forma semelhante aos
aplicativos nativos (os aplicativos nativos sempre serão mais rápidos);
• Os PWAs não exigem empacotamento ou distribuição separados. Sua publicação é
como qualquer outra página da web. Os PWAs funcionam em qualquer navegador,
mas os recursos "semelhantes a aplicativos", como independência da conectividade,
instalação na tela inicial e envio de mensagens dependem do suporte ao navegador.
Esses recursos são suportados em graus variados pelos navegadores Microsoft
Edge, Google Chrome, Mozilla Firefox e Apple Safari.

Aplicações Híbridas
• Híbrido, por definição é qualquer coisa derivada de fontes heterogêneas, ou composta
de elementos de tipos diferentes ou incongruentes;
• Um aplicativo híbrido é aquele que é escrito com a mesma tecnologia usada para sites
e implementações da Web para dispositivos móveis, e que é hospedado ou executado
em um contêiner nativo em um dispositivo móvel;
• É o casamento da tecnologia web e execução nativa;

Obs.: O site é desenvolvido, empacotado e colocado dentro de um aplicativo / container


nativo, que é oferecido por um framer (por exemplo, o PhoneGap). Dentro desse
container, o site funcionará muito semelhante a um aplicativo nativo.

• Os aplicativos híbridos usam um componente de visualização Web (UIWebView no


iOS, WebView no Android e outros) para apresentar os arquivos HTML e JavaScript em
um formato de tela inteira, usando o mecanismo de renderização nativo do navegador
(não o próprio navegador);
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O WebKit é o mecanismo de renderização do navegador usado em iOS, Android,


Blackberry, entre outros;
• Isso significa que o HTML e o JavaScript usados para construir um aplicativo híbrido
são processados pelo mecanismo de renderização WebKit e exibidos ao usuário em
um componente de visualização da Web em tela cheia, não em um navegador;
• O segredo real dos aplicativos híbridos é a implementação de uma camada de
abstração que expõe os recursos do dispositivo (APIs nativas) ao aplicativo
híbrido como uma API JavaScript;
– Exemplo: ler arquivos da memória interna do celular.
• Isso é algo que não é possível com PWAs ou aplicações Web devido ao limite de
segurança entre o navegador e as APIs do dispositivo;

Obs.: Essa limitação deve-se ao fato de as PWAs rodarem diretamente no browser.

• Apache Cordova (anteriormente PhoneGap) é um exemplo de uma camada de


abstração JavaScript sobre APIs nativas;
• Por meio dessa camada de abstração, um conjunto comum de APIs é exposto em
JavaScript e essas APIs funcionam em qualquer dispositivo suportado pelo framework;
• Quando o wrapper nativo é compilado em torno do HTML, CSS e recursos JavaScrip,
há uma camada de interoperabilidade adicionada que conecta as APIs JavaScript com
as APIs específicas da plataforma;
• Por exemplo, se eu criarmos um aplicativo móvel com o Apache Cordova, podemos usar
JavaScript para acessar uma API nativa, como a câmera, usando uma única chamada
de API, independentemente da plataforma em que o aplicativo será executado;

Código JavaScript

10m

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Internamente o JavaScript está fazendo uma chamada de interoperabilidade que


acessa a API nativa da câmera;
• Isso significa que, em um dispositivo iOS, esse JavaScript está chamando a camada
nativa para instanciar um UIImagePickerController e, no Android, cria uma intenção de
usar o MediaStore.ACTION_IMAGE_CAPTURE para tirar uma foto;

Obs.: De forma subjacente, o JavaScript vai chamar uma função nativa, disponibilizada
pelo container. Essa função nativa será diferente dependendo da plataforma utilizada
(por exemplo, será uma na plataforma iOS e outra na plataforma Android).

• Ao desenvolver um aplicativo híbrido, você não precisa se preocupar com esse nível
de detalhe. Tudo o que você precisa fazer é chamar a função JavaScript (navigator.
camera.getPicture () nesse caso) e responder ao resultado.

RESUMO

Apps Nativas
• Construída para uma plataforma;
• Codificada com o SDK da plataforma;
• Deve ser reescrita para cada plataforma;
• Acessa todas as APIs nativas;
• Alta performance gráfica;
• Distribuição pela App Store.

Apps Híbridas
• Plataforma Cruzada;
• Codificada com HTML5/CSS3/JS;
• Executa localmente mas tem suporte off-line;
• Acessa APIs nativas;
• Distribuição pela App Store.

Mobile Web Apps E PWAs


• Plataforma Cruzada;
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Codificada com HTML5/CSS3/JS;


• Atualização Centralizada;
• Distribuída sem necessidade de App Store;
• Acesso restrito às APIs Nativas.

REACT NATIVE

• O React Native é um framework JavaScript para escrever aplicativos móveis nativos


para iOS e Android;
15m
• Ele é baseado no React, a biblioteca JavaScript do Facebook para criar interfaces
de usuário, mas em vez de ser executado no navegador, ele é executado em
plataformas móveis;

Obs.: Em um primeiro momento, o React Native parecerá uma aplicação híbrida, mas a
interface que ele exibirá para o usuário é uma interface nativa, e não um WebViewcomo
em uma aplicação híbrida.

• Em outras palavras: os desenvolvedores da web agora podem escrever aplicativos


móveis que parecem verdadeiramente “nativos”;
• Como a maior parte do código pode ser compartilhado entre as plataformas, o React
Native facilita o desenvolvimento simultâneo para Android e iOS (compilação cruzada
com a mesma base de código);
• Semelhante ao React para a Web, os aplicativos React Native são escritos usando
uma mistura de JavaScript e marcação XML, conhecida como JSX. Então, a "ponte"
React Native invoca as APIs de renderização nativas em Objective C (para iOS) ou
Java (para iOS) ou Java (para Android);
• Assim, o aplicativo renderizará usando componentes reais da interface do usuário móvel,
não webviews, e terá a aparência de qualquer outro aplicativo para dispositivos móveis;
• O React Native também expõe interfaces JavaScript para APIs da plataforma, para que
os aplicativos React Native possam acessar recursos da plataforma, como a câmera
do telefone ou a localização do usuário.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROPS
• É uma abreviação de "properties", e é a forma como os componentes se comunicam;
• As propriedades fluem para baixo a partir do componente pai;
• É por isso que as pessoas se referem ao React como tendo fluxo de dados unidirecional.

Exemplo de Tela React

STATE

• As propriedades não devem mudar, por isso o estado é alterado;


• Normalmente, os componentes não têm estado e, portanto, são chamados de stateless;
um componente usando estado é conhecido como stateful;
• Assim, o estado é usado para que um componente possa controlar as informações
entre suas renderizações;
• Ao acionar setState, ele atualiza o objeto de estado e renderiza novamente o
componente.
20m
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Arquiteturas para Desenvolvimento de Aplicativos em Dispositivos Móveis II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo

DIRETO DO CONCURSO
1. (CESPE/SLU-DF/ANALISTA DE GESTÃO DE RESÍDUOS SÓLIDOS
INFORMÁTICA/2019) No que diz respeito a ferramentas de desenvolvimento, julgue
o item a seguir. React Native utiliza componentes nativos em vez de componentes
da Web como blocos de construção, existindo dois tipos de dados que controlam um
componente: state, definido pelo pai e fixado durante todo o tempo de vida de um
componente; e props, utilizado para os dados que irão mudar.

COMENTÁRIO
A questão inverteu os conceitos. Quem é definido pelo pai não é o state, é o props. O state
é utilizado para os dados que irão mudar, e não o props.

GABARITO
1. E

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DESENVOLVIMENTO MOBILE ANDROID

Introdução

• O Android é um sistema operacional e plataforma de programação desenvolvido pelo


Google para telefones celulares e outros dispositivos móveis, como tablets;
• Pode funcionar em muitos dispositivos diferentes de muitos fabricantes;
5m
• O Android inclui um kit de desenvolvimento de software (SDK) que auxilia a escrita
de código e a montagem de módulos de software para criar aplicativos para usuários
do Android;
• O Android também oferece uma app store para distribuir aplicativos;
• Android representa um ecossistema para aplicativos móveis;

Obs.: a plataforma do Android é uma concorrente da Apple, sendo estas as duas maiores
do mercado. Em geral, o Android domina de 70% a 80% do mercado, enquanto a
Apple, de 20% a 30%.

• A plataforma Android, baseada no kernel do Linux, é projetada principalmente para


dispositivos móveis com tela sensível ao toque, como telefones celulares e tablets;
• Como os dispositivos com Android geralmente são alimentados por bateria, o Android
foi projetado para gerenciar processos para manter o consumo de energia no mínimo,
proporcionando um uso mais prolongado da bateria;

Obs.: tratando-se de desenvolvimento móvel, surge uma série de preocupações adicio-


nais, não só em relação ao sistema operacional – que é customizado para o ambien-
te do celular – como também no que diz respeito às restrições desse ambiente. Os
celulares têm baterias com uma vida útil menor, diferente dos dispositivos que ficam
ligados na tomada por longos períodos e podem ter um alto consumo de energia. Por
isso, os processadores do celular, em geral, usam a tecnologia Arm, que é mais eco-
nômica. Atualmente, começaram a surgir alguns dispositivos x86, que têm a mesma
arquitetura do processador de um computador.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

 Além disso, é importante que o sistema operacional se atente tanto ao gerenciamen-


to de memória, que usualmente é mais escassa, quanto ao gerenciamento do con-
sumo de energia elétrica.

Desenvolvimento de Apps

• Para desenvolver aplicativos Android, utiliza-se o kit de desenvolvimento de software


do Android (SDK), que é gratuito;
• O SDK inclui bibliotecas de software, um depurador, um emulador de dispositivo, docu-
mentação, código de exemplo e tutoriais;

Obs.: as bibliotecas de software ajudam a desenvolvê-lo de maneira mais rápida, o depura-


dor auxilia a encontrar eventuais erros de programação e o emulador de dispositivo
permite que uma simulação de variadas telas e formatos seja feita.

É importante lembrar que o Android tem uma multiplataforma, sendo possível instalar o
Android SDK tanto no Desktop e no Mac, quanto no Linux e no Windows.
10m

• Utiliza-se a linguagem de programação Java para desenvolver o aplicativo e os arqui-


vos XML (Extensible Markup Language) para descrever os recursos de dados;
• O aplicativo que pode ser executado em telefones e tablets e a interface pode ser
declarada em conjuntos de recursos XML.

IDE

• Para auxiliar o desenvolvimento dos aplicativos, o Google oferece um ambiente de


desenvolvimento integrado (IDE) chamado Android Studio;

Obs.: nas primeiras versões, a Google disponibilizava um plugin para ser baixado no Eclip-
se. Porém, devido a diversos problemas de performance, o Android Studio foi de-
senvolvido com a finalidade específica de construir os aplicativos do Android. Ele
também gerencia as bibliotecas do SDK e permite a criação de novas versões do
emulador e a execução dele.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Ele oferece recursos avançados para desenvolvimento, depuração e empacotamento


de aplicativos para Android;
• Usando o Android Studio, pode-se desenvolver para qualquer dispositivo com Android
ou criar dispositivos virtuais que emulem qualquer configuração de hardware.

Arquitetura

Obs.: o Android é desenvolvido com muito C/C++, que são linguagens de nível mais baixo,
para que ele tenha uma maior performance. No entanto, para facilitar para o desen-
volvedor conseguir as aplicações, é oferecido para ele a possibilidade de programar
com o Java, que tem um nível mais alto de abstração.
15m

1. Aplicativos: aplicativos de desenvolvedores residem nesse nível, juntamente com os


principais aplicativos do sistema para e-mail, mensagens SMS, calendários, navegação na
Internet e contatos;
2. Java API framework: todos os recursos para desenvolvimento do Android, como com-
ponentes de UI, gerenciamento de recursos e gerenciamento do ciclo de vida, estão disponí-
veis por meio de interfaces de programação de aplicativos (APIs);
3. Bibliotecas e runtime do Android: cada aplicativo é executado em seu próprio pro-
cesso, com sua própria instância runtime do Android. O Android inclui um conjunto de biblio-
tecas principais de runtime que fornecem a maior parte da funcionalidade da linguagem de
programação Java. Muitos componentes e serviços do sistema core do Android são criados a
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

partir de código nativo que requer bibliotecas nativas escritas em C e C ++. Essas bibliotecas
nativas estão disponíveis para aplicativos por meio do Java API framework;
4. Camada de abstração de hardware (HAL): essa camada fornece interfaces padrão
que expõem os recursos de hardware do dispositivo ao Java API framework de nível superior.
O HAL consiste em vários módulos de biblioteca, cada um dos quais implementa uma interface
para um tipo específico de componente de hardware, como a câmera ou o módulo Bluetooth;
5. Kernel Linux: a base da plataforma Android é o kernel do Linux. As camadas acima do
kernel do Linux dependem do kernel do Linux para threads, gerenciamento de memória de
baixo nível e outras funcionalidades. O uso de um kernel Linux permite que o Android apro-
veite os recursos de segurança baseados no Linux e permite que os fabricantes de dispositi-
vos desenvolvam drivers de hardware para um kernel bem conhecido.
20m

Obs.: o kernel do Linux é facilmente acessível e já é validado pelo mercado em termos de


segurança e isolamento há muitos anos.

Distribuição

Para distribuir a aplicação, isto é, fazê-la chegar no celular do usuário. Um aplicativo


Android pode ser distribuído de várias formas:

• e-mail;
• Website;
• Mercado de aplicativos, como o Google Play;

A distribuição e instalação dos aplicativos, sem que seja necessário nenhum tipo de des-
bloqueio do dispositivo, pode ocorrer por meio do recebimento do apk por e-mail, website etc.
Em geral, essa não é a forma mais comum de utilizar os aplicativos, pois a Play Store (loja de
software oficial da Google) faz uma série de verificações, principalmente em relação à segu-
rança. Logo, trata-se de uma forma de distribuição mais recomendada.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Versões

Fundamentos de Aplicativos

• Os aplicativos do Android são programados em linguagem de programação Java;


• As ferramentas do Android SDK compilam o código – em conjunto com todos os arqui-
vos de dados e recursos – em um APK – um pacote Android, que é um arquivo de
sufixo.apk;

Obs.: o.apk é um formato de instalação, de maneira análoga ao.exl do Windows. Não é


multiplataforma como o arquivo.jar, do Java.
25m

• Os arquivos de APK contêm todo o conteúdo de um aplicativo do Android e são os arqui-


vos que os dispositivos desenvolvidos para Android usam para instalar o aplicativo;
• Depois de instalado em um dispositivo, cada aplicativo do Android é ativado na própria
sandbox, que é a área segura que evite que o aplicativo roube os dados do usuário,
por exemplo;
• O sistema operacional Android é um sistema Linux multiusuário em que cada aplicativo
é um usuário diferente;
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: no Linux tradicional há um único login, de um mesmo usuário, para vários aplicativos.
No caso do Android, para cada aplicativo é criado um usuário diferente, de modo que
eles terão níveis de acesso distintos.

• Por padrão, o sistema atribui a cada aplicativo um ID de usuário do Linux exclusivo


(o ID é usado somente pelo sistema e é desconhecido para o aplicativo). O sistema
define permissões para todos os arquivos em um aplicativo, de modo que somente o
ID de usuário atribuído àquele aplicativo pode acessá-los;
• Cada processo tem a própria máquina virtual (VM), portanto, o código de um aplicativo
é executado isoladamente de outros aplicativos.

Obs.: trata-se de uma estratégia para criar o sandbox, misturando uma estratégia própria
com uma já fornecida pelo próprio kernel do Linux do usuário.

• Por padrão, cada aplicativo é executado no próprio processo do Linux. O Android inicia
o processo quando é preciso executar algum componente do aplicativo; em seguida,
encerra-o quando não mais é necessário ou quando o sistema precisa recuperar
memória para outros aplicativos;
• Assim, o sistema Android implementa o princípio do privilégio mínimo. Ou seja, cada
aplicativo, por padrão, tem acesso somente aos componentes necessários para a exe-
cução do seu trabalho e nada mais. Isso cria um ambiente muito seguro em que o
aplicativo não pode acessar partes do sistema para o qual não tem permissão;

Obs.: os critérios de segurança em dispositivos móveis para aplicativos de celular são mui-
to mais restritos que os critérios utilizados para aplicativos Desktop, uma vez que o
usuário é mais leigo e uma quantidade grande de aplicativos é instalada.

• No entanto, existem maneiras de um aplicativo compartilhar dados com outros aplica-


tivos e acessar serviços do sistema:
– É possível fazer com que dois aplicativos compartilhem o mesmo ID de usuário
do Linux, caso em que eles são capazes de acessar os arquivos um do outro.
Para preservar os recursos do sistema, os aplicativos com o mesmo ID de usuário
também podem ser combinados para serem executados no mesmo processo Linux
e compartilharem a mesma VM (também é preciso atribuir o mesmo certificado aos
aplicativos);
– Um aplicativo pode solicitar permissão para acessar dados de dispositivo como con-
tatos do usuário, mensagens SMS, o sistema montável (cartão SD), câmera, Blue-
tooth etc. O usuário precisa conceder essas permissões de forma explícita.

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (2015/UFMT/IFMT/PROFESSOR/ENGENHARIA DE COMPUTAÇÃO) Sobre o sistema
operacional Android, é INCORRETO afirmar:
a. Para que uma aplicação seja instalada, o usuário precisa aprovar as permissões
solicitadas.
30m
b. Usa um tipo de máquina virtual Java denominada Dalvik.
c. Seu kernel é baseado no kernel da família de sistema operacional BSD.
d. O Android suspende da memória aplicações abertas que não estão sendo utilizadas.

COMENTÁRIO
a. Um aplicativo pode solicitar permissão para acessar dados de dispositivo como contatos
do usuário, mensagens SMS, o sistema montável (cartão SD), câmera, Bluetooth etc. O
usuário precisa conceder essas permissões de forma explícita.
b. Aplicações Android escritas em Java são compiladas em bytecodes Dalvik e executadas
usando a Máquina Virtual Dalvik, que é uma máquina virtual especializada desenvolvida
para uso em dispositivos móveis, o que permite que programas sejam distribuídos em
formato binário (bytecode) e possam ser executados em qualquer dispositivo Android, in-
dependentemente do processador utilizado;
– Apesar de as aplicações Android serem escritas na linguagem Java, ela não é uma má-
quina virtual Java, já que não executa bytecode JVM;
c. A plataforma Android, baseada no kernel do Linux, é projetada principalmente para dis-
positivos móveis com tela sensível ao toque, como telefones celulares e tablets.
d. Se um aplicativo tiver um processo em cache e retiver a memória que atualmente não é
necessária, o aplicativo, mesmo quando o usuário não o estiver usando, afetará o desem-
penho geral do sistema.
– Como o sistema fica com pouca memória, ele mata processos no cache de LRU, come-
çando com o processo menos usado recentemente;
– O sistema também considera os processos que armazenam mais memória e pode termi-
ná-los para liberar memória RAM.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DESENVOLVIMENTO MOBILE ANDROID II

Componentes de Aplicativo

• Componentes de aplicativo são os blocos de construção de um aplicativo Android;


• Cada componente é um ponto diferente pelo qual o sistema pode entrar em seu
aplicativo;

Obs.: o aplicativo não é um “monolito”, mas um conjunto de componentes separados que


podem acionar uns aos outros ou ter um acionamento externo, em que cada um tem
uma funcionalidade diferente.

• Nem todos os componentes são pontos de entrada reais para o usuário e alguns
dependem uns dos outros, mas cada um existe como uma entidade independente e
desempenha uma função específica – cada um é um bloco de construção exclusivo
que ajuda a definir o comportamento geral do aplicativo;
• Há quatro tipos de componentes de aplicativo. Cada tipo tem uma finalidade distinta e
tem um ciclo de vida específico que define a forma pela qual o componente é criado e
destruído;
• Eis os quatro tipos de componentes de aplicativos:
– Atividades;
– Serviços;
– Provedores de conteúdo;
– Receptores de transmissão.

Atividades (Activity)

• Atividades representam uma tela única (visual) com uma interface do usuário;
• Por exemplo, um aplicativo de e-mail pode ter uma atividade que mostra uma lista de
novos e-mails, outra atividade que compõe um e-mail e outra ainda que lê e-mails;
• Embora essas atividades funcionem juntas para formar uma experiência de usuário
coesa no aplicativo de e-mail, elas são independentes entre si;
• Portanto, um aplicativo diferente pode iniciar qualquer uma dessas atividades (se o
aplicativo de e-mails permitir);
5m
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Por exemplo, um aplicativo de câmera pode iniciar a atividade no aplicativo de email


que compõe o novo e-mail para que o usuário compartilhe uma foto;
• Uma atividade é implementada como uma subclasse de Activity.

Serviços (Service)

• Serviços são componentes executados em segundo plano para realizar operações de


execução longa ou para realizar trabalho para processos remotos;
• Eles não apresentam uma interface do usuário. Por exemplo, um serviço pode
tocar música em segundo plano enquanto o usuário está em um aplicativo diferente ou
buscar dados na rede sem bloquear a interação do usuário com uma atividade;
• Outro componente, como uma atividade, pode iniciar o serviço e deixá-lo executar ou
vincular-se a ele para interagir;
• Um serviço é implementado como uma subclasse de Service.

Provedores de Conteúdo (ContentProvider)

• Provedores de conteúdo gerenciam um conjunto compartilhado de dados do aplicativo;


• É possível armazenar os dados no sistema de arquivos, em um banco de dados SQLite
(leve) ou em qualquer local de armazenamento persistente que o aplicativo possa
acessar; isto é, os dados ficam salvos no próprio dispositivo;
• Por meio do provedor de conteúdo, outros aplicativos podem consultar ou até modifi-
car os dados (se o provedor de conteúdo permitir);
• Por exemplo, o sistema Android oferece um provedor de conteúdo que gerencia os
dados de contato do usuário;
10m
• Assim, qualquer aplicativo com as permissões adequadas pode consultar parte do pro-
vedor de conteúdo (como ContactsContract.Data) para ler e gravar informações sobre
uma pessoa específica;

Obs.: durante a instalação do aplicativo (ou quando o aplicativo for utilizar o recurso pela
primeira vez), será enviado um pedido de permissão para o usuário. Assim, os apli-
cativos são executados no sistema operacional a partir de barreiras bastante rígidas.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Os provedores de conteúdo são úteis para ler e gravar dados privados no aplicativo e
não compartilhados;
• Um provedor de conteúdo é implementado como uma subclasse de ContentProvider
e precisa implementar um conjunto padrão de APIs que permitem a outros aplicativos
realizar transações.

Obs.: trata-se de um recurso um pouco menos utilizado se comparado ao Activity e ao Ser-


vice. Muitas vezes, o ContentProvider é fornecido pelo próprio sistema operacional.

Receptores de Transmissão (BroadcastReceiver)

• Receptores de transmissão são componentes que respondem a anúncios de transmis-


são por todo o sistema;
• Muitas transmissões se originam do sistema – por exemplo, uma transmissão que
anuncia que uma tela foi desligada, a bateria está baixa ou uma tela foi capturada;
• Os aplicativos também podem iniciar transmissões – por exemplo, para comunicar a
outros dispositivos que alguns dados foram baixados no dispositivo e estão disponí-
veis para uso;
• Embora os receptores de transmissão não exibam nenhuma interface do usuário, eles
podem criar uma notificação na barra de status para alertar ao usuário quando ocorre
uma transmissão;
• Mais comumente, no entanto, um receptor de transmissão é somente um “portal” para
outros componentes e realiza uma quantidade mínima de trabalho. Por exemplo, ele
pode iniciar um serviço para executar um trabalho baseado no evento;
• Os receptores de transmissão são implementados como subclasses de BroadcastRe-
ceiver e cada transmissão é entregue como um objeto Intent.

Ativação de Componentes

• Três dos quatro tipos de componente – atividades, serviços e receptores de transmis-


são – são ativados por uma mensagem assíncrona chamada intent;
• A intent é a base da comunicação entre os componentes do Android. Ela é criada e
define uma mensagem para ativar um componente específico ou um tipo específico de
componente;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Para atividades e serviços, os intents definem a ação a executar (por exemplo, “exibir”
ou “enviar” algo) e podem especificar a URI dos dados usados na ação (entre outras
coisas que o componente a iniciar precisa saber);
• Por exemplo, um intent pode transmitir uma solicitação de uma atividade para exibir
uma imagem ou abrir uma página da Web;
• Obs.: supondo-se que em um aplicativo corporativo há um link ou uma tela com um
botão “Consulte nosso site”. Ao clicar nessa opção, uma intent pode ser disparada com
a informação de que se deseja exibir um site. Além disso, alguma outra aplicação pode
ser registrada para ouvir essa intent, como o navegador, que se oferecerá para execu-
tá-la. Caso existam vários aplicativos ou activities registradas para ouvir tal intent, uma
lista poderá ser exibida para que o usuário defina o destino da informação em questão.
15m
• Em alguns casos, é preciso iniciar uma atividade para receber um resultado; nesse
caso, a atividade também retorna o resultado em um Intent;
• Por exemplo, é possível emitir um intent para que o usuário selecione um contato pes-
soal e retorne-o ao app chamador – o intent de retorno contém uma URI que aponta
para o contato selecionado;
• Em termos de código (no exemplo a seguir, para que seja exibido um alarme):

• Se não houver aplicativos no dispositivo que possam receber a intent implícita, o apli-
cativo apresentará um erro ao acionar startActivity();

Obs.: na intent implícita, informa-se apenas que, por exemplo, deseja-se ajustar um alar-
me. Na explícita, a aplicação que será aberta deverá ser especificada. No primeiro
caso, é possível que várias aplicações distintas respondam para uma mesma funcio-
nalidade, cabendo ao usuário escolher qual mais se adequa para o seu uso.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Para verificar primeiro se existe um aplicativo para receber o intent, aciona-se resolve-
Activity() no objeto Intent;
• Se o resultado for diferente de nulo, há pelo menos um aplicativo que pode processar
a intent e é seguro chamar startActivity();
• Se o resultado for nulo, não se deve utilizar a intent e, se possível, devemos desativar
o recurso que invoca a intent;
• Para receptores de transmissão, a intent simplesmente define o anúncio que está
sendo transmitido (por exemplo: uma transmissão para indicar que a bateria do dispo-
sitivo está acabando contém uma string de ação conhecida que indica “nível baixo da
bateria”);

20m

• O outro tipo de componente, o provedor de conteúdo, não é ativado por intents;


• Em vez disso, ele é ativado por uma solicitação de um ContentResolver;
• O resolvedor de conteúdo trata todas as transações diretas com o provedor de conte-
údo para que o componente que executa as transações com o provedor não precise e,
em vez disso, chama os métodos no objeto ContentResolver;
• Isso deixa uma camada de abstração entre o provedor de conteúdo e o componente
que solicita informações (por segurança);
• É possível iniciar uma activity passando uma Intent a startActivity() ou startActivityFor-
Result() (para que, quando desejado, a atividade retorne um resultado);
• É possível iniciar um dispositivo passando uma Intent a startService(). Também é pos-
sível vincular ao serviço passando uma Intent a bindService();
• Pode-se iniciar uma transmissão passando uma Intent para métodos como sendBroa-
dcast(), sendOrderedBroadcast() ou sendStickyBroadcast();
• É possível iniciar uma consulta a um provedor de conteúdo chamando query() em um
ContentResolver.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O Arquivo de Manifesto

• Antes de o sistema Android iniciar um componente de aplicativo, é preciso ler o arquivo


AndroidManifest.xml (o arquivo de “manifesto”) do aplicativo para que o sistema saiba
que o componente existe;
• O aplicativo precisa declarar todos os seus componentes nesse arquivo, que deve
estar na raiz do diretório do projeto do aplicativo;
• São funções do manifesto:
– Identificar todas as permissões do usuário de que o aplicativo precisa, como acesso
à internet ou acesso somente leitura aos contatos do usuário;
– Declarar o nível de API mínimo (versão mínima) exigido pelo aplicativo com base
nas APIs que o aplicativo usa;
– Declarar os recursos de hardware e software usados ou exigidos pelo aplicativo,
como câmera, serviços de Bluetooth ou tela multitoque;
– As bibliotecas de API às quais o aplicativo precisa se vincular (outras além das APIs
do framework do Android), como a biblioteca Google Maps.

Declaração de Recursos de Componentes

• É possível usar uma Intent para iniciar atividades, serviços e receptores de transmis-
são. Isso pode ser feito nomeando-se explicitamente o componente-alvo (usando o
nome da classe do componente) no intent;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• No entanto, a verdadeira força dos intents reside no conceito de intents implí-


citos. Os intents implícitos descrevem simplesmente o tipo de ação a executar (e,
opcionalmente, os dados em que a ação deve ser executada) e permitem ao sistema
encontrar e iniciar um componente no dispositivo que pode executar a ação;
• Se houver mais de um componente que possa executar a ação descrita pelo intent, o
usuário selecionará qual deles usar;
25m
• Para o sistema identificar os componentes que podem responder a um intent, compa-
ra-se o intent recebido com os filtros de intent fornecidos no arquivo de manifesto de
outros aplicativos no dispositivo;
• Ao declarar uma atividade no manifesto do aplicativo, pode-se incluir filtros de intents
que declarem os recursos da atividade para que ela responda a intents de outros apli-
cativos. Para declarar um filtro de intents no componentes, adiciona-se um elemento
como filtro do elemento de declaração do componente;
• Por exemplo, se estiver programando um aplicativo de e-mail com uma atividade de
compor um novo e-mail, poderá declarar um filtro de intents para responder a intents
“enviar” (para enviar um novo e-mail), assim:

Declaração de Requisitos do Aplicativo

• Existem vários dispositivos desenvolvidos para Android e nem todos apresentam os


mesmos recursos e características. Para evitar que o aplicativo seja instalado em dis-
positivos que não contenham os recursos de que o aplicativo necessita, é importante
definir um perfil para os tipos de dispositivo compatíveis com o aplicativo;
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• É preciso declarar os requisitos de dispositivo e software no arquivo de manifesto. A


maior parte dessas declarações é somente informativa e o sistema não as lê, mas ser-
viços externos, como o Google Play, leem para oferecer uma filtragem aos usuários
quando buscam esses aplicativos para seu dispositivo;
• Por exemplo, se o aplicativo exige uma câmera e usa APIs introduzidas no Android
2.1 (API de nível 7), deve-se declarar esses requisitos no arquivo de manifesto da
seguinte forma:

• Os aplicativos Android são compostos de mais que somente códigos – eles exigem
recursos separados do código-fonte, como imagens, arquivos de áudio e tudo o que
se relaciona com a apresentação visual do aplicativo;

• Por exemplo, deve-se definir animações, menus, estilos, cores e o layout das interfa-
ces do usuário da atividade com arquivos XML;
• O uso de recursos de aplicativo facilita a atualização de diversas características do apli-
cativo sem a necessidade de modificar o código e – fornecendo conjuntos de recursos
alternativos – permite otimizar o aplicativo para diversas configurações de dispositivo
(como idiomas e tamanhos de tela diferentes);
• Para todo recurso incluído no projeto Android, as ferramentas de programação SDK
definem um ID inteiro exclusivo que o programador pode usar para referenciar o
recurso do código do aplicativo ou de outros recursos definidos no XML;
• Por exemplo, se o aplicativo contiver um arquivo de imagem de nome logo.png (salvo
no diretório res/drawable/), as ferramentas de SDK gerarão um código de recurso cha-
mado R.drawable.logo, que pode ser usado para referenciar a imagem e inseri-la na
interface do usuário.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Desenvolvimento Mobile Android II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO

1. (2018/FGV/BANESTES/ANALISTA EM TECNOLOGIA DA INFORMAÇÃO/DESENVOL-


VIMENTO DE SISTEMAS) Os aplicativos do Android são construídos por meio de com-
ponentes bem definidos. O componente de aplicativo do Android que fornece uma tela
com a qual os usuários podem interagir para fazer algo, como discar um número no
telefone, enviar um e-mail ou ver um mapa é:
a. Activity;
b. BroadcastReceiver;
c. ContentProvider;
d. Intent;
e. Service.

COMENTÁRIO
Atividades representam uma tela única com uma interface do usuário. Por exemplo, um
aplicativo de e-mail pode ter uma atividade que mostra uma lista de novos e-mails, outra
atividade que compõe um e-mail e outra que lê e-mails.
30m

GABARITO
1. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

IOS DESENVOLVIMENTO MOBILE

Referências bibliográficas: https://developer.apple.com/documentation/

Introdução

• A Apple lançou o primeiro iPhone em 2007, o que criou uma grande revolução para a
indústria de smartphones com uma grande tela tátil e um botão para navegação;
• Os aplicativos nativos das plataformas Android e iOS não são intercambiáveis;
5m
• O iPhone foi o primeiro smartphone fácil de usar projetado para proporcionar aos
usuários uma sensação confortável ao navegar pelo conteúdo da Web, explorando
aplicativos com toques simples, bem como vários recursos padrão do telefone celular;
• O desenvolvimento para iOS tem como objetivo criar aplicativos para serem comercia-
lizados na App Store e podem ser instalados em iPhones ou iPads.

Arquitetura

• O iOS é o sistema operacional criado pela Apple para dispositivos móveis;


• O iOS é usado em muitos dos dispositivos móveis da Apple, como iPhone, iPod, iPad etc.
O iOS é muito utilizado e só fica atrás do Android (google) em termos de popularidade;
10m
• A arquitetura do iOS é dividida em camadas. Ele contém uma camada intermediária
entre os aplicativos e o hardware para que eles não se comuniquem diretamente. As
camadas inferiores no iOS fornecem os serviços básicos e as camadas superiores for-
necem a interface do usuário e gráficos sofisticados;
• Camadas que dividem o iOS:
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Core OS

Todas as tecnologias do iOS são criadas com base nos recursos de baixo nível forneci-
dos pela camada do Core OS.
Essas tecnologias incluem o Core Bluetooth Framework, o External Accessory Fra-
mework, o Accelerate Framework, o Security Services Framework, o Local Authorization Fra-
mework etc;

• Core Services

Existem muitos frameworks disponíveis na camada Core Services. Dentre estes


destacam-se:
– Cloudkit Framework: Dados podem ser movidos entre o aplicativo do iCloud usando
o Cloudkit Framework;
– Core Foundation Framework: Fornece o gerenciamento de dados e recursos de ser-
viço para os aplicativos iOS;
– Core Data Framework: O modelo de dados do aplicativo do controlador de visualiza-
ção de modelo é tratado usando o Core Data Framework;
15m
– Address Book Framework: Fornece acesso ao banco de dados de contatos do usuário;
– Core Motion Framework: Todos os dados baseados em movimento no dispositivo são
acessados ​​usando o Core Motion Framework;
– Healthkit Framework: As informações relacionadas biometria do usuário podem ser
manipuladas por esse novo framework;
– Core Location Framework: Este framework fornece dados de geolocalização para os
aplicativos;

• Media

A camada de mídia habilita toda a tecnologia de gráficos, áudio e vídeo do sistema. Os


diferentes frameworks são:
– UIKit Graphics: Fornece suporte para exibir imagens e animar o conteúdo da
visualização;
– Core Graphics Framework: Fornece suporte para renderização baseada em imagens
e vetores 2D e é o mecanismo de desenho nativo para aplicativos iOS;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– Core Animation: A tecnologia Core Animation otimiza a experiência de animação dos


aplicativos;
– Media Player Framework: Fornece suporte para reproduzir playlists e permite que o
usuário use sua biblioteca do iTunes;
– AV Kit: Fornece várias interfaces fáceis de usar para apresentação de vídeo;

• Cocoa Touch

Fornece os seguintes frameworks:


– EventKit Framework: Mostra as interfaces padrão do sistema usando os controlado-
res de exibição para visualizar e alterar eventos relacionados ao calendário;
– GameKit Framework: Fornece suporte para que os usuários compartilhem seus
dados relacionados ao jogo on-line usando o Game Center;
– MapKit Framework: Fornece um mapa rolável que pode ser incluído na interface do
usuário do aplicativo;

Desenvolvimento

• O desenvolvimento de aplicativos para iOS (iPod, iPhone e iPad) é baseado em uma


linguagem de programação chamada Objective-C também conhecida por ObjC;
20m
• ObjC é uma linguagem de programação orientada a objetos que adiciona o estilo
de troca de mensagens de Smalltalk à linguagem de programação C;
• Foi desenvolvida nos anos 80 pela StepStone e adotada e popularizada pela NeXT
para seu sistema operacional NeXTSTEP, de onde o OS X e iOS nasceram;
• O ObjC fornece a sintaxe para os comandos que são utilizados em um aplicativo, no
entanto ele não oferece suporte a interface de usuários, recursos em rede ou à leitura
de arquivos;
• Este suporte vem da biblioteca Cocoa Touch, desenvolvida pela Apple e formada por
diversos frameworks (coleções de classes agrupadas);
• O ObjC fornece a sintaxe para os comandos que utilizamos em nosso aplicativo, no
entanto ele não oferece suporte a interface de usuários, recursos em rede ou à leitura
de arquivos. Este suporte vem da biblioteca Cocoa Touch, desenvolvida pela Apple e
formada por diversos frameworks (coleções de classes agrupadas);
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Outra opção de linguagem de desenvolvimento para iOS é o Swift;


• Swift é uma linguagem de uso geral, multi-paradigma, compilada, criada para iOS, OS
X, watchOS, tvOS e desenvolvimento Linux pela Apple Inc;
• Ele é uma alternativa para a linguagem Objective-C que é a linguagem recomendada e
mais popular para criação de aplicativos para o ecossistema de dispositivos da Apple;
• Foi desenvolvida para ser uma alternativa mais rápida para Objective-C. Além da
velocidade, o Swift oferece outras vantagens, incluindo facilidade de aprendizado,
segurança, requer menos código e é interativa (REPL);
25m

Xcode

Para facilitar o desenvolvimento de aplicativos iOS, a Apple disponibiliza de maneira gra-


tuita para os desenvolvedores o Xcode, uma IDE (Integrated Development Environment) bas-
tante poderosa e fácil de utilizar;
O Xcode possui diversas ferramentas muito úteis, entre as mais importantes podemos citar:

• O compilador da Apple LLVM, que, além de compilar o código, fornece uma ferramenta
inteligente de para completar o código;
• O Interface Builder (IB), para trabalhar a parte visual do aplicativo, construindo as telas;
• Uma ferramenta para debug;
• O Organizer, que auxilia no gerenciamento de projetos e dispositivos cadastrados para
testes, além de apresentar a documentação auxiliar;
• O Instruments; uma ferramenta para análise de desempenho do código;
• E, por fim, o iOS Simulator, um simulador para iPhone e iPad no qual pode-se testar
os aplicativos;
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

XCode:

Cadastramento do Desenvolvedor

• Para que se possa testar seus aplicativos em dispositivos reais é necessário que o
desenvolvedor tenha uma conta junto a Apple, desta forma o mesmo pode cadastrar
seus dispositivos, realizar os testes e submeter seus aplicativos para AppStore (loja
virtual da Apple);
• O cadastro de uma conta de desenvolvedor é realizado direto no site de desenvolvi-
mento da Apple (Developer Apple);

Padrão MVC

• Os aplicativos para iOS seguem o padrão MVC (Model-View- Controller). Este padrão
separa o modelo, um conjunto de classes que manipula dados, das views, interfaces
de usuários ou telas, e permite que um controlador (controller) gerencie o fluxo de
informações entre o modelo e as telas;

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Isto facilita a construção de projetos universais, que são projetos tanto para iPhone/
iPod, quanto para iPad. Desta forma, o desenvolvedor pode reaproveitar todo o código
do modelo e do controller para ambos dispositivos e só necessita realizar trabalho
extra nas views, uma para iPad e outra para iPhone;
30m

DIRETO DO CONCURSO
1. (FUNCAB/MDA/ANALISTA DE SUPORTE/2014) O sistema operacional iOS é a funda-
ção de quais das seguintes linhas de produtos da Apple?
a. iPhone, iPad e iPod touch.
b. Mac mini, MacBook air e iPhone.
c. iPhone, iMac e iPad.
d. iPad, iMac e iPod touch.
e. iMac, iPod touch e iPhone.

2. (FCC/TRE-PB/ÁREA: APOIO ESPECIALIZADO - PROGRAMAÇÃO DE SISTE-


MAS/2015) O ambiente de desenvolvimento da Apple para iOS e a linguagem de pro-
gramação nativa utilizada são, respectivamente,
a. Xcode e Java ME.
b. iOS Development Kit (iDK) e Object-C.
c. iOS CodeLite e Apple-Script.
d. Xcode e Objective-C.
e. iOS Development Kit (iDK) e Smalltalk.

GABARITO
1. a
2. d

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

IOS DESENVOLVIMENTO MOBILE II

Objective-C

• A linguagem de programação que os desenvolvedores usam para escrever aplicações


para o iPhone é chamada Objective-C, uma linguagem orientada a objeto baseada
sobre o padrão linguagem de programação C;
• As linguagens orientadas a objetos são categorizadas como tal porque incorpo-
ram a representação programática de objetos, como carros e pessoas, para serem
executados;
• Como C não usa objetos, Objective-C é assim chamado porque é meramente uma
linguagem construída sobre C que usa objetos;
• A Apple usa essa linguagem porque é eficiente, fácil de escrever e organizada;
5m

Ex.:

• @autoreleasepool cria uma área com escopo definido e deixa mais claro o que está
dentro do pool. Dentro do bloco @autoreleasepool é onde escrevemos nosso código;
• A próxima linha se chama NSLog, que é uma função trazida pelo Foundation Fra-
mework. Esta função é muito parecida com a função printf() em C. Aceita uma string
de formato e pode ter tokens substituíveis. A principal diferença notável é que o NSLog
cria automaticamente uma nova linha após uma string;
• “@” É um atalho de Objective-C para criar um objeto NSString a partir da cadeia de
caracteres fornecida
• return 0;: Por convenção, um valor de retorno de zero indica que a função foi
bem-sucedida
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Por ser baseado na linguagem C, o Objective-C pode incorporar blocos de código C


(assim como C++), tornando-o muito versátil para o desenvolvimento de aplicativos;
• A maioria das linguagens orientadas a objetos tem algo chamado classe que encapsula
dados e fornece acesso a eles;
• Em Objective-C, uma classe pode conter variáveis de ​​ instâncias, métodos e/ou
propriedades;
10m

Interface ou implementação

No Objective-C, o arquivo no qual a declaração de classe é feita é chamado de arquivo de


interface e o arquivo onde a classe é implementada é chamado de arquivo de implementação;

• Um arquivo de interface simples MinhaClasse.h seria parecido com o seguinte:

• O arquivo de implementação MinhaClasse.m seria o seguinte:

Criação de Objeto

• A criação de objeto é feita da seguinte maneira:

• Criar um novo objeto no Objective-C geralmente é um processo de duas etapas. Pri-


meiro, a memória deve ser alocada para o objeto, então o objeto é inicializado com os
valores apropriados;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A primeira etapa é realizada pelo método de classe alloc, herdado do NSObject e rara-
mente, ou nunca, substituído;
• Esse método literalmente aloca um pedaço de memória suficiente para manter seu
objeto (todas as suas variáveis ​​de instância);
• Em seguida, ele configura todos esses valores para zero ou nulo - isso é para que você
não obtenha valores de lixo deixados para trás pelo que quer que tenha sido usado
pela última vez naquele pedaço de memória;
• Deste modo, todos os objetos começam como nil, BOOLs começam como NO, ints
como 0 e floats são definidos como 0.0. Esses valores são garantidos após o método
alloc ser chamado;

• No entanto, esse objeto ainda não está pronto para ser usado – ele precisa ser inicia-
lizado primeiro;
• Isso é feito pelo método de instância init, que é frequentemente sobrescrito;
• Esse método retorna um objeto do tipo id - o mesmo objeto que está sendo inicializado.

Métodos de instância (-)

• Um método de instância é declarado no Objective-C da seguinte maneira:

• Por exemplo:

Método de Classe (+)

• Métodos de classe podem ser acessados diretamente


​​ sem criar objetos para a classe;
• Eles não possuem variáveis ​​e objetos associados a ele;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Por exemplo:

• Ele pode ser acessado usando o nome da classe da seguinte forma:

• São métodos que são declarados como estáticos;


• O método pode ser chamado sem criar uma instância da classe;
• Os métodos de classe só podem operar em membros da classe e não em membros
da instância, pois os métodos de classe não estão cientes dos membros da instância;
• Os métodos de instância da classe também não podem ser chamados de dentro de
um método de classe, a menos que estejam sendo chamados em uma instância
dessa classe.

Métodos de instância (-)

• Os métodos de instância podem ser acessados ​​somente após a criação de um objeto


para a classe;
• A memória é alocada para as variáveis ​​da instância;
• Por exemplo:

• Pode ser acessado depois de criar um objeto para a classe:

20m

• É necessário que uma instância da classe exista antes de poder ser chamado, portanto,
uma instância de uma classe precisa ser criada;
• Métodos de instância operam em instâncias específicas de classes;
• Métodos de instância não são declarados como estáticos;
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tipos de Dados

Nome Descrição

NSString É usado para representar uma string;


É usado para representar um valor de ponto flutuante (o float normal também
CGFloat
é permitido, mas é melhor usar o CGfloat);
NSInteger É usado para representar o inteiro;
BOOL É usado para representar booleano (YES ou NO são tipos BOOL permitidos);

Logs

• NSLog – usado para imprimir uma string;


• Ela será impressa nos logs do dispositivo e no console de depuração nos modos de
release e debug, respectivamente. Por exemplo:

Objective-C

• Estruturas de Controle: A maioria das estruturas de controle é a mesma que em C e C++;


• Propriedades: Para uma classe externa acessar a classe, variáveis de propriedades​​
são usadas. Por exemplo:

Pode-se usar o operador de ponto para acessar as propriedades. Por exemplo:

• Categorias: Categorias são usadas para adicionar métodos às classes existentes.


Desta forma, pode-se adicionar métodos a classes para as quais não há até mesmo
arquivos de implementação onde a classe real é definida. Por exemplo:

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Arrays

• NSMutableArray e NSArray são as classes de array usadas no Objective-C;


• Como o nome sugere, o primeiro é mutável e o último é imutável;

Por exemplo:

25m

Dictionary

• NSMutableDictionary e NSDictionary são as classes de dicionário usadas no


objetivo C;
• Como o nome sugere, o primeiro é mutável e o último é imutável;

Por exemplo:
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (FUMARC/AL-MG/ANALISTAS DE SISTEMAS–DESENVOLVIMENTO/2014) Ana-
lise as seguintes afirmativas sobre fundamentos para desenvolvimento de aplicações
móveis para iOS.

I – Xcode é o ambiente nativo da Apple para desenvolvimento de aplicativos para iOS.


II – Objective-C é a linguagem de desenvolvimento de aplicativos para iOS.
III – A classe NSObject é a classe raiz das principais hierarquias de classes em Objective-C.

Estão CORRETAS as afirmativas:


a. I, II e III.
b. I e II, apenas.
c. I e III, apenas.
d. II e III, apenas.

2. (CESPE/SERPRO/ANALISTA–DESENVOLVIMENTO DE SISTEMAS/2013) Como o


iOS não implementa um sistema de garbage collection, o Objective-C mantém um con-
tador de referência para os objetos de forma a viabilizar a liberação de memória de
tal objeto.

COMENTÁRIO
Contagem de retenção Objective-C

• Objetive-C utiliza o modo de contagem de retenção (não usando coleta de lixo) é uma
ideia simples;
• Quando se aloca explicitamente um objeto, ele obtém uma contagem de retenção de
1 quando se chama release ou autorelease em um objeto, ele decrementado e, em
seguida, o objeto será coletado;
• É o único modo disponível em dispositivos iOS e está em uso no Mac OS X desde o
início do sistema operacional;
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
IOS Desenvolvimento Mobile II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. a
2. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

FLUTTER

Flutter é um framework para desenvolvimento de aplicações mobile.


O desenvolvimento do mobile começa pelo desenvolvimento da plataforma, utilizando o
SDK da plataforma, da Google ou da Apple. Essa foi a primeira geração, vigente até hoje,
não sendo eliminada após a segunda geração que foi feita para desenvolvimento híbrido,
onde se teria uma base de código que seria executada em ambas as plataformas, tanto no
Android quanto no IOS.
Nesses aplicativos híbridos, onde se desenvolve HTML, CSS e Javascript, onde é exibido
um webview, que é como se fosse um browser, mas sem os seus componentes ali, exibindo
o conteúdo HTML, e fornecendo uma API para acessar os recursos nativos do dispositivo.
Com a evolução, às vezes essa situação híbrida não era tão performática, por estar,
por exemplo, trabalhando com HTML e não com os componentes nativos, vindo então uma
nova geração de framework, no caso o react native, que foi o expoente que ao invés de
exibir uma webview para mostrar os componentes, programar com HTML, ele mostrava
componentes nativos, porém, na hora de exibir, ele não tem webview, mostrando uma view
com componentes nativos.
Por mostrar os componentes nativos, ele tem uma performance de renderização muito
alta, porém, continua programando em Javascript, tirando o CSS e o HTML.
Continuando com a característica de multiplataforma, podendo desenvolver em react
native e compilar para Android ou para IOS. Dessa maneira, o react native ganhou muita
popularidade, levando o react para a web, que é um pouco diferente pois no react native
utiliza-se o react e os componentes nativos.
O react native possui algumas limitações. Quando em telas muito complexas, a trend
nativa, a principal de saturação, continua rodando em Javascript porque esse é o seu código
e ele tem algumas limitações e tendo uma tela muito complexa, começa a engargalar, dando
lags na saturação web. Pensando nisso, a Google veio com outra proposta que é o Flutter.
O Flutter vem nesse cenário para ser desenvolvido uma única vez, podendo rodar em
duas plataformas, tanto Android quanto IOS, apesar de possuir a possibilidade de rodar na
web também. Ele veio com uma estratégia totalmente diferente dos outros.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Ele vem com uma outra linguagem de programação, não sendo Javascript, trabalhando
com linguagem de programação mais nova do Google chamada Dart que é uma linguagem
estaticamente tipada, uma linguagem bastante segura e muito performática.
A tela não é nem em componente nativo nem em HTML. O Dart traz uma Engine gráfica
chamada Skia, que desenha os próprios componentes, pixel a pixel.
5m
A estratégia do Java para ser multiplataforma, ele desenhava os próprios componentes
estratégia do swing.

Obs.: Essa estratégia foi tentada várias vezes, pois a estratégia do swing era muito ruim.

No caso do Flutter, tem dado muito certo, pois a sua performance da engine deles é
muito boa.
Em resumo, deve-se fazer a programação em uma linguagem chamada Dart, essa
linguagem será compilada para código nativo de maneira que, no react native continua
rodando em Javascript, na programação híbrida, continua rodando Javascript. Aqui vai
programar, virar código byte nativo da plataforma mesmo. A Engine gráfica utilizada é própria,
que tem tanto para Android quanto para IOS e os componentes não são nem HTML nem
componentes nativos, sendo componentes desenvolvidos pela própria Google.

• Flutter é o kit de ferramentas de UI do Google para criar aplicativos bonitos e nativamente


compilados para celular, web e desktop a partir de uma única base de código;
– Há essa possibilidade para web e desktop, mas geralmente está se referindo
ao celular.
• Desenvolvimento Rápido: Dê vida ao aplicativo em milissegundos com o Stateful Hot
Reload. Use um rico conjunto de widgets totalmente personalizáveis ​​para construir
interfaces nativas em minutos;
– O Stateful Hot Reload permite que altere o código e ele altere a view no celular
instantaneamente, sem ter que recarregar a tela, mantendo o valor das variáveis.
– Os widgets personalizáveis não significam que o seja em termo de cores e sim pixel
a pixel, conseguindo um nível muito grande de personalização.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• UI expressiva e flexível: Crie funcionalidades rapidamente com foco nas experiências


nativas do usuário final. A arquitetura em camadas permite a personalização total, o que
resulta em uma renderização incrivelmente rápida e designs expressivos e flexíveis;
– Esse é um ponto muito importante no Flutter uma vez que ele une a possibilidade de
customização com uma velocidade de renderização muito rápida que o react native
não entregava.
– Exemplo: Os aplicativos tripleway que aquele banco roxo utiliza o Flutter para
desenvolver os aplicativos dele porque permite uma customização, fluidez de tela,
tendo aplicativos muito bonitos.
• Desempenho Nativo: Os widgets do Flutter incorporam todas as diferenças críticas
de plataforma, como rolagem, navegação, ícones e fontes, e o código do Flutter é
compilado para código de máquina ARM nativo usando os compiladores nativos da Dart;

Obs.: É informado que não é Javascript que está por trás, e sim compilando com código
nativo.

Muitas vezes, em alguns pontos, desenvolver um aplicativo em react native não dá muito
certo, como por exemplo um aplicativo de mapa, um aplicativo que tivesse uma interface
muito diferente, com o Flutter isso é possível.

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Esse é um exemplo de código que se consegue rodar até mesmo na web, uma
aplicação mínima, um Hello World de Flutter. Essa linguagem é chamada Dart que em
alguns momentos se parece com o Java, Javascript, pegando o melhor dos dois.
• Na primeira linha depreende-se sobre o import, as transferências dos pacotes, na
terceira linha há o método principal e funções, nas demais linhas há uma classe. Na
quinta linha há a orientação do objeto, que informa que há herança, na sétima linha há
linhas de retorno, método e parâmetro, tipos de métodos e assim por diante.
• Na linha dezessete há uma função, repassando tudo da oitava linha até a décima sexta,
tendo parâmetros nomeados, sendo um recurso muito interessante da linguagem.
10m
• O Flutter é um framework de desenvolvimento de software multiplataforma que foi
apresentada pelo Google em 2015 e recebeu seu primeiro lançamento em maio de 2017;
• O Flutter hoje em dia tem crescido de forma constante e oferece possibilidades não
apenas para o desenvolvimento móvel iOS e Android, mas também para aplicativos da
web e desktop;
– É um suporte de primeira ordem para os aplicativos web, porém, a partir da versão
II ele tem suporte específico para aplicativos web.
– Ele utiliza uma estratégia diferente, que é a estratégia de abrir um Canvas e desenhar
os componentes próprios dele lá dentro.

Obs.: Como o nível de customização do Flutter é muito alto, pode-se controlar cada pixel
da tela. Quando em um aplicativo react nature é bem mais difícil, pois chama o
componente nativo e tem um certo nível de customização, além de cores. Porém,
não há nada perto do que o Flutter faz, como customizar cada pixel.

– O Flutter é um concorrente para o React Nature onde ultimamente, grandes empresas


têm migrado deste para aquele que inclusive possui uma lógica de designer muito
moderna voltada para animações, transições, fluidez na tela.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Basicamente, o Overview do sistema Flutter vai demonstrar que ele terá dois temas
principais que ele vai entregar que é o Material e o Cupertino. Esse tema Material é
parecido com Material Design e o tema Cupertino que é o tema do IOS, de maneira
que o Material é o tema da Google e o Cupertino do IOS.
• Algo que é estranho do Flutter é, uma vez escolhido o tema, se compilar essa aplicação
para o Android ou IOS, ela terá o mesmo tema.
– Exemplo: Se compilar uma aplicação que tenha Material Designer ela ficará
com esse tema tanto para o Android quanto para o IOS. E se escolher o tema
Cupertino ele ficará com esse tanto para Android tanto para o IOS, não trocando
dinamicamente o tema.
– Na verdade, os temas existem mais como exemplos do que como resultado geral,
vez que as grandes empresas quando vão utilizar, não vão usar nenhum nem o
outro, criando o seu próprio tema.
• Há um conceito muito forte no que tange às Widgets que são os componentes de
tela que possuem a parte de renderização, animação, desenho e gestos, além dos
componentes básicos.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Posteriormente, há o Engine C/C++, vindo em baixo nível para garantir muita


performance com renderização, Pipelining de Frame, Scheduling de Frame, uma
máquina virtual entre outras coisas.
• Posteriormente, existem as especificações da plataforma, como por exemplo os
plugins Native.
• O que acontece na verdade não é que esses frameworks de desenvolvimento de
multiplataformas são melhores, ou piores que os outros. Uns que são mais novos,
são construídos depois, vão observando o que deu certo e o que deu errado em cada
ponto e aí vão utilizando a estratégia de pegar o que deu certo e ignorar o que deu
errado nas plataformas. .
15m
• Apesar do Flutter gerar uma certa estranheza inicial por ter sua codificação diferente, a
sua linguagem e forma para apresentar os componentes serem diferentes, o resultado
é muito bom.

DART

Obs.: Um dos pontos principais é o Dart.

• Dart é uma linguagem de programação orientada a objetos que foi revelada pela
primeira vez pelo Google em 2011;
• Desde então, o Dart evoluiu constantemente, lançando diferentes recursos. Entre
outros, vale mencionar o recurso “dart 2 native” que permite compilá-lo para plataformas
Windows, Linux e macOS como um aplicativo desktop;
• O programa Dart pode ser compilado em um arquivo executável independente ou
compilado em JavaScript, desta forma, você pode executar programas Dart em todos
os navegadores da web modernos;
– Essa é uma característica curiosa: Compilar de Dart para Javascript e ele roda no
navegador ou compilado para código nativo.

O Dart é uma linguagem moderna, interessante, rápida e bem elaborada, com menos
burocracia na linguagem, e com recursos bem interessantes, não sendo, infelizmente,
utilizada em outros aspectos além do próprio Flutter.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Em geral, a linguagem Dart é fácil de estudar;


• Sua sintaxe é bastante semelhante às linguagens Java, Swift ou Kotlin;
– A linguagem não traz muita novidade. A novidade que o Dart traz é agregar as coisas
boas das linguagens Java, Swift ou Kotlin.
– Exemplo: No Java há uma certa burocracia no código que o Dart corta.
• Além disso, o kit de desenvolvimento de software (SDK) Dart é fornecido com uma
máquina virtual (VM) Dart autônoma que permite construir o código em um ambiente
de interface de linha de comando (CLI) e se você não estiver familiarizado com CLI,
então você pode brincar com o Dart no Dart Pad;
• Dart Pad é um editor online que fornece acesso à API do Dart e permite que você
compile o código do Dart;

• Esse é um exemplo de Dart Pad sendo executado, tendo o método principal na primeira
linha void main que faz um print ‘Hello, World!’ onde colocando o Run, aparece o
Hello, World!
– Há aqui algumas características da linguagem. Em um exemplo posterior será
possível visualizar que haverá a função main, função principal, que não terá retorno
então terá aí tipos de retorno bem definidos. E aqui tem o método print bem simples.

void printInteger(int aNumber) {


print(‘The number is $aNumber.’);
}
void main() {
var number = 42; print Integer(number);
}
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Essa função é um pouco mais elaborada, apenas para ver outros recursos da linguagem.
Tem uma definição de uma outra função print Integer que recebe um número inteiro, int
aNumber, recebendo um parâmetro.
– Se observar o { logo após o parênteses, percebe-se que é muito parecido com o
Java, talvez não tendo diferença, a não ser pelo fato de que não é necessário colocar
tudo dentro de uma classe, tendo essa burocracia eliminada. No main principal, com
o var declarado, dizendo que a variável terá o tipo inferido.
– Muitas vezes não precisa declarar o tipo na primeira parte da função, principalmente
em situações em que se tem uma atribuição no momento da criação da variável,
automaticamente o tipo dela será inferido como inteiro, e a função print Integer.
– Note que há a template strings automaticamente na linguagem, utilizando a variável
$Number no meio de uma string, utilizando o dólar já nativo dele

FRAMEWORK FLUTTER

• O framework é escrito usando as linguagens C, C ++ e Dart e usa o Skia Graphics


Engine do Google para renderização da interface do usuário;
– Essa Skia Graphics Engine é que vai desenhar a interface do usuário.
• Este motor gráfico é usado para produtos conhecidos como Google Chrome, Chrome
OS, Chromium OS, Mozilla Firefox, Mozilla Thunderbird, Android, Firefox OS e agora
o Flutter;
– É uma Engine gráfica, gráfica que é utilizada pelos próprios navegadores para serem
construídos.
• O Flutter é executado usando a máquina virtual (VM) Dart nos sistemas operacionais
Windows, Linux e macOS;
• O Dart VM usa uma compilação de código just-in-time (JIT) que fornece um recurso de
economia de tempo de desenvolvimento, como hot reloading;
– Também tem uma VM parecida com o que se vê no Java.
• Enquanto o desenvolvedor grava e depura o aplicativo móvel, a compilação JIT injeta
novo código no aplicativo em execução;
– Isso é muito impressionante, quando se vê isso funcionando. Ao se editar o código e
ir apertando o ctrl s, a tela vai atualizando, mantendo os valores das variáveis. Não
é que ele vá recarregar o aplicativo novamente e sim que mantém os valores das
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

variáveis ali, sempre que possível e carrega a tela. .


20m
• Ele fornece um recurso de atualização “a quente” com monitoração de estado, onde, na
maioria dos casos, as alterações no código-fonte podem ser refletidas imediatamente
no aplicativo em execução, sem exigir uma reinicialização ou qualquer perda de estado;
• Isso economiza muito tempo dos desenvolvedores no final;
• Quando se trata de lançar o aplicativo, o Dart VM usa a compilação antecipada (AOT),
que converteu ainda mais o código Dart em um código de máquina dependente da
plataforma nativa, possibilitando o alto desempenho do Flutter em dispositivos móveis;
– Há aqui uma compilação pesada para código nativo, não tem código intermediário,
e o código fica muito rápido.
• O Flutter foi projetado usando alguns princípios como “Tudo é um widget”, “Composição
> Herança”, “Árvore de widgets”;
• No Flutter, quase tudo é um widget e é o bloco de construção básico do aplicativo;
• Comparado a outros frameworks, o Flutter não possui controladores, visualizações
ou layouts separados. Quase todos os aspectos do desenvolvimento do Flutter são
cobertos por um bloco de construção unificado — o widget. Um widget pode ser um
botão exclusivo, elemento de estilo ou uma tela pop-up separada etc.
– Comparado a outros frameworks como MVC, MVVM, tudo no Flutter será um widget.
• A abordagem de composição é melhor do que a herança. Frequentemente, os
widgets são compostos de outros widgets menores e essa é a abordagem baseada
em composição;
• Usar uma API Flutter permite combinar vários widgets para obter o comportamento
exato de que se precisa;
• Um conceito de árvore de widget é basicamente uma implementação de widgets
aninhados que representam os componentes da interface do usuário;
• Esses widgets podem ser sem estado ou com estado e a diferença entre eles está de
acordo com o estado do widget. Um recurso útil que ajuda a gerenciar os estados dos
aplicativos;
– Os widgets no Flutter são divididos em duas categorias: Os widgets com estado que
são os mais complexos e os widgets sem estados que são os mais simples. Em geral
se dá preferência em trabalhar com os widgets sem estado por serem mais simples.
À medida que a aplicação fica complexa vai se adicionando widgets com estado.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O mais interessante sobre o Flutter são os componentes da interface do usuário que


foram entregues com as versões mais recentes;
• O Google seguiu seu próprio caminho e criou dois conjuntos de widgets, Cupertino
(iOS) e Material (Android);
• Esses conjuntos de widgets são responsáveis ​​pela interface do usuário (IU) e incluem
todos os componentes que você pode precisar para o desenvolvimento Android e iOS;
• Esses widgets não estão conectados com a API nativa do iOS ou Android como no React
Native, mas funcionam como componentes Flutter independentes com velocidade de
renderização e animação adequadas;
– Apesar de ele parecer ser um componente nativo, principalmente os do IOS, e os do
Material não é um componente nativo e sim desenhado pixel a pixel, não tendo uma
ligação direta com os componentes nativos.

INSTALAÇÃO

Esse é o passo a passo para uma criação de aplicação Flutter.


A primeira coisa é instalar o Flutter o US decar, o CLI dele.
Isso vai variar de acordo com o sistema operacional que esteja sendo utilizado.


ANOTAÇÕES

10 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Basicamente haverá um ambiente de linha de comando, que depois de instalado deve


ser feito flutter --version, que irá demonstrar a versão do Flutter que se está.

Vendo a versão, tem-se a certeza que ele está instalado corretamente.

CRIANDO O APP

• Aqui, por exemplo, entrou-se em uma pasta temp onde foi feito futter created myapp,
muito parecido com o que se é feito para a criação de outros framework.
ANOTAÇÕES

11 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Criando a aplicação, estando tudo pronto, entra no diretório e escreve $flutter rum.

EXECUTANDO O APP

• Quando se faz o comando $flutter rum, ele vai perceber o tipo de sistema operacional
que se está. Aqui, por exemplo, se está no sistema operacional que tinha o Android.
De maneira que vai utilizar o Android para renderizar a aplicação.
ANOTAÇÕES

12 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• De maneira que aparecerá a aplicação no Android. No caso em tela, estava rodando


no emulador Android. Nessa aplicação, quando se clica no botão +, vai aumentando o
número do contador.

Obs.: Aqui se vê como é a aplicação.


ANOTAÇÕES

13 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– Existem vários editores de código que se pode utilizar. Em geral, utilizam o VS Code
ou o IntelliJ.
25m
– Foi utilizado o IntelliJ para trabalhar com o Dart e o Flutter.
– Ao abrir a aplicação, a esquerda tem o diretório da aplicação, tendo diversos arquivos,
sendo que o arquivo principal é o main.dart. Além disso, há outros arquivos como
pub spec, arquivos de teste.

• O arquivo pub spec é o arquivo que tem os metadados de versão de dependências


semelhante ao que se teria no JavaScript package.json e se estivesse no mundo
Java teria opom.xml. Aqui ele vem falando sobre coisas referente ao ambiente em
environment, falando das dependências.
• Ele está no formato yaml que é um formato que vai determinar o alinhamento das
propriedades.
ANOTAÇÕES

14 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Percebe-se aqui que se tem dois projetos nativos: O projeto nativo de Android e o
projeto nativo de IOS, tendo uma característica muito parecida com o React Nature,
pois quando for compilar para essa plataforma ele vai utilizar a primeira configuração
para fazer uma compilação nativa.

import ‘package:flutter/material.dart’;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‘Flutter Demo’,
theme: ThemeData(
ANOTAÇÕES

15 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

primary Swatch: Colors.blue,


),
home: MyHomePage(title: ‘Flutter Demo Home Page’),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}): super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

void _incrementCounter() {
setState(() {
_counter++;
});
}

• Aqui tem-se um aplicativo em si. O método principal se chama Run App(MyApp());


tendo um MyApp que é um Stateless Widget, ou seja, um widget sem estado. Um
widget sem estado pode ser composto de outros widget com estado.
• O widget terá aqui neste exemplo o método build que vai receber um contexto de como
ele foi construído, context. Retornando à árvore de widget.
• No caso em tela, ele está retornando ao Material pp passando as propriedades title:
‘Flutter Demo’, theme: ThemeData(,primary Swatch: Colour.blue. e além disso, uma
tela inicial, My HomePage que vem definido logo a baixo que é um extends Stateful
Widget, então ele tem estado porque tem um contador que será incrementado.
• Curiosamente, todos os elementos que aqui começam são elementos privados, sendo
uma variável privada, não necessitando escrever o termo private.
ANOTAÇÕES

16 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Ele tem um título, e vai ter um estado. Como ele é um Stateful Widget ele tem um
estado create State() que vai criar uma instância deMy HomePage State() que terá
uma variável que é um contador, que é o estado, o intcounter = 0;. Uma função
chamada incremento Counter(). Quando for fazer uma atualização de estado ou de
alguma variável, tem que realizar dentro do setState, de forma parecida com o React,
incrementando o counter + +.

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
main Axis Alignment: MainAxisAlignment.center,
children: <Widget>[
Text(
‘You have pushed the button this many times:’,
),
Text(
‘$_counter’,
style: Theme.of(context).textTheme.headline4,
),
],
),
),

• Aqui foi feito ou build retornando à árvore de componente. O scaffold( é uma tela
padrão que tem uma barra em cima, que tem um determinado texto, Text (widget.title)
e depois no corpo da tela terá alinhado ao centro body: Center, terá uma coluna que
também estará alinhada ao centro, child: Column(, que também estará alinhado ao
centro, Main Axis Alignment.center.
ANOTAÇÕES

17 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Terá uma lista de widget filhos, children: <Widget>[, onde o primeiro é um texto,
Text(‘You have pushed the button this many times:’,), e o segundo também é um texto,
Text(‘$counter’, style: Theme.of(context).text Theme.headline 4,), ondem tem-se o
valor do contador, ‘$counter’, convertido para texto e em determinado esquema de
cores, vindo do tema style: Theme.of(context).text Theme.headline 4,).
• Repare que aqui há uma certa semelhança com o React, onde há uma árvore de
componentes definida programaticamente. Mas ao contrário do React onde se definia
um JSX, aqui está se definindo no código mesmo de componentes.

floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: ‘Increment’,
child: Icon(Icons.add),
),
);
}
}

Aqui tem floatingActionButton que é aquele botão de + que quando pressionado, on


Pressed:, ele chama o método _ incremental Counter. Posteriormente tem o ícone de add,
Icon(Icons.add).

DIRETO DO CONCURSO
1. (CCV-UFC/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO/DESENVOLVIMENTO
DE SISTEMAS/2019) Sobre o desenvolvimento de aplicações móveis, assinale a
alternativa correta.
a. O React.js é um framework de código aberto usado para desenvolver aplicativos para
Android, iOS e UWP.
b. Ionic é um SDK de software livre completo para desenvolvimento de aplicativos
móveis híbridos escrito em Java.
c. Flutter é um SDK de código aberto criado pelo Google para o desenvolvimento
de aplicativos para dispositivos móveis utilizado para desenvolver aplicativos para
Android e iOS.
30m
d. Swift é um framework de desenvolvimento de aplicativos móveis lançado como código
aberto com o nome de Apache Cordova.
e. O Vue Native é um framework para criar aplicativos móveis nativos cross-platform
usando a linguagem de programação Dart.

18 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Flutter
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
• O React.js é escrito em Javascript.
• O Ionic é uma linguagem e não um framework
• Quem usa Dart é o Flutter.

GABARITO
1. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

19 www.grancursosonline.com.br
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

REACT NATIVE

REACT NATIVE

O desenvolvimento de aplicativos mobile – para celulares e tablets – é muito expressivo


no ambiente de TI e para a área privada quanto para a área pública. O celular trouxe a digi-
talização, a possibilidade de digitalização da massa da população.
Por isso, o serviço público, para atender a massa da população, teve que se adaptar
também a esse novo meio, que é o desenvolvimento de aplicativos para a área móvel. Assim,
há uma série de aplicações de governo, relacionadas a inscrições em concursos, em sites
etc. Em especial, a área bancária, os bancos públicos também têm que estar presente nos
dispositivos móveis.
Existem várias maneiras que a empresa pode iniciar o desenvolvimento do dispositivo
móvel. Ela pode, inicialmente, baixar o kit de desenvolvimento de cada plataforma e desen-
volver o aplicativo – por exemplo, no iOS, o kit da Apple; no Android, o kit do Android (Google
SDK). Aí começa o problema, porque muitas pessoas possuem Android e muitas pessoas
possuem iPhone. Então, a empresa deve desenvolver aplicativos para essas duas platafor-
mas diferentes.
Ao desenvolver na plataforma nativa, ao baixar o SDK da empresa, é desenvolvido o apli-
cativo para aquela plataforma. Por exemplo, ao baixar o SDK da Apple, o software de desen-
volvimento da Apple, será desenvolvido para um dispositivo da Apple; ao baixar o SDK do
Android, será desenvolvido para um Android. O Windows Phone também estava no mercado,
mas, hoje, praticamente não há mais desenvolvimento para ele, que sumiu do mercado.
O problema se inicia porque as linguagens são diferentes. Uma utiliza o Java como lingua-
gem nativa porque a plataforma do Android usa a linguagem Java, e o iOS usa a linguagem
Objective-C. Além disso, a API é diferente, a forma de desenvolver é diferente. Por exemplo,
para desenvolver para Android, o SDK é multiplataforma, tem para Windows, para Linux e
para Mac, logo é possível desenvolver em qualquer computador. Já no caso da Apple, o SDK
somente funciona nos Macbooks, nos computadores da própria Apple.
5m
Cada plataforma possui seu jeito de desenvolver. Antes, se um banco quisesse desen-
volver um aplicativo que deveria rodar no Android e na plataforma da Apple, seria necessário
baixar os dois SDKs e ter duas equipes de desenvolvimento – uma para o Android e outra
para o dispositivo da Apple. À medida que os aplicativos foram evoluindo, o custo aumentou.
ANOTAÇÕES

www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Com o passar do tempo, outras empresas menores quiseram começar a desenvolver


aplicativos para Android e iOS e perceberam que o custo de desenvolvimento era muito alto.
Por isso, pensaram se não havia um jeito de desenvolver uma vez e conseguir colocar nas
duas plataformas, ou seja, ter uma base de código para as duas plataformas.
As plataformas nativas não oferecem uma solução para isso diretamente, então começa-
ram a surgir alguns frameworks e algumas bibliotecas para auxiliar no desenvolvimento mul-
tiplataforma, para desenvolver uma base de código que rode nas duas plataformas distintas.
Foram criadas plataformas, como Cordova e PhoneGap, que permitiam o desenvolvimento
com uma tecnologia mais simples – HTML, CSS e JavaScript –, como se estivesse sendo
feito um site que utilizava componentes parecidos com os componentes de celular.
Esse site era empacotado e colocado dentro de uma casca (Webview), que é um compo-
nente que existe na plataforma do Android e na plataforma iOS. Esse Webview era gerado e
rodava o site. Esses eram os aplicativos híbridos. Com o passar do tempo, perceberam que
essa solução resolveria o problema, mas não era perfeita, porque os componentes HTML,
CSS e JavaScript não dão a mesma sensação para o usuário e os aplicativos híbridos não
tinham o comportamento nativo da plataforma.
Empresas grandes também começaram a perceber esses problemas, sendo uma dessas
empresas o Facebook. Por isso, passou-se a usar a abstração do framework React para o
desenvolvimento mobile. Esse framework escreve o código em JavaScript, que é uma lingua-
gem que roda no Android e no iOS – devido ao componente JSCore.
10m
O código JavaScript é escrito, gera uma abstração do que seria a tela – por exemplo,
onde estará o componente de texto, de imagem, de input etc. – e, a depender da plataforma,
o próprio framework do React Native busca os componentes nativos da plataforma – botão,-
campo de texto, visualização etc.
Então, quando o usuário está interagindo com a aplicação, a interface não é uma inter-
face de HTML, mas nativa da aplicação. Ela não é igual no Android e no iOS porque utiliza
componentes específicos, mas a lógica que está girando a tela é uma lógica em JavaScript.
O framework React Native permite que seja escrita uma base de código em JavaScript,
mas sem HTML e WebView, que, ao ser rodada, gera uma interface que será buscada com
os componentes nativos da plataforma.

Obs.: “React” vem do framework React que era utilizado na biblioteca, e o “Native” vem de
reforçar que os componentes sendo exibidos são nativos da plataforma.
ANOTAÇÕES

www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O React Native permite criar aplicativos nativos para Android e iOS utilizando o React. Na
imagem acima, há a mesma tela nos dois dispositivos Android e iOS.
É necessário um dispositivo Mac para ser feita a compilação final do aplicativo. Não é
o mesmo aplicativo que irá rodar nas duas plataformas. Há a mesma base de código, para
a qual é gerada uma compilação para os sistemas. Dessa forma, em vez de, por exemplo,
vários desenvolvedores para cada plataforma, será necessário um computador de cada.
15m
ANOTAÇÕES

www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: caso seja necessário algum recurso específico para uma plataforma, é possível adi-
cionar um “if” no código.

Ao desenvolver para Android e para iOS, é utilizada uma linguagem específica da plata-
forma – Java para Android e Objective-C para iOS. As empresas tinham uma base desenvol-
vedora que estava acostumada com o JavaScript, então, com o React Native, a maior parte
do código é escrita em JavaScript, que é uma linguagem popular e mais fácil de aprender.
O React Nativa irá combinar, então, o melhor que há, tanto no desenvolvimento nativo
do celular com a biblioteca React – biblioteca de desenvolvimento de interfaces gráficas que
pode ser utilizada para desenvolver Android e até aplicativo do Windows – e em JavaScript.
É possível utilizar o React Native, atualmente, em projetos de Android ou iOS existentes, ou
criar um aplicativo totalmente novo, que geralmente é o que acontece.
ANOTAÇÕES

www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• É um JavaScript mais moderno.


• São feitos os imports das bibliotecas “react” e do “react-native”.
• São importados componentes como “Header”, “Heading” e “Typography”, que são
componentes core.
• É criada uma tela, “WelcomeScreen”.
• Não se trata de HTML. É utilizado um sistema parecido com HTML, com XML, para
descrever as telas. É uma linguagem popular e não estranha ao desenvolvedor.
• Há um header que possui um título, há um estilo, outros textos etc.
20m

O desenvolvedor estará em um ambiente conhecido. Os componentes do React vão ser


renderizados para interface do usuário na plataforma nativa.

• No Android, será escolhido um elemento nativo que funcione com o “View”, com o
“Header”, com o “Text”. É a plataforma React Native que escolhe o componente ade-
quado da plataforma nativa.

O aplicativo irá usar as mesmas APIs da plataforma nativa que outros aplicativos usam.
Em certo momento, é necessário abrir a câmera, por exemplo, analisar o giroscópio, comu-
nicar por bluetooth, abrir o sistema de arquivos etc. A aplicação web roda dentro de um san-
dbox muito protegido por questões de segurança. No React Native, isso é um pouco dife-
rente. O React Native, além de fornecer os componentes visuais da plataforma, irá oferecer
também uma série de componentes para acessar a plataforma nativa.
O React Native fornece APIs em JavaScript, então, via JavaScript, é feita uma chamada que
faz a abertura da câmera, que toca um som, que lê o sistema de arquivos etc. Ele é um aplicativo
JavaScript, mas não tem as limitações tradicionais do navegador, ele consegue acionar as APIs
nativas do sistema operacional. Eventualmente, a maioria das APIs são comuns nas duas plata-
formas. Por exemplo, tanto o Android quanto o iOS têm características de geolocalização.

Obs.: eventualmente, seria possível utilizar o React Native até se surgissem outras plata-
formas – por exemplo, se o Windows Phone voltasse a funcionar.

Também é possível criar versões específicas dos componentes para uma plataforma,
com uma única base de código, e compartilhar vários códigos entre as plataformas.
ANOTAÇÕES

www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Na imagem acima, há uma aplicação, um arquivo JavaScript.


25m
• É possível criar um componente chamado “Header.ios.js”, que irá renderizar especifi-
camente o iOS, ou o componente “Header.android.js”. No momento da compilação, a
depender da plataforma, um dos componentes é escolhido.
• Outros elementos podem ser comuns, como o “Body.js”.
• Existe também uma característica de alinhamento dos componentes. É possível uti-
lizar componentes core, que são os principais da plataforma, como texto e imagens,
mas também é possível criar componentes, ou seja, criar um próprio “Header”, um
próprio “Body” etc.
ANOTAÇÕES

www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
React Native
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O “App.js” é composto por um cabeçalho, que fica na parte de cima. O App é dividido
em um Header, que está dividido em uma imagem e uma parte de texto, e em um Body
(corpo), que possui vários blocos de textos. É comum, em aplicativos HTML, haver essa
estrutura de alinhamento.

APP

I H T

O React Native, então, permite que sejam criados aplicativos verdadeiramente nativos e
não seja comprometida a experiência do usuário. Ele é bom para o usuário – porque os apli-
cativos híbridos geravam problemas para os usuários – e para o desenvolvedor, que pode
desenvolver mais rápido.
Ele possui uma série de componentes, como componentes agnósticos – view, text e
image – que existem nas duas plataformas, e consegue pegar componentes nativos de
cada plataforma. Ele é um “ganha-ganha”, ou seja, o usuário e a equipe de desenvolvimento
ganham. Por isso, é extremamente popular o desenvolvimento em React Native.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

REACT NATIVE II

O React Native permite uma plataforma cruzada, ou seja, o desenvolvedor desenvolve


uma vez e a aplicação roda nas duas plataformas da forma mais perfeita, com a transição
mais suave possível. Os componentes do React envolvem o código nativo existente e per-
mite que haja interação com as APIs por meio de um paradigma do React e do JavaScript,
um paradigma declarativo.
O React foi lançado pelo Facebook em 2015 e é mantido pelo Facebook. Em 2018, ele
era o segundo maior repositório em número de colaboradores do Github, porque é um pro-
jeto open source. Atualmente, o React é apoiado por contribuições de muitas empresas e
indivíduos, como o Airbnb. A comunidade do React Native está sempre criando projetos inte-
ressantes, explorando a plataforma e expandindo-a em relação ao Android e ao iOS, e até
mesmo ao Windows.

EXPO

www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O React Native possui uma plataforma chamada Expo, desenvolvida por outra empresa,
com o endereço “snack.expo.dev”. Essa plataforma permite a criação de uma interface web
diretamente no browser, com trechos de códigos que serão renderizados como uma aplica-
ção. É possível renderizar aplicativos iOS, Android ou Web.
5m
Também é possível instalar o aplicativo Expo no celular. Clicando em “My Device”, apa-
rece um QR Code que, ao ser lido, a aplicação irá rodar no dispositivo celular. O Expo pode
ser utilizado também para desenvolver aplicações no computador que irão rodar no celular.
Utilizar o Expo é diferente. O código React Native é a mesma coisa, mas é possível pedir
para a plataforma, que é uma plataforma Cloud, para compilar o aplicativo. Geralmente, o
Expo é utilizado para aplicativos simples ou aplicativos básicos, no caso de aprendizado.

COMPONENTES DE FUNÇÃO E COMPONENTES DE CLASSE

No React Native, há duas formas de declarar componentes. Quando o React surgiu, só


havia uma forma de declarar, que eram componentes através de classes. Então, era criada
uma classe parecida com a classe do Java e essa classe declarava um componente. Com
o passar do tempo, foi criada uma outra alternativa, que agora é a alternativa mais popular,
que é declarar componentes de React através de funções, uma programação mais funcional
e menos orientada à classe.
No React, é possível criar com as duas formas, no entanto, a forma de função é a forma
mais utilizada, mais recomendada. Em aplicações mais antigas ou em manutenções de apli-
cações React Native, serão encontrados componentes de classe; em aplicações mais novas,
serão encontrados componentes de função.
10m
Originalmente, os componentes de classe eram os únicos componentes que podiam ter
estado (uma variável que pode mudar, um valor). Somente era possível criar componentes
de função para componentes bastante simples. Foi criada, então, uma API de Roux que per-
mitiu que houvesse estado também nos componentes de função e os componentes de classe
ficaram sem propósito.
ANOTAÇÕES

www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• No de função, há um “const”; no de classe, há um “class”.


• “HelloWorldApp” é o componente.
• A anotação “= () =>” é uma anotação de função, o que significa que o bloco posterior
é uma função.
• O bloco após “class” é uma classe.
• No de função, a função possui um “return” que retorna o corpo do componente.
• No de classe, há uma classe que possui vários métodos, mas, nesse caso, ela possui
um método chamado “render”, que dá um “return” no componente.
• No final, ambos dão “export”.
• A sintaxe da esquerda, de função, possui menos linhas.

Obs.: na maior parte do curso, serão utilizados os componentes de função porque essa é
a forma mais atual e as questões das bancas cobrarão os componentes de função.
ANOTAÇÕES

www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

VIEWS E DESENVOLVIMENTO MÓVEL

O React Native é um framework livre para construir aplicativos Android e iOS, usando o
React e recursos nativos das plataformas. Com o React, utilizando os APIs da plataforma,
deve ser descrita a aparência e o comportamento da interface utilizando o React.
15m
Será gerado um “bundle”, um arquivo.JS grande, que vai embutir em uma casca e gerar
um app nativo de cada plataforma. O arquivo não irá executar um arquivo.JS e o iOS também,
mas o arquivo “bundle” será empacotado e colocado dentro de uma casca que é nativa.

Existem componentes nativos das plataformas. Por exemplo, no Android, há componen-


tes como “ViewGroup”, “ImageView” e “TextView. Já no iOS, há componentes como “UII-
mageView”, “UITextView” e “UIView”. Existe certa simetria entre esses componentes, mas
existem componentes que não são simétricos, ou seja, não existe uma equivalência na outra
plataforma. No final, contudo, há um resultado parecido.
Por exemplo, ao pegar o componente “Pouncival”, uma linha da tabela que é composta
de uma imagem e de um texto, no Android haverá um “TextView” e um “ImageView” dentro de
um “ViewGroup”; no iOS, haverá um “UIImageView” e “UITextView” dentro de um “UIView”.
Do lado direito está o iOS e do lado esquerdo está o Android. Ao final, a usabilidade do usu-
ário não está prejudicada.
ANOTAÇÕES

www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No desenvolvimento do Android, a “View” é um bloco de construção básica da interface,


um pequeno elemento, geralmente retangular, na tela, que pode ser usado para exibir texto,
imagem ou responder a alguma entrada do usuário. Mesmo os menores elementos visuais
de aplicativos, como linhas, textos e botões, são exemplos de visualizações. Alguns tipos de
visualizações podem conter outras visualizações, ocorrendo um alinhamento.

COMPONENTES NATIVOS

No desenvolvimento Android, a “View” será escrita utilizando a linguagem Kotlin ou Java


e, no desenvolvimento iOS, utilizando o Swift ou Objective-C. Com o React Native, serão
invocadas essas visualizações com o JavaScript, usando componentes React. Em tempo de
execução, o React Native cria a tela, a visualização do Android e do iOS com os elementos
correspondentes do componente.
20m
Por exemplo, em relação ao componente “View”, que pode ser “ViewGroup” ou “UIView”,
o React Native irá selecionar o componente específico da plataforma em tempo real.

www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A imagem acima apresenta uma das primeiras aplicações desenvolvidas pelo Face-
book. Trata-se de um aplicativo de campanhas. Como os componentes do React Native são
apoiados pelas mesmas visualizações do Android e iOS, ele possui a aparência, sensação e
desempenho de qualquer outro aplicativo.
Quando o usuário leigo olha para o aplicativo, ele não consegue distinguir visualmente
que esse aplicativo foi feito em React Native – o que não acontecia com aplicativos em
HTML. Nesse caso, é possível visualizar o botão do iOS e os elementos visuais do iOS. O
React Native possui um conjunto de componentes nativos e prontos para uso.

A imagem acima é a mesma tela da imagem anterior, mas não é pixel perfect, ou seja,
não é exatamente a mesma visualização. Os usuários de Android gostam do floating action
button, por exemplo, mas isso não existe no iOS. No mais, o conteúdo é o mesmo.
ANOTAÇÕES

www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O React Native também permite criar os próprios componentes nativos para Android e
iOS para atender necessidades exclusivas do aplicativo. Por exemplo, um componente nativo
para a plataforma do iOS que terá um comportamento peculiar. Em geral, são utilizados os
componentes fornecidos pela própria plataforma do React, mas também é comum que os
desenvolvedores baixem uma biblioteca de componentes complementares com um visual
mais agradável.

COMPONENTES CORE

COMPONENTE
ANDROID IOS WEB DESCRIÇÃO
REACT NATIVE
Um contêiner que oferece suporte
a layout com flexbox, estilo, algum
<View> <ViewGroup> <UIView> <div>
controle de toque e controles de
acessibilidade
Exibe, estiliza e aninha sequên-
<UIText-
<Text> <TextView> <p> cias de texto e até lida com even-
View>
tos de toque
<UIImage-
<Image> <ImageView> <img> Exibe diferentes tipos de imagens
View>
Um contêiner de rolagem gené-
<UIScroll-
<ScrollView> <ScrollView> <div> rico que pode conter vários com-
View>
25m ponentes e visualizações
<input
<UITex-
<TextInput> <EditText> type=”- Permite ao usuário inserir texto
tField>
text”>

A interface, portanto, é construída e declarada com os componentes mais genéricos, cha-


mados de componentes core. Na plataforma nativa, esses componentes se tornarão compo-
nentes nativos.
Quando uma aplicação React Native é exibida no celular, não se trata de uma interface
HTML, mas interface nativa com componentes nativos. O React Native possui vários compo-
nentes core, desde o controle de formulário, indicador de atividade etc.
ANOTAÇÕES

www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Dentro do “ScrollView”, há o componente “Text”;


• Há uma “View”, um “Text” e “Image”, há um estilo para a imagem, “style”.
• Há um campo de “TextInput”, para o qual há uma estilização;
• Há um valor default, “defaultValue”, que será traduzido de acordo com a plataforma.
ANOTAÇÕES

www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
React Native - II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O código se tornou a imagem acima, com “um texto”, “outro texto”, a imagem de um gato
e um campo para digitação. É utilizada toda uma estratégia de componentes. O ponto princi-
pal do React Native é como serão declarados os componentes. A maior parte do tempo será
utilizada para escrever comportamentos e variáveis. O código está formando um compo-
nente App, que possui uma série de alinhamentos, como blocos (componentes).

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

REACT NATIVE III

RELEMBRANDO
Na última aula, foi tratada a tradução que ocorre entre os componentes core, que são com-
ponentes agnósticos de plataforma – como “text”, “image” e “view” –, e os componentes
nativos da plataforma.

COMPONENTES

• Há os componentes do React, a comunidade pode desenvolver componentes, há os


componentes core e os componentes nativos. Ou seja, a plataforma React Native
apresenta uma série de possibilidades.
• Primeiro são os componentes padrões da plataforma; depois, ao construir a aplicação,
são criados componentes estruturados nos do React Native; além disso, há compo-
nentes da comunidade, como bibliotecas.
• A aplicação, portanto, será uma composição de todos esses componentes.
ANOTAÇÕES

www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

FUNDAMENTOS DO REACT

O React Native se baseia no React, que é uma biblioteca de código aberto, popular para
a construção de interface usando o JavaScript.

• Componentes – componente clássico e componente de função;


• JSX – trecho semelhante a um XML;
• Props;
• State.
5m

Obs.: já foram cobradas questões de JSX, de Props e de State, além de questões de con-
ceito geral.

PRIMEIRO COMPONENTE – FUNÇÃO

O primeiro passo é fazer os imports dos componentes core do React e do React Native.

É importante sempre fazer o “import React”. São importados os componentes do “react-na-


tive”, como “Text”, que é um componente core. É criado um componente chamado “Mensagem”
que será composto do texto “Estude no Gran Cursos!”. O código após o símbolo de igual, “=”, é
uma função. Essa sintaxe é chamada de função anônima – abre e fecha parênteses e seta, o
que significa que a função não recebe nenhum parâmetro e possui o conteúdo a seguir.
O JavaScript possuía uma anotação de função que antes era “function soma (x,y) return
x+y”. A palavra “function” foi substituída. Por exemplo, “const soma (x,y) =>”, então, a palavra
“function” foi substituída pela seta.
ANOTAÇÕES

www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tudo que um componente de função retorna é processado como elemento do React.


Então, ele vai executar essa função, o corpo da função, e vai retornar o “Text”. Os elementos
do React permitem que seja descrito o que o desenvolvedor quer ver na tela. Nesse caso, o
componente de mensagem irá renderizar um elemento do tipo “Text”.
No final, o componente será exportado. No JavaScript, cada arquivo é um módulo, e é
possível ter vários componentes dentro do mesmo arquivo, sendo possível definir o que o
desenvolvedor quer exportar do módulo e o que não quer. Um outro arquivo pode importar
esse trecho do componente “Mensagem” e utilizar o componente de “Mensagem”.
10m
O código não é JavaScript, mas um código chamado JSX, que é uma facilidade sintática
para definir os componentes. Ele irá traduzir, depois, em um comando do React e irá gerar o
componente. Quando o código for processado, ele irá gerar um componente texto, “Estude
no Gran Cursos”.

PRIMEIRO COMPONENTE – CLASSE

Os componentes de classe tendem a ser um pouco mais verbosos do que os compo-


nentes de função, ou seja, tendem a ter mais linhas de código, mas, no final, eles possuem
o mesmo poder semântico.
É necessário importar, além do “react”, o “Component”. Será criada uma classe chamada
“Mensagem” que estende “Component”. Os componentes da classe devem ter uma função
chamada “render”, que irá renderizar o componente. Também é possível exportar ao final.
Há diferenças sutis que serão um pouco mais evidentes em caso de componentes maio-
res, componentes mais complexos. No final, o resultado é exatamente igual, “Estude no
Gran Cursos!”.
ANOTAÇÕES

www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

JSX

Também é utilizada uma sintaxe que parece um HTML e XML que é chamada de JSX.
O React e React Native usam o JSX porque é uma sintaxe que permite escrever elementos
dentro do JavaScript utilizando tags. O JSX será traduzido para JavaScript, então, é possível
utilizá-lo como se fosse JavaScript comum.

Por exemplo, é possível colocar variáveis – como “nome = Gran Cursos” e “Estude no
{nome}”, mas é necessário utilizar uma sintaxe especial, que é a sintaxe de chaves.

Como esse código é um código JavaScript, qualquer expressão JavaScript irá funcio-
nar dentro das chaves, incluindo uma chamada de função. Por exemplo, a função chamada
“pegaNome” que recebe dois argumentos “priNome” e “segNome”. Ela é uma função que
retorna “priNome” mais espaço em branco mais “segNome”. Ao renderizar, há “Estude no
ANOTAÇÕES

www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Gran Cursos!”. Então, se a chave for aberta no meio do JSX, é possível chamar uma função
após defini-la dentro do módulo. O valor da função será renderizado no meio das duas chaves.
15m

COMPONENTES PERSONALIZADOS

Os componentes personalização/customizados são uma composição. O React permite


alinhar os componentes core, ou seja, colocar um componente dentro do outro. Esses com-
ponentes alinháveis e reutilizáveis estão no cerne da forma como se programa. Por exemplo,
é possível alinhar o “Text” e o “TextInput” dentro de uma “View”, e o React Native irá renderi-
zar esses componentes juntos.

Por exemplo, “Mensagem” é uma “View”, e essa “View” é composta de um “Text” e um


“TextInput”, que é um componente de digitação de texto, em que o usuário poderá clicar e
digitar um texto.
ANOTAÇÕES

www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Além disso, é possível criar também composições dos componentes próprios, ou seja,
criar pedaços e repeti-los. É criado um componente “Aluno” e essa função é um componente
porque retorna um elemento interno, um trecho de JSX. Além de utilizar os componentes
core do React Native, é possível criar elementos que são composições e utilizá-los como se
fossem elementos core.
Por exemplo, o elemento “Escola” possui uma “View” que possui um componente de
texto e três componentes “Aluno”. O componente “Aluno” é uma “View”. Quando isso for ren-
derizado, irá aparecer “Bem-vindo! Eu sou um aluno! Eu sou um aluno! Eu sou um aluno!”.
Cada um desses componentes foi renderizado. Esse componente “Aluno” pode ser renderi-
zado várias vezes em vários lugares sem repetir o código.
O componente em que é colocado outro componente é chamado de “componente-pai”.
O “View” é o componente-pai e o “Escola” é o componente-pai dos outros elementos, sendo
que o “Aluno” é um componente-filho. Cada “Aluno” renderiza um elemento único que pode
ser personalizado.
ANOTAÇÕES

www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROPS

É possível passar parâmetros para os componentes-filhos que são chamados “Props”.


Os props permitem que componentes do React sejam personalizados. Por exemplo, cada
aluno pode ter um nome diferente.
20m

O “Aluno” recebe “props”. A entrada é criada automaticamente pelo React. Há “props.nome” e


vários “nomes” – um chama-se “Paulo”, o outro “Ana” e o outro “Maria”. Cada vez que é feita uma
renderização do componente “Aluno”, o nome é alterado, e cada um receber um “props” diferente.

www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
React Native - III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os próprios componentes do React aceitam uma série de props e possuem suas props.
Por exemplo, a “Image” possui um “Source”, em que é passada uma propriedade, e há um
“style” com a largura e altura da imagem. Essa é uma Prop passada para o componente
“Image”. A maioria dos componentes core e do React Native podem ser personalizados.
“Image” possui muitas propriedades diferentes, incluindo esse “style” que aceita um objeto
JavaScript de pares de valores, propriedades relacionadas.
No JSX, os valores de JavaScript são passados com chaves. No código anterior, os
valores foram passados sem chaves. Ao passar com chaves, fica claro que o componente é
uma variável, uma característica. Os objetos do próprio JavaScript precisam da anotação de
chaves. Então, passa-se, como parâmetro, para a imagem, um objeto JavaScript que possui
algumas propriedades a mais.
Por exemplo, esse estilo possui largura e altura. A primeira chave indica que será passado
um valor do JavaScript, e a segunda indica que o componente é um objeto literal de JavaS-
cript. Portanto, ao passar um objeto do JavaScript em JSX, são envolvidas duas chaves – a
primeira que indica que é um valor e a segunda que indica que é um objeto.
Esses props são elementos estáticos, ou seja, a propriedade não muda. Os props são
características passadas do componente-pai para o componente-filho, mas, se no compo-
nente-filho tiver algo que irá alterar, como um contador de cliques, não se utiliza o Prop, mas
o último elemento do JavaScript, do JSX, que é o State.
25m

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

REACT NATIVE - IV

RELEMBRANDO
As props constituem passagens de parâmetro de um componente pai para um componente
filho. Possuem característica de imutabilidade. Para que um componente pai sofra altera-
ção, o mesmo terá de ocorrer com o componente filho. Nesse caso, o componente pai será
renderizado com a propriedade nova. É preciso lembrar que alterações não são possíveis
no componente filho.

ESTADO – STATE/COMPONENTES DE FUNÇÃO

Props e componentes de função e de classe funcionam de forma semelhante. O state,


por seu turno, possui diferenças. As props, via de regra, funcionam como os argumentos utili-
zados na configuração da renderização dos componentes; o state, como o armazenamento e
controle dos dados internos dos componentes. O state é útil para lidar com dados que muda-
rão com o tempo ou que têm origem em alguma interação do usuário, tais como digitação ou
clique. Podemos adicionar o state a um componente do React utilizando um hook chamado
de useState. O hook devolverá uma lista com duas propriedades: a primeira é uma variável
(valor) e a segunda, uma função de alteração.
Para melhor entendimento, segue-se um exemplo.

www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O componente Aluno recebe um props e um state. Em Escola, há dois componentes,


Aluno Ana e Aluno Paulo, definidos na função, e que entram no props. Dentro do componente
const Aluno há dois states,isEstudando e setIsEstudando, utilizados na alteração. Através da
5m
desestruturação do JavaScript, os parâmetros são guardados na variável.
Na renderização da view, tem-se Eu sou (props.name) e quando o botão for clicado apa-
recerá setIsEstudando (false). O botão estará desabilitado caso Estudando não esteja em
uso, pois disabled={!isEstudando}. Na primeira vez em que o componente é renderizado,
surgirá “Descansar”, ou seja, surgirá um bloqueio caso alguém esteja estudando. Contraria-
mente, surgirá “Estudar”, conforme se pode observar:
ANOTAÇÕES

www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ESTADO – STATE/COMPONENTES DE CLASSE

Observe-se o próximo exemplo:

Aqui, class Aluno está definido como componente de classe. Dentro dele, define-se uma
variável state: state = { isEstudando: true }
10m
ANOTAÇÕES

www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Inseriu-se render ( ) {e return (, que fará retornar o conteúdo do componente. Com a


inserção de {this.props.name}, surge o comando {this.state.IsEstudando. A depender da situ-
ação, aparecerá “Estudando” ou “Descansando”.
Nesse caso, para realizar alteração, será utilizado o método setState. Ao clique do botão,
isEstudando passará ter o valor false. Note-se a obrigatoriedade da criação da variável state,
bem como a inserção de todas as propriedades desse componente dentro dela. Ainda, só é
possível a atualização do state ao utilizar-se a função setState, que altera e avisa ao React
que é necessário realizar uma nova renderização. Da mesma forma, o botão estará desabi-
litado somente se o state estiver falso. Se o título “IsEstudando” não for verdadeiro, surgirá
“Descansar”; caso contrário, aparecerá “Estudar”. É importante notar a presença de dois
componentes de classe. Ao clique do primeiro botão Estudar, ele ficará desabilitado.

ATENÇÃO
Como a introdução dos hooks no React é algo recente, é provável que as questões de con-
cursos explorem mais essa funcionalidade do que as precedentes. Não se deve, contudo,
desconsiderar a cobrança, por parte de algumas bancas, das funcionalidades mais antigas.

ENTRADA DE TEXTO

À guisa de melhor ilustração, segue-se o exemplo abaixo.

www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É bastante comum em aplicativos a digitação de informação por parte do usuário. Para


essa finalidade, o principal componente utilizado é o TextInput, que e possui uma prop,
onChangeText, utilizada para mudança de texto. Essa prop receberá uma função, {text =>
setText(text)}.
Como exemplo de aplicação disso, é preciso considerar que se há um texto, um valor
interno nesse componente, é necessário que ele possua um estado, aqui chamado de useS-
tate, que começa com um valor vazio, uma vez que o usuário ainda não digitou nenhuma
informação. Observe-se o que foi criado: uma view que possui um padding de 10; um com-
ponente chamado de TextInput, que possui um style, que é uma altura de 40, e um texto de
placeholder, surgido antes que o usuário digite qualquer valor, e que no presente exemplo é
“Digite aqui para traduzir!”.
Há ainda um outro campo, através do qual será feita um split, uma divisão, por cada
caractere de espaço no texto que for digitado pelo usuário, transformando, por tanto, uma
spring em uma array. O campo fará também um mapeamento de cada um desses elemen-
tos da array, e, caso o elemento não esteja nulo, surgirá um emoji de pizza, e será feita uma
junção, join, com os espaços.
20m

ATENÇÃO
Por não ocorrerem no React comandos de forma imperativa, é preciso que a alteração do
state seja feita em momentos específicos, utilizando-se funções específicas. Não se pode,
por exemplo, tomar a variável text e simplesmente reatribuir seu valor. Se tal ação for efe-
tuada, o React não realizará a renderização almejada. Como solução, é preciso utilizar a
função setText.

SCROLLVIEW

O ScrollView é um container de rolagem. Se, no aparelho celular, almeja-se habilitar a


função de rolagem, deve-se colocar os componentes adequados ao caso dentro do Scroll-
view. Os itens roláveis são heterogêneos e a rolagem pode ser vertical ou horizontal. É pos-
sível ainda, com esse tipo de container, determinar o índice de pinch.
25m
Seguem-se as imagens abaixo para exemplificação do exposto:
ANOTAÇÕES

www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES

www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Todos os elementos e visualizações do ScrollView são renderizados, mesmo que não


estejam exibidos em tela.

LISTAS

Esse recurso permite exibir uma lista de rolagem de vários elementos, graças ao com-
ponente core FlatList. Diferentemente do ScrollView, ele apresenta melhor funcionalidade
quando se tem uma lista longa de dados, em que o número de itens pode mudar com o
tempo. Contrariamente ao ScrollView, que é mais genérico, o FlatList renderiza os elemen-
tos que estão sendo exibidos na tela, e não todos de uma vez, a exemplo do que mostra a
imagem abaixo:

O FlatList requer duas props: data – onde se encontra a informação da lista – e renderI-
tem, que toma um item dessa fonte e retorna o componente formatado para renderizar, con-
forme se pode perceber na imagem abaixo:
ANOTAÇÕES

www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Para que ocorra a renderização dinâmica, é necessário tomar item e deixá-lo como item.
key, conforme apresenta a seguinte imagem:
30m
ANOTAÇÕES

www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

MÓDULO DE PLATAFORMA

Quando da construção de aplicativos para várias plataformas, é possível a reutilização do


maior número possível de códigos. Entretanto, a depender do cenário, podem se fazer neces-
sários novos códigos. O React Native possui duas formas de se organizar o código específico
de uma plataforma. Uma delas se dá na utilização do módulo Platform e a outra, através das
extensões de arquivos específicos. Certos componentes podem ter propriedades que funcio-
nem em apenas uma das plataformas. Nesse caso, as props serão anotadas com @platform.
Com o módulo de plataforma, é possível criar um if para cada sistema operacional. Em
geral, utiliza-se o Platform quando existem pequenas alterações. No exemplo abaixo, tais
mudanças se relacionam a versões do Android e do IOS.
ANOTAÇÕES

www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
React Native - IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

EXTENSÕES ESPECÍFICAS DA PLATAFORMA

Nesse caso, é criado um componente e ao dele, conforme o caso, o nome ios ou android:

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

IONIC

DESENVOLVIMENTO DE APLICATIVOS MÓVEIS — IONIC

Introdução
Ao fazer um aplicativo, existem várias maneiras de fazer a aplicação. A maneira mais
básica é baixar um SDK no fabricante, como o Google ou Apple. No caso do IOS, deve ter o
MAC e no caso do Android, deve-se baixar o Android Studio.
Para a Apple, a programação será em linguagem Swift ou Objective C e para o Google
será em Java ou Kotlin. O problema que surge é que o app será específico de uma determi-
nada plataforma, por isso, se o objetivo for ter o aplicativo em duas plataformas, deverá ser
desenvolvido de formas diferentes.
Com essa problemática, foram buscadas soluções, como um website, que seria mais res-
trito. Alguns desenvolvedores analisaram o chamado o “Web view”, que é uma visão da web,
em que se pode colocar trecho HTML. Usando isso, sugeriu-se usar uma casca para Android
e IOS, em que a mesma lógica usada para um serviria para outro, com uma base de código
única que pode ser compilada para Android ou IOS, surgindo o termo “aplicação híbrida”. .
5m
Dessa forma, o Ionic foi um dos primeiros a apresentar um pacote completo para fazer isso,
em que pode usar um desenvolvedor Web que poderá rodar na plataforma Android ou IOS.

Uma base de código - Qualquer plataforma



Poderá rodar em Android ou IOS com aplicação tanto web quanto desktop, em que o alvo
principal será o desenvolvimento mobile.
• Em Vue/Angular/React;
Atualmente, pode-se usar Vue, Angular ou React para desenvolver uma aplicação em Ionic.

Um kit de ferramentas de UI móvel de código aberto para a construção de experiências



de aplicativos da web e nativas de plataforma cruzada de alta qualidade;
As plataformas são cruzadas. Para que a plataforma desse certo, o usuário não poderia
ver de imediato que acessa uma página de HTML, por isso foi criado um kit que se asseme-
lha aos ambientes nativos.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Mova-se mais rápido com uma única base de código, executando em qualquer lugar
com JavaScript e na web;

Para achar um desenvolvedor que use Objective C ou Swift é mais caro e complexo,
diferentemente dos desenvolvedores de Javascript web em HTML, é mais popular desenvol-
vendo soluções mais rápidas e com valores mais baixos.
Exemplo de aplicação Ionic:
Essa aplicação, apesar de parecer nativa, usa Ionic. Por isso, a aplicação híbrida, que
possui HTML, CSS e Javascript. Quando o usuário usa essa aplicação, não percebe que não
é aplicação nativa, posto que não parece um site. .
10m

Visão Geral
• Ionic Framework é um kit de ferramentas de UI de código aberto para a construção
de aplicativos móveis e de desktop de alta qualidade usando tecnologias da web —
HTML, CSS e JavaScript — com integrações para estruturas populares como Angular,
React e Vue;
É possível fazer sem frame nenhum, apesar de ter maior trabalho.
• Se concentra na interface do usuário UX e na interação de interface de um aplicativo -
controles de interface do usuário, interações, gestos, animações;
Um aplicativo nativo possui comportamentos diferentes de uma aplicação web, nas formas
de interação, gestos e animações. Ex.: o padrão de interação na web, com o uso de mouse,
não é idêntico às ações do celular, que usa o toque. Por isso, o Ionic traz uma camada de
abstração para permitir que se use os componentes e tenha um comportamento parecido.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Como alternativa, ele pode ser usado autônomo sem qualquer framework de front-end

usando um script simples;
• Foco no desempenho: O Ionic foi desenvolvido para funcionar e se comportar de
maneira excelente nos dispositivos móveis mais recentes com práticas recomendadas,
como transições aceleradas de hardware eficientes e gestos otimizados para toque;
Quando surgiu a estratégia dos aplicativos híbridos, com casca nativa e miolo HTML,
CSS e Javascript, houve problemas com a performance, que era mais lenta em relação às
aplicações nativas. Com o passar do tempo, essa diferença sumiu, porque os smartphones
foram evoluindo e tendo maior capacidade.

• Design limpo, simples e funcional: o Ionic foi projetado para funcionar e exibir lin-
damente em todos os dispositivos e plataformas móveis atuais. Com componentes
prontos, tipografia e um lindo (mas extensível) tema básico que se adapta a cada pla-
taforma, você construirá com estilo;
– O Ionic possui um tema básico de aplicação e, geralmente, as empresas grandes
desejam visuais com customizações profundas no visual. Para empresas mais sim-
ples, os tipos de frame possuem componentes prontos e estilizados já prontos, dei-
xando o desenvolvimento mais barato. .
15m

• Nativo e otimizado para a Web: O Ionic emula as diretrizes da UI do aplicativo nativo


e usa SDKs nativos, trazendo os padrões da UI e os recursos do dispositivo dos apli-
cativos nativos junto com todo o poder e flexibilidade da web. Ionic usa Capacitor (ou
Cordova) para implantar nativamente, ou é executado no navegador como um Pro-
gressive Web App;
– Ao desenvolver uma aplicação Ionic, pode-se ter vários targets diferentes, como
PWA, Android, IOS ou Web. O Codebase, que é HTML, CSS e Javascript, que pos-
suirá uma casca envolta que é um capacitor, ideia que aborda que se um Webview
rodar terá as mesmas restrições a partir de um Web Browser tradicional, sem, por
exemplo, um giroscópio de celular.
– Com isso, o capacitor surgiu, para fornecer uma camada de integração e API para que
acione a partir do Java Script as funcionalidades nativas de hardware do dispositivo.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Aplicação em Ionic:

Capacitor
• Capacitor é um projeto de código aberto que executa aplicativos da Web modernos
nativamente no iOS, Android, Electron e Web (usando tecnologia Progressive Web
App) enquanto fornece uma interface poderosa e fácil de usar para acessar SDKs nati-
vos e APIs nativos em cada plataforma;
– Electron é outra estratégia que possui semelhança com Ionic. Electron é desenvol-
ver uma aplicação de Desktop que foi desenvolvida em HTML, CSS e Javascript.
A camada de abstração é fornecida para mudar o menor possível quando for em outra
plataforma.

• Como alternativa ao Córdova, o Capacitor oferece os mesmos benefícios de plata-


forma cruzada, mas com uma abordagem mais moderna para o desenvolvimento de
aplicativos, aproveitando as últimas APIs da Web e recursos de plataforma nativa;
– O Ionic utilizava o Cordova e passou a usar o Capacitor para desenvolver as
aplicações.

• Capacitor funciona como um navegador poderoso para aplicativos da Web modernos


que desbloqueia a funcionalidade nativa completa de cada plataforma por meio de
APIs de plataforma cruzada consistentes;
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– O Capacitor é como um browser que usa a aplicação do celular sem interface, que
fornece API interna, que tem acesso ao sistema de arquivos etc.

Usando o Capacitor, os desenvolvedores podem construir um aplicativo e direcio-



nar um conjunto de APIs, independentemente da plataforma em que o aplicativo está
sendo executado, em oposição ao gerenciamento de várias APIs para cada plataforma
de destino; .
20m
Assim, a APP acessa o File System ou grava um arquivo, que invés de ir diretamente
no sistema operacional, irá para uma API disponibilizada pelo Capacitor, que chamará algo
no Android ou IOS, e tentará abstrair a diferença de chamada de um sistema operacional
para outro.

• Isso significa que, por exemplo, o acesso à Câmera utiliza o mesmo código no iOS
/ Android que no Electron e na web. Isso torna mais fácil construir um aplicativo da
web que seja executado nativamente no celular, desktop e na web como um Progres-
sive Web App;
– Mesmo que seja outra plataforma, a API estará abstraída.

• Os aplicativos do capacitor são aplicativos nativos;


– Irá gerar um aplicativo que estará na loja, embarcado, em que o HTML, CSS e
Javascript ficam no meio e o Capacitor vai embalar essa aplicação.

• Eles podem incorporar controles de UI nativos e acessar qualquer SDK ou API nativo
disponível na plataforma;
• Ao contrário de aplicativos nativos mais tradicionais, os aplicativos Capacitor provavel-
mente terão a maior parte do aplicativo em execução em um controle WebView incor-
porado que desbloqueia os benefícios e eficiências de plataforma cruzada desejados;
– Há um conjunto de tecnologias, com o Capacitor, que fará transições de API do sis-
tema operacional para o aplicativo através de uma API de Javascript e também um
sistema fornecendo Webview, que fornece a capacidade de renderizar, que é exibir
o conteúdo.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Cordova / PhoneGap
• Como o Capacitor, Cordova é um projeto de código aberto que executa aplicativos da
web em várias plataformas, embora não no Electron nem web como um aplicativo da
Web progressivo;
– O Cordova, que era o antigo Framework, foi substituído pelo Capacitor, havendo
menor capacidade.

• Cordova é o núcleo de código aberto do projeto comercial Adobe PhoneGap e eles


podem ser considerados equivalentes;
• Embora Cordova e Capacitor tenham algumas semelhanças, os projetos tomam deci-
sões muito diferentes em vários pontos-chave, de modo que a experiência dos dois
projetos é muito diferente;
• Capacitor, lançado em 2018, também usa muitas novas APIs modernas que não esta-
vam disponíveis quando o Cordova foi criado em 2009;
– O Cordova tinha o foco em Android e IOS. O Capacitor tem foco maior, expandindo
em Android, IOS, Electron e PWA, possuindo o mesmo objetivo, que é envelopar as
APIs, mas com formas diferentes.

Metas do Ionic
• Plataforma cruzada: Crie e implante aplicativos que funcionem em várias platafor-
mas, como iOS nativo, Android, desktop e web como um Progressive Web App - tudo
com uma base de código. Escreva uma vez, corra em qualquer lugar;

• Baseado em padrões da web: O Ionic Framework é construído com base em dados


confiáveis, tecnologias da web padronizadas: HTML, CSS e JavaScript, usando APIs
da Web modernas, como Custom Elements e Shadow DOM. Por causa disso, os com-
ponentes do Ionic têm uma API estável e não estão à mercê de um único fornecedor
de plataforma;
– Custom Elements é uma especificação do HTML; Shadow DOM é uma caracterís-
tica do browser para ocultar o CSS elements. A construção de aplicações se baseia
nessas especificações e padrões da web.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Belo design: Limpo, simples e funcional. O Ionic Framework foi projetado para funcio-
nar e exibir lindamente em todas as plataformas. Comece com componentes pré-con-
cebidos, tipografia, paradigmas interativos e um lindo (mas extensível) tema básico; .
25m
• Simplicidade: O Ionic Framework é construído com a simplicidade em mente, de
modo que a criação de aplicativos Ionic seja agradável, fácil de aprender e acessível a
praticamente qualquer pessoa com habilidades de desenvolvimento web;
– O público-alvo é o desenvolvedor Web, que trabalha com aplicações web e tem
conhecimento CSS, HTML e Javascript, mas ao usar o ecossistema de Android e
IOS possui dificuldades, com o Ionic usará tecnologias conhecidas.
– Os aplicativos Ionic, que são baseados em HTML, CSS e Javascript não pos-
suem experiência de uso tão refinada quanto a experiência de uso de um aplicativo
nativo, possuindo nicho, com objetivos, principalmente para empresas que possuem
equipe de desenvolvimento que não possuem experiência de desenvolvimento de
aplicativos.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Compatibilidade
• Enquanto as versões anteriores do Ionic eram fortemente acopladas ao Angular, a
versão 4.x da estrutura foi reprojetada para funcionar como uma biblioteca de com-
ponentes da Web autônoma, com integrações para os frameworks JavaScript mais
recentes, como o Angular;

• O Ionic pode ser usado na maioria dos frameworks de front-end com sucesso, incluindo
React e Vue, embora alguns frameworks precisem de uma camada para suporte total
ao Web Components;
– Era muito acoplado ao Angular até a versão 4.x, que foi reprojetada de forma mais
autônoma para trabalhar com outros frameworks, que são mais populares.

JavaScript
• Um dos principais objetivos com a mudança do Ionic Framework para Web Compo-
nents era remover qualquer requisito rígido em um único framework para hospedar os
componentes;
• Isso possibilitou que os componentes principais funcionassem de forma autônoma em
uma página da web com apenas uma tag de script;
• Embora trabalhar com frameworks possa ser ótimo para equipes e aplicativos maiores,
agora é possível usar o Ionic como uma biblioteca autônoma em uma única página,
mesmo em um contexto como o WordPress;
—É possível utilizar até mesmo na web o WordPress. Assim, antigamente o Ionic era
preso ao Angular; atualmente, a partir da versão 4, é possível utilizá-lo com o React e Vue.

Obs.: nas provas, deve-se imaginar que o examinador pode não conhecer os recursos re-
centes, posto que o edital pode não trazer especificamente as versões cobradas. .
30m

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

IONIC II

IONIC CLI

Obs.: Atualmente, esse frame deve ter um “DX agradável”, que é uma experiência agradável
para o desenvolvedor, em que há um CLI, que é um comando de usuário que pode
ser utilizado para criar um projeto etc.

• O Ionic CLI, ou Interface de Linha de Comando, é uma ferramenta que estrutura


rapidamente os aplicativos do Ionic e fornece uma série de comandos úteis para os
desenvolvedores do Ionic;
• Além de instalar e atualizar o Ionic, o CLI vem com um servidor de desenvolvimento
integrado, ferramentas de compilação e depuração e muito mais;
• Se você for um membro do Appflow, a CLI pode ser usada para realizar compilações e
implantações na nuvem e administrar sua conta;
– Esse CLI inclui um servidor para executar a aplicação localmente. Em geral, pode
rodar no celular, mas pode rodar no navegador.
– Appflow seria a versão paga, que fornece utilitários para fazer compilação e
implantação.
– Mesmo que se desenvolva aplicação híbrida, há um problema para compilar, que
precisa do SDK nativo, que no Android é multiplataforma; o problema é no IOS, só roda
em computador MAC, que o Appflow oferece alternativa para desenvolver em cloud.

APPFLOW

• Para ajudar a construir, implantar e gerenciar aplicativos Ionic em todo o seu ciclo de
vida, há o serviço comercial para aplicativos de produção chamado Appflow, que é
separado do Framework de código aberto;
• O Appflow ajuda os desenvolvedores e equipes a compilar builds de aplicativos nativos
e implementar atualizações de código ao vivo para aplicativos Ionic a partir de um
painel centralizado;
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Upgrades pagos opcionais estão disponíveis para recursos mais avançados, como
publicação direta em lojas de aplicativos, automação de fluxo de trabalho, logon único
(SSO) e acesso a serviços conectados e integrações;

Obs.: A parte de publicação em loja de aplicativos também é utilizada.

• A interface é a seguinte:

ECOSSISTEMA

• O Ionic Framework é desenvolvido e mantido ativamente em tempo integral por uma


equipe central, e seu ecossistema é guiado por uma comunidade internacional de
desenvolvedores e colaboradores, alimentando seu crescimento e adoção;
• Desenvolvedores e empresas de pequeno e grande porte usam o Ionic para criar e
implantar aplicativos incríveis que podem ser executados em qualquer lugar; .
5m

Obs.: Não é um framework morto, posto que é atualizado e disponível.


ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

LICENÇA

• Ionic Framework é um projeto gratuito e de código aberto, lançado sob a licença MIT
permitida;
• Isso significa que pode ser usado em projetos pessoais ou comerciais gratuitamente;
• MIT é a mesma licença usada por projetos populares como jQuery e Ruby on Rails;

Obs.: Eventualmente, surgem questões a esse respeito, que são conceituais, em que
ressalte que o Ionic é open source.

COMPONENTES DA UI

• Ionic Framework é uma biblioteca de componentes de interface do usuário, que são


elementos reutilizáveis que servem como blocos de construção para um aplicativo;
• Componentes são construídos com padrões da web usando HTML, CSS e JavaScript;
• Embora os componentes sejam pré-construídos, eles são projetados desde o início
para serem altamente personalizáveis, de modo que os aplicativos podem fazer cada
componente seu, permitindo que cada aplicativo tenha sua própria aparência;

Obs.: Especialmente nas corporações, em que as empresas querem dar sua marca à
aparência.

• Os componentes Ionic podem ser facilmente definidos para alterar globalmente


a aparência de um aplicativo inteiro utilizando as tematizações fornecidas pelo
Framework;

Obs.: Apesar de já possuir interface definida, é personalizável, para poder adequar ao


visual da empresa.

ESTILO ADAPTÁVEL

• O Adaptive Styling é um recurso integrado do Ionic Framework que permite que os


desenvolvedores de aplicativos usem a mesma base de código para várias plataformas;
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Cada componente Ionic adapta sua aparência à plataforma em que o aplicativo está
sendo executado;
• Por exemplo, dispositivos Apple, como iPhone e iPad, usam a linguagem de design
iOS da própria Apple;
• Da mesma forma, os dispositivos Android usam a linguagem de design do Google
chamada Material Design;

Obs.: Apesar de haver a mesma base de código, a linguagem de Android e IOS possuem
forma de comunicação diferentes, por isso há um recurso chamado “adaptive stile”,
que permite que sejam feitas mudanças visuais a depender de onde será executado.

• Ao fazer mudanças sutis de design entre as plataformas, os usuários recebem uma


experiência de aplicativo familiar;
• Um aplicativo Ionic baixado da App Store da Apple terá o tema iOS, enquanto um
aplicativo Ionic baixado da Play Store do Android terá o tema Material Design;
• Para os aplicativos que são vistos como um Progressive Web App (PWA) em um
navegador, o Ionic usará como padrão o tema Material Design;
• Além disso, decidir qual plataforma usar em determinados cenários é totalmente
configurável;

Obs.: Tem-se a mesma tela de Ionic rodando em IOS, à esquerda, e à direita no Android.
10m
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

NAVEGAÇÃO

Obs.: O padrão de navegação é diferente em ambas as plataformas, em que o Ionic se


adapta para cada um.

• Os aplicativos da web tradicionais usam um histórico linear, o que significa que o usuário
navega para frente em uma página e pode clicar no botão Voltar para navegar de volta;

Obs.: É possível ir e voltar na página para trás.

• Em contraste, os aplicativos móveis costumam utilizar navegação paralela “não linear”.


Por exemplo, uma interface com guias pode ter pilhas de navegação separadas para
cada guia, garantindo que o usuário nunca se perca ao navegar e alternar entre as guias;
– Exemplo: Em um dispositivo de celular, é possível estar em vários estados, em uma
navegação não perder eles, sendo chamado de “pilha de navegação”.
• Os aplicativos Ionic adotam essa abordagem de navegação móvel, suportando
históricos de navegação paralela que também podem ser aninhados, ao mesmo tempo
em que mantêm os conceitos familiares de navegação no estilo do navegador com os
quais os desenvolvedores da web estão familiarizados;

ACESSO NATIVO

Obs.: Acesso nativo é que os recursos nativos como giroscópio do celular não estão
disponíveis, ocorrendo por meio de:

• Um recurso incrível de aplicativos desenvolvidos com tecnologias da web (como


aplicativos Ionic) é que podem ser executados em praticamente qualquer plataforma:
computadores desktop, telefones, tablets, carros, geladeiras etc.;
• A mesma base de código para aplicativos Ionic pode funcionar em muitas plataformas
porque é baseada em padrões da web e APIs comuns que são compartilhados entre
essas plataformas;
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Um dos casos de uso mais comuns do Ionic é construir um aplicativo que pode ser
baixado da App Store e da Play Store;
• Tanto os kits de desenvolvimento de software (SDKs) iOS e Android fornecem webview
que renderiza qualquer aplicativo Ionic, ao mesmo tempo que permitem acesso total
ao SDK nativo;
• Capacitor e Cordova são usados para dar aos aplicativos Ionic esse acesso a
SDKs nativos;

Obs.: Capacitor e Cordova são elementos que permitem que o aplicativo web acesse
recursos nativos.

• Isso significa que os desenvolvedores podem criar rapidamente um aplicativo usando


ferramentas comuns de desenvolvimento da Web e ainda ter acesso a recursos nativos,
como acelerômetro do dispositivo, câmera, GPS entre outros;

TEMAS

• Basicamente, o Ionic Framework é construído usando CSS, o que permite tirar


vantagem da flexibilidade que as propriedades (variáveis) CSS fornecem;
• Isso torna fácil criar um aplicativo que tenha uma ótima aparência enquanto segue o
padrão da web;
• É fornecido um conjunto de cores para que os desenvolvedores possam ter ótimos
padrões, mas é encorajado substituí-los para criar designs que correspondam a uma
marca, empresa ou paleta de cores desejada;
• Tudo, desde a cor de fundo de um aplicativo até a cor do texto, é totalmente
personalizável;

Obs.: O tema permite que o usuário vá fazer alteração e ajuste para o visual da empresa.

APIS DE HARDWARE

• Em um aplicativo nativo, é comum fazer chamadas de API para se comunicar com o


dispositivo, como abrir a câmera ou acessar geolocalização;
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Essas chamadas de API não funcionarão quando chamadas em um ambiente da web


porque não há uma ponte nativa;
• Existem algumas maneiras de o Ionic lidar com isso;

IONIC NATIVE

• O Ionic Native possui sua própria lógica interna para detectar se está dentro de um
ambiente nativo;
• Em vez de lançar um erro de tempo de execução, ele imprimirá um aviso se não for um
ambiente nativo e não houver plug-ins Cordova disponíveis;
• O aplicativo não quebrará e continuará funcionando, embora sem a funcionalidade nativa;
15m
– Exemplo: Ao fazer um aplicativo que precise utilizar um GPS, que será compilado
para web, pode-se utilizar os recursos Ionic para detectar se há GPS, podendo
habilitar ou desabilitar alguma função com base nisso.
DETECÇÃO DE PLATAFORMA

• Na lógica de um aplicativo, sempre que for necessário fazer uma chamada de API nativa,
é recomendável sempre verificar o status do ambiente nativo primeiro. Por exemplo:

this.platform.ready().then(() => {
// ‘hybrid’ detecta Cordova e Capacitor if (this.platform.is(‘hybrid’)) {
// fazer chamadas a APIs nativas
} else {
// utilizar as APIs do browser
}
});

Obs.: Tem-se um código javascript, identificando se a plataforma é híbrida, que serão APIs
nativas; caso contrário, serão APIs de browser.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

FALLBACKS DO NAVEGADOR

• Muitas APIs nativas que as pessoas usam (por exemplo, a API de arquivo), não estão
disponíveis no navegador;
• As APIs estão sempre melhorando e alcançando o nativo, por isso é recomendável
pesquisá-las;
• Levando os dois primeiros pontos em consideração, é bastante fácil criar uma
experiência agradável que se adapte à plataforma em que o aplicativo está sendo
executado;

Obs.: A chave de um bom funcionamento é adaptar o aplicativo para saber se há o recurso.

DESKTOP

• Ao planejar a implantação de um aplicativo para desktop, seja usando Electron ou


como um Progressive Web App, é importante garantir que o aplicativo funcione sem
problemas em dispositivos maiores;

Obs.: São componentes de telas, não bastando compilar, que podem funcionar, mas causar
estranheza no desktop.

LAYOUT

• Muitas pessoas raramente notam o layout de um aplicativo, mas pode ter um grande
impacto na experiência e usabilidade. Considere este padrão de UI comum:
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: Permite que trabalhe com grade e use vários elementos.

• Isso renderizar 5 itens com largura de 100% cada. Isso pode parecer ótimo em um
dispositivo móvel, como visto abaixo, mas ver isso em um navegador de desktop é
uma história diferente. Os itens ficam esticados para preencher a tela inteira devido à
largura da tela ampla, deixando o espaço da tela sem uso;

Obs.: Assim, ao usar 100% da largura, no celular pode ficar normal, mas no ambiente
desktop ocupará toda a largura da tela.

• Para melhorar essa experiência, podemos envolver os itens em um componente grade.


A visualização pode ser facilmente reescrita em algo mais utilizável em telas maiores:

9 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Ao envolver os itens em um elemento íon-grid, o sistema de grade iônica é adicionado


ao nosso layout. Envolver cada item em uma coluna faz com que os itens ocupem
largura igual dentro da grade, ao longo da mesma linha;

Obs.: No mobile, esses elementos serão exibidos de forma adequada. É chamado


“responsividade”, que é quando o aplicativo é responsivo.
ANOTAÇÕES

10 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ARMAZENAMENTO

• A maioria dos aplicativos, em algum momento, precisará armazenar algum tipo de


dados localmente;
• Seja armazenando algum JSON de uma solicitação XHR ou salvando um token de
autenticação, existem muitas opções de armazenamento diferentes disponíveis;
• Além disso, se o aplicativo estiver sendo executado em um ambiente nativo, é possível
criar um banco de dados SQLite completo e armazenar dados nele;
• Todos esses diferentes mecanismos de armazenamento têm suas próprias vantagens
e desvantagens, mas os desenvolvedores do Ionic não devem se preocupar com isso;
• Nesse caso, a biblioteca de armazenamento do Ionic é uma candidata perfeita para o
caso de uso de vários ambientes;
• Construída com base na biblioteca Local Forage bem testada, a classe de
armazenamento do Ionic fornece um mecanismo de armazenamento adaptável que
escolherá a melhor solução de armazenamento para o tempo de execução atual;
• Atualmente, isso significa que ele será executado por meio de SQLite para nativo,
IndexedDB (se disponível), WebSql ou armazenamento local;
• Ao lidar com tudo isso, ele permite gravar no armazenamento usando uma API estável;

Obs.: Isso significa que ao receber o storage, que vem do Ionic, achará o valor dele e
recuperar o valor. Dependendo da plataforma em que se executa esse código, o Ionic
escolherá o dispositivo de armazenamento mais adequado, seja local storage etc. .
20m

class MyClass {
constructor(public storage: Storage) {}
async setData(key, value) {
const res = await this.storage.set(key, value);
console.log(res);
}
async getData(key) {
const keyVal = await this.storage.get(key); console.log(‘Key is’, keyVal);
}
ANOTAÇÕES

11 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

WEB VIEW

• Os aplicativos Ionic são construídos usando tecnologias da web e são renderizados


usando visualização da Web, que são uma tela inteira e um navegador da Web
totalmente equipado;

Obs.: Ao se usar o web view, abrirá um componente na tela do celular que será ocupado
totalmente pelo HTML.

Obs.: A aplicação é renderizada no webview e através da bridge, pode chamar as APIs de


hardware ou, em um sistema tradicional, tem-se a App e API de hardware. No caso
do Ionic, tem-se Webview e Bridge. Quando há aplicação nativa, espera-se que a
performance seja superior, posto que há menos camadas de software.
ANOTAÇÕES

12 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• As visualizações modernas da Web oferecem muitas APIs HTML5 integradas para


funcionalidade de hardware, como câmeras, sensores, GPS, alto-falantes e Bluetooth,
mas às vezes também pode ser necessário acessar APIs de hardware específicas da
plataforma;
• Em aplicativos Ionic, APIs de hardware podem ser acessadas por meio de uma camada
de bridge, normalmente usando plug-ins nativos que expõem APIs JavaScript;
• O plugin Ionic Webview é especializado para aplicativos JavaScript modernos;

Obs.: É um servidor HTTP que disponibiliza os arquivos para web view.

• Para iOS e Android, os arquivos do aplicativo são sempre hospedados usando o


protocolo http com um servidor HTTP otimizado que é executado no dispositivo local;

CORS

• Web Views impõem CORS, por isso é importante que os serviços externos tratem
adequadamente às solicitações de origem cruzada;

Obs.: Quando faz uma requisição em webview, é como se faz através de browser, que deve
vir com cabeçalhos de CORS bem definidos para que a parte de web view aceite.

PROTOCOLO DE ARQUIVO

• Alguns plug-ins tentam acessar os arquivos do dispositivo por meio do protocolo file://;
• Para evitar dificuldades entre http e file, os caminhos para os arquivos do dispositivo
devem ser reescritos para usar o servidor HTTP local;
• Por exemplo, file:///path/to/device/file deve ser reescrito como
http://<host>:<port>/<prefix>/path/to/device/file antes de ser renderizado no aplicativo;

Obs.: Deve-se utilizar HTTP, porque é como se rodasse um servidor no local host.

• Para aplicativos de capacitor, converta URIs de arquivo da seguinte forma:


import { Capacitor } from ‘@capacitor/core’; Capacitor.convertFileSrc(filePath);
ANOTAÇÕES

13 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Para aplicativos Cordova, o plug-in Ionic Web View fornece uma função de utilidade
para converter URIs de arquivo:
window.Ionic.WebView.convertFileSrc()
• Há também um plugin Ionic Native correspondente:@ionic- native/ionic-webview;

PWAS

Obs.: É um padrão de desenvolvimento web que permite progressive web app, sendo uma
aplicação que progressivamente se instale no celular, em que a principal diferença
é que não passa pela loja da Apple ou Google. Sendo um site que não conseguirá
acessar aos recursos nativos de hardware, se fizer uma compilação da aplicação
para PWA, deve-se estar ciente que não acessa os recursos nativos.

• Um Progressive Web App (PWA) é um aplicativo da web que usa recursos modernos
da web para fornecer uma experiência semelhante a um aplicativo aos usuários;
• Esses aplicativos atendem a certos requisitos, são implantados em servidores,
acessíveis por meio de URLs e indexados por mecanismos de pesquisa; .
25m
• Isso pode funcionar em conjunto com o Capacitor para fornecer vários destinos de
implantação para todos os seus usuários;
• Pode-se implantar seu aplicativo como um PWA e como um aplicativo nativo e aproveitar
os dois canais;
• O Ionic permite que se envie um aplicativo não apenas para a loja de aplicativos, mas
também para a web móvel como um PWA;

Obs.: Pode haver um targget a mais para a aplicação, como o Twitter, que podia ser utilizado
como aplicativo nativo de celular ou PWA.

CONFIGURAÇÃO DE AMBIENTE

• Para começar a usar o Ionic Framework, o único requisito é um ambiente Node & npm;

Obs.: Como o aplicativo se baseia em Javascript, são escritas em Node e npm.


ANOTAÇÕES

14 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Um editor de código também é necessário


• O código do Visual Studio é recomendado;
• O Visual Studio Code é um editor de texto gratuito feito pela Microsoft;

TERMINAL

• Em geral, recomenda-se o uso de terminais integrados;


• Para Windows, há suporte para Prompt de Comando e PowerShell;
• WSL é conhecido por trabalhar com Ionic, mas pode não ser compatível;
• Para macOS, o aplicativo Terminal integrado é compatível;
• Git Bash (git-scm.com ) não oferece suporte a interatividade TTY e não é compatível
com Ionic;

NODE E NPM

• Quase todas as ferramentas para projetos JavaScript modernos são baseadas


em Node.js;
• A página de download possui pacotes de instalação predefinidos para todas as
plataformas. Recomenda-se selecionar a versão LTS para garantir a melhor
compatibilidade;
• Node é empacotado com npm, o gerenciador de pacotes para JavaScript;

Obs.: Entra-se no site do Node e NPM, estando estes dois instalados, escreve-se “node –
version” e ““npm – version”.

15 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

INSTALANDO O CLI

• Depois, instala o Ionic, em “nmp install – g” e instala globalmente o ionic.


• Ionic haverá o comando “ionic – version” e verá a versão executada do Ionic.

CRIANDO A APP

O comando “ionic start myApp tabs” perguntará qual framework a instalar, preparando
o diretório, extraindo os arquivos, e integrando o Capacitor para rodar com Android ou IOS.

16 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Após isso, acesse a pasta do projeto “myApp” que poderá ser rodado tanto no browser
quanto no celular.
ANOTAÇÕES

17 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (FGV/IBGE/ANALISTA CENSITÁRIO/ANÁLISE DE SISTEMAS/DESENVOLVIMENTO
DE APLICAÇÕES/WEB MOBILE/2017) Ionic é um framework para desenvolvimento
de aplicativos para dispositivos móveis. O serviço fornecido pelo Ionic 2 que pode
ser injetado em classes para obter informações sobre o dispositivo móvel no qual o
aplicativo está rodando é:
a. Config;
b. Plataform;
c. Header;
d. ViewController;
e. Devices.

COMENTÁRIO
Para verificar alguma informação sobre a plataforma, usa-se o comando “platform” com
“.reader”. Sendo uma API fornecida pelo Ionic.

DETECÇÃO DE PLATAFORMA

• Na lógica de um aplicativo, sempre que for necessário fazer uma chamada de API nativa,
é recomendável sempre verificar o status do ambiente nativo primeiro. Por exemplo:
ANOTAÇÕES

18 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
IONIC II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

this.platform.ready().then(() => {
// ‘hybrid’ detecta Cordova e Capacitor if (this.platform.is(‘hybrid’)) {
// fazer chamadas a APIs nativas
} else {
// utilizar as APIs do browser
}
});
30m

GABARITO
1. b

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

19 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GIT

O que é controle de versão

• Os sistemas de controle de versão são uma categoria de ferramentas de software


que ajudam uma equipe de software a gerenciar alterações no código-fonte ao
longo do tempo.
• O software de controle de versão acompanha todas as modificações no código em um
tipo especial de banco de dados.
• Se um erro for cometido, os desenvolvedores podem voltar o relógio e comparar ver-
sões anteriores do código para ajudar a corrigir o erro, minimizando a interrupção de
todos os membros da equipe.

Obs.: há um sistema de banco de dados para gerenciar o controle de versões de softwa-


res com políticas diferentes, com código com marcação das versões anteriores.
5m

O que é Git

• Git é um projeto open source, originalmente desenvolvido em 2005 por Linus Torvalds,
o criador do kernel do sistema operacional Linux;
• Possui arquitetura distribuída, e é um exemplo de um DVCS (Distributed Version Con-
trol System);
• Em vez de ter apenas um único local para o histórico completo da versão do software,
como é comum em sistemas de controle de versões populares como CVS ou Subver-
sion (também conhecido como SVN), no Git, a cópia de trabalho do código de cada
desenvolvedor também é um repositório que pode conter o histórico completo de todas
as alterações.
• Além de ser distribuído, o Git foi projetado com desempenho, segurança e flexibili-
dade em mente.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Observação:

•O Linus Torvalds criou o GIT para armazenar o código-fonte do Linux.


• É importante não confundir o GIT com o GIT HUB. O GIT HUB é um serviço de internet
que opera utilizando o GIT.
• A maioria dos sistemas tem um repositório central em que é possível baixar antigas ver-
sões, no Git tem uma filosofia distinta, toda vez que é acessado o seu repositório há
uma “clonagem” e traz todo o histórico do repositório para a máquina do usuário que
tem uma versão completa da história do projeto.
• Hoje, o Git é usado em muitas coisas, deve ter cerca de 90% de adesão no mercado.
10m

Instantâneos, não diferenças

A principal diferença entre o Git e qualquer outro VCS (Subversion por exemplo) é a
forma como o Git trata sobre seus dados.

• Conceitualmente, a maioria dos outros sistemas armazena informações como uma lista
de alterações baseadas em arquivos. Esses outros sistemas (CVS, Subversion, Per-
force, Bazaar, e assim por diante) tratam as informações que armazenam como um
conjunto de arquivos e as alterações feitas em cada arquivo ao longo do tempo (isso é
comumente descrito como controle de versão baseado em delta).
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Observação

Na linha do tempo foram feitas algumas alterações. Um arquivo, em sua forma original,
sofreu uma série de deltas com o passar do tempo.

Instantâneos, não diferenças

•O Git não trata ou armazena seus dados dessa maneira;


• Em vez disso, o Git trata seus dados mais como uma série de instantâneos de um sis-
tema de arquivos em miniatura;
• Com o Git, toda vez que se faz commit ou salva o estado do seu projeto, o Git basica-
mente tira uma foto de como todos os seus arquivos se parecem naquele momento e
armazena uma referência àquele snapshot;
• Para ser eficiente, se os arquivos não forem alterados, o Git não armazenará o arquivo
novamente, apenas um link para o arquivo idêntico anterior que ele já armazenou;
• O Git trata seus dados mais como um fluxo de instantâneos.

Observação

No Git é como se cada vez que for dado um commit, cria-se uma foto o sistema de
arquivo daquele momento tentando ser mais eficiente, compactando-o.
15m
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quase toda operação é local

• A maioria das operações no Git precisa apenas de arquivos e recursos locais para operar
– geralmente nenhuma informação é necessária de outro computador na sua rede;
• Por exemplo, para navegar pelo histórico do projeto, o Git não precisa ir para o servidor
para obter o histórico e exibi-lo. Ele simplesmente o lê diretamente do banco de dados
local (maior velocidade nas operações);
• Isso também significa que há muito pouco que não se pode fazer se estiver off- line;

INTEGRIDADE

• Todas operações no Git geram um checksum antes de ocorrer o armazenamento e a


operação é então referida por este checksum. Isso significa que é impossível alterar o
conteúdo de qualquer arquivo ou diretório sem que o Git saiba disso.
• Esta funcionalidade é integrada ao Git nos níveis mais baixos e é parte integrante de
sua filosofia. Não se pode perder informações durante transferências ou ocorrer cor-
rupção de arquivos sem que o Git possa detectá-las.
• O mecanismo que o Git usa para essa soma de verificação é chamado de hash SHA-1.
• Esta é uma string de 40 caracteres composta por caracteres hexadecimais (0-9 e a–f) e
calculada com base no conteúdo de um arquivo ou estrutura de diretório no Git.
• Um hash SHA-1 é algo como: 24b9da6552252987aa493b52f8696cd6d3b00373

Observação
O checksum é uma soma, uma conta com base nos valores binários de cada um dos
caracteres dos arquivos envolvidos ali e é gerado um número que se houver qualquer altera-
ção ou bit, altera o checksum.
20m
Em geral, o Git é incremental.

Git geralmente apenas adiciona dados

• Quando se faz ações no Git, quase todas adicionam dados ao banco de dados do Git.
• É difícil fazer com que o sistema faça qualquer coisa que não possa ser desfeita ou
fazer com que ele apague os dados de qualquer maneira.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Como acontece com qualquer VCS, você pode perder ou bagunçar as alterações que
ainda não foram submetidas (comitadas), mas depois de submeter (comitar) um ins-
tantâneo no Git, é muito difícil apagá-lo, especialmente se você enviar regularmente
seu banco de dados para outro repositório (push).

Os três estados

• O Git tem três estados principais nos quais seus arquivos podem residir: submetidos
(committed), modificados (modified) e preparados (staged).

→ Submetido significa que os dados são armazenados com segurança no banco de


dados local;
→ Modificado significa que se alterou o arquivo, mas ainda não foi confirmado no
banco de dados;
→ Preparado significa que se marcou um arquivo modificado em sua versão atual para
entrar em seu próximo instantâneo de confirmação;

• Isso nos leva às três seções principais de um projeto do Git: o diretório Git, a árvore de
trabalho e a área de preparação.

Os três estados
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Observação

•O diretório de trabalho é onde há a codificação dos arquivos.


• O Staging é a área de preparação.
• O Stage é onde será criado um conjunto de mudanças que é comitado e vai para uma
pasta chamada “.git directory”.
• No checkout é trazido para a área de trabalho uma nova versão.
• O diretório Git é onde o Git armazena o banco de dados de metadados e objetos para
o projeto. Esta é a parte mais importante do Git, e é o que é copiado quando se clona
um repositório de outro computador.
• A árvore de trabalho (working tree) é um único checkout de uma versão do projeto.
Esses arquivos são retirados do banco de dados compactado no diretório Git e coloca-
dos no disco para serem usados ou modificados.
• A área de preparação (staging area) é um arquivo, geralmente contido no diretório Git,
que armazena informações sobre o que acontecerá no próximo commit. Seu nome
técnico na linguagem do Git é o “índice”;
25m
• Um fluxo de trabalho básico do Git é da seguinte forma:

→ Modifica-se os arquivos na árvore de trabalho;


→ Seleciona-se apenas as alterações que deseja-se fazer parte da próxima submissão
(commit), o que adiciona apenas as estas alterações à área de preparação (staging area);
→ Faz-se uma entrega (commit), que pega os arquivos como eles estão na área de
preparação (staging area) e armazena esse instantâneo (snapshot) permanentemente no
diretório Git.

• Se uma versão específica de um arquivo estiver no diretório Git, será considerado con-
firmado (commited);
• Se ele foi modificado e adicionado à área de preparação, ele é preparado (staged);
• E se foi alterado desde que foi retirado, mas não foi preparado (staged), é modificado
(modified);
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Esses são alguns comandos para utilização do Git:

Tarefa Git Notas Comandos do Git


Configure o nome do autor e o
git config --global user.name “Sam Smith”
endereço de email a serem
Dizer ao Git quem é o usuário git config --global user.email sam@exam-
usados nas entregas (com-
ple.com
mits).
Criar um novo repositório
git init
local
git clone /caminho/do/repositório
Crie uma cópia de trabalho de
Clonar um repositório git clone usuario@host:/caminho/do/repo-
um repositório local:
sitório
Adiciona um ou mais arquivos git add <nome do arquivo>
Adicionar arquivos
à área de preparação (índice): git add *
Entregar as alterações no git commit -m “Mensagem da entrega”
Entregar (commit)
repositório local
Entregar todos os arquivos
que foram adicionados com
git add e também confirma git commit -a
todos os arquivos que altera-
dos desde então:
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

30m

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
GIT
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DIRETO DO CONCURSO
1. (CESPE/EBSERH/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2018) Acerca de
infraestrutura de TI, julgue o item subsequente. O comando Git clone, seguido do ca-
minho do repositório, pode ser usado para criar uma cópia desse repositório para o
diretório atualmente em uso em uma máquina Linux.

�(  ) Certo

�(  ) Errado

COMENTÁRIO
O comando Git clone é um comando para clonar o repositório remoto.

GABARITO
1. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
CONHECIMENTOS ESPECÍFICOS
Gitlab
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GITLAB

GitLab é uma plataforma de DevOps para permitir que as empresas desenvolvam e for-
neçam software com eficiência, além de fortalecer a segurança.
A plataforma presta um serviço diretamente em cloud, mas também é open source,
os dois principais concorrentes no mercado é o GitLab e o GitHub, são similares, porém o
GitHub não é código fonte aberto, ou seja, não há a possibilidade de baixar e executar em
uma determinada empresa, já o GitLab é código fonte aberto e pode ser usado diretamente
na empresa. Ambos têm ligação com o próprio Git, essa ferramenta de linha de comando
possibilita o gerenciamento das versões do código.
Com o GitLab, é possível expandir e potencializar o uso do Git, transformando-o quase
em uma rede social colaborativa em uma empresa. Há várias opções, como visualizar os
arquivos de um projeto, pré-visualizar o conteúdo em Markdown, mandar códigos, adicionar
arquivos padrões, editar diretamente na web, controlar e criar branches, ver histórico, curtir
e subdividir o projeto, etc.
5m

RECURSOS

• Project Information - Informações do projeto; possibilita observar as atividades, como


histórico, mensagens, etc.
• Repository – permite visualizar os arquivos, dividido nas seguintes abas:
– Commits – para observar commits que foram elaborados, quem deu o commit,
quando e o que alterou, qual o código, mensagem, etc.;
– Branches – possibilita visualizar as ramificações do código;
– Tags – indicam versões do software e permitem recuperar um código diretamente
naquela versão;
– Contribuidores – quem andou contribuindo com o projeto;
– Graph e compare – elementos.

• Issues – propicia a observação dos defeitos existentes no projeto, é bug tracker. Não
tem na linha de comando naturalmente.
ANOTAÇÕES

www.grancursosonline.com.br 1
CONHECIMENTOS ESPECÍFICOS
Gitlab
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– List – enumera e lista issues, pode-se buscá-las, ordená-las, observar quais estão
abertas e fechadas, além disso, pode-se adicionar flags a esses problemas, descre-
vendo quais problemas são e permitindo comentários, ademais, pode-se criar uma
“issue” e até mesmo fazer atribuições para um colega de trabalho.
– Board – visualização diferente de issues.
10m

• Merge requests – permite envio de pedido de integração de código e pode ocorrer em


projetos externos e internos. Merge requests ficam abertos e podem aguardar apro-
vação, fazer comentários e definir quem aprova. Assim que concluído, consegue-se
aceitar o merge request e ele passa para a contagem do “merged” e o código é inte-
grado ao projeto. Em caso de recusa, irá para o “closed”.
• Security e Compliance - disponível na parte “freemium” do GitLab, possui ferramen-
tas como segurança e compliance.
– Discover – Permite fazer uma procura de dependências, ou seja, identificar algum
problema de segurança nas dependências do projeto que estejam listadas.
15m
– Configuration – há a possibilidade de trabalhar a parte de segurança e testes com
ferramentas para melhorar a qualidade de código.

• Deployments
– Release – controle de release, podendo criar a partir da “master” e armazenar paco-
tes binários em package register, que suporta Python, Java, etc.

• Settings – configurações e customizações no funcionamento do GitLab, como: con-


figurar visibilidade (se é público ou privado), permissões, como funcionam os “merge
requests”, quem pode aprová-los, etc.

DIRETO DO CONCURSO
1. (2019/COVEST–COPSET/UFPE/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/SIS-
TEMAS)No contexto de integração contínua (IC), assinale a alternativa incorreta.
a. Um dos princípios centrais da IC é integrar cedo e de forma frequente. Os desenvolve-
dores devem efetuar commits do código com frequência para obter os benefícios da IC.
b. O uso de IC em um projeto reduz riscos, reduz processos manuais repetitivos e per-
mite gerar a qualquer momento uma versão do software pronta para deploy.
ANOTAÇÕES

www.grancursosonline.com.br 2
CONHECIMENTOS ESPECÍFICOS
Gitlab
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

c. Jenkins, Travis e Gitlab são exemplos de ferramentas que dão suporte à IC em proje-
tos de software.
d. A IC não é apenas uma implementação técnica, ela também é a implementação cul-
tural e organizacional.
e. O uso de testes automatizados é fundamental, pois a automação em um servidor de
IC tira a responsabilidade dos desenvolvedores verificarem se há erros no código que
escrevem para o projeto e que enviam através de commits para o repositório.

COMENTÁRIO
Jenkins é um automatizador de tarefas, assim como o Travis e GitLab é a interface que
gerencia muitos recursos adicionais do Git.
“A Integração Contínua (CI) é o processo de automatizar a criação e o teste de código toda
vez que um membro da equipe entrega alterações no controle de versão. O CI incentiva
os desenvolvedores a compartilharem seus códigos e testes de unidade mesclando suas
alterações em um repositório de controle de versão compartilhado após cada pequena con-
clusão de tarefa. O código de confirmação aciona um sistema de compilação automatizado
para capturar o código mais recente do repositório compartilhado e para construir, testar e
validar a branch principal.”
20m

Testes automatizados (Automated tests)

Testes automatizados são testes que podem ser executados sem a necessidade de inter-
venção humana de maneira repetitiva, a qualquer momento.
Normalmente tem-se que escrever um script para testar algumas afirmações ou validar o
comportamento do seu aplicativo.
O script é então executado por uma máquina que fornece os resultados como uma saída.
O teste automatizado é uma parte essencial do CI, mas não é suficiente por si só.

Entrega contínua (Continuous delivery)

É uma extensão da integração contínua para garantir que se possa liberar novas altera-
ções para os clientes rapidamente e de maneira sustentável.
ANOTAÇÕES

www.grancursosonline.com.br 3
CONHECIMENTOS ESPECÍFICOS
Gitlab
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Isso significa que, além de automatizar os testes, também se automatiza o processo de


liberação e pode-se implantar o aplicativo a qualquer momento;
Em teoria, com a entrega contínua, pode-se decidir entregar diariamente, semanalmente,
quinzenalmente, ou o que for adequado às necessidades comerciais. No entanto, se real-
mente deseja-se obter os benefícios da entrega contínua, implanta-se na produção o mais
cedo possível para ter certeza de liberar pequenos lotes que sejam fáceis de solucionar em
caso de um problema.

Implantação Contínua (Continuous deployment)

A implantação contínua vai um passo além da entrega contínua.


Com essa prática, todas as alterações que passam por todos os estágios do pipeline de
produção são liberadas para os clientes.
Não há intervenção humana e somente um teste com falha impedirá que uma nova
mudança seja implantada em produção.
A implantação contínua é uma excelente maneira de acelerar o ciclo de feedback com os
clientes e tirar a pressão da equipe, já que não há mais um dia de implantação. Os desenvol-
vedores podem se concentrar na criação de software, e eles veem o seu trabalho implantado
minutos após terem terminado de trabalhar nele.
ANOTAÇÕES

www.grancursosonline.com.br 4
CONHECIMENTOS ESPECÍFICOS
Gitlab
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. e

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 5
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GITLAB II

RELEMBRANDO
O Gitlab começa como uma interface online para se trabalhar com o Git e vai evoluindo
com a adição de ferramentas. De modo que atualmente é possível fazer a integração con-
tínua por CI/CD.

CI/CD

GitLab CI/CD é uma ferramenta para desenvolvimento de software que utiliza as meto-
dologias contínuas:

• Integração Contínua (CI)


• Entrega Contínua (CD)
• Implantação Contínua (CD)

O método contínuo de desenvolvimento de software consiste em criar, testar e implantar


continuamente as alterações de código de forma interativa, visando diminuir o espaço entre
a codificação e o cliente final.
Este processo ajuda a diminuir a ocorrência de erros no código, consequentemente, dimi-
nui o tempo de entrega do código e o esforço humano, desde o desenvolvimento até a imple-
mentação do código.
Contudo, existem sistemas parcialmente prontos, como é o caso do GitLab, que podem
reduzir o tempo de produção do código.
Então, o que é a integração contínua? Pensemos o seguinte, existe um aplicativo que
o código está armazenado no GitLab, OS desenvolvedores vão enviando as alterações de
código várias vezes ao dia. Para cada post no repositório, é possível criar um conjunto de
script que vai construir e testar o aplicativo automaticamente, isso elimina a ocorrência de
erro humano.
ANOTAÇÕES

www.grancursosonline.com.br 1
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os testes feitos garantirão que as alterações sempre sejam aprovadas e que as diretrizes
estabelecidas serão cumpridas.
5m
O próprio GitLab utiliza integração contínua.
Entrega contínua é um passo a mais da integração contínua. Aqui, além das coisas que são
feitas automaticamente. É possível fazer implementações manuais. Após a parte feita pelo aplica-
tivo de forma automática, existe a necessidade de análise humana acerca da implantação ou não.
Portanto, o app faz o build, o teste, gera uma versão fechada, mas não implanta no
ambiente de desenvolvimento.
Já a implantação contínua consiste na implantação automática via software, sem inter-
venção humana. Porém, tudo isso depende do tipo do software, da categoria, e da maturi-
dade da equipe.

GITLAB CI/CD

Esta é a parte do GitLab que se usa para fazer essas integrações contínuas. Contudo, é
importante saber que existem outros aplicativos que são especialistas nessa parte de aplica-
ções contínuas.

Abaixo, o fluxo de atividades do GitLab.


ANOTAÇÕES

www.grancursosonline.com.br 2
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

É possível que o processo seja inteiramente automático ou que ele necessite de confirma-
ção humana em alguma etapa, conforme a programação escolhida. Contudo, vale saber que a
necessidade manual não deriva de incapacidade de automação, e sim de escolha de segurança.
De uma forma um pouco mais detalhada, tem-se a imagem abaixo, que deve ser
lida com atenção.
10m

PIPELINES CI/CD

• Os pipelines (“oleodutos” ou “canos”) compreendem:


– Jobs (trabalhos), que definem o que fazer. Por exemplo, jobs que compilam ou
testam código;
– Stages (estágios) que definem quando executar os jobs. Por exemplo, stages que
executam testes após stages que compilam o código;

Os pipelines são os componentes de nível mais alto da integração contínua e da imple-


mentação contínua.
ANOTAÇÕES

www.grancursosonline.com.br 3
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Após definir um job, ele será colocado em determinado stage, que é a sequencia de ope-
rações que o app vai fazer.

• Os jobs são executados por runners. Vários Jobs no mesmo stage são executados em
paralelo, se houver runners simultâneos suficientes:
Os runners serão executados pelas máquinas. Atualmente, o trabalho é feito com imagens
docker, delas são extraídas o “ativo” gerado e o aplicativo segue para o passo seguinte.
– Se todos os jobs em um stage forem bem-sucedidos, o pipeline passará para o pró-
ximo stage;
– Se algum job em um stage falhar, o próximo stage não é (geralmente) executado e
o pipeline termina antecipadamente.

Este encerramento antecipado é conhecido pela expressão informal “quebrar o build”.


No geral, os pipelines são executados automaticamente e não requerem intervenção depois
de criados. No entanto, é possível interagir manualmente com ele e definir que não se deve
“startar” (iniciar) automaticamente.
15m

• Um pipeline típico pode ter quatro estágios, executados na seguinte ordem:


– Um stage build, com um job chamado compile;
– Um stage test, com dois jobs chamados test1 e test2;
– Um stage staging, com um job chamado deploy-to-stage;
– Um stage production, com um job chamado deploy-to-prod;

TIPOS DE PIPELINES

• Os pipelines podem ser configurados de várias maneiras:


– Os pipelines básicos executam tudo em cada estágio simultaneamente, ao termi-
nar todos, segue para os próximos estágios;
– Os pipelines do Directed Acyclic Graph Pipeline (DAG) são baseados em rela-
cionamentos entre trabalhos e podem ser executados mais rapidamente do que os
pipelines básicos;
– Os pipelines de merge request são executados apenas para solicitações de merge
request (em vez de para cada commit);
ANOTAÇÕES

www.grancursosonline.com.br 4
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Merge request é um período mais próximo do ponto em que o código está pronto,
pois algumas ferramentas cobram por execução e isso encarece o processo.
– Os pipelines de merge results são pipelines de merge request que agem assim
que as alterações da ramificação de origem já tiverem sido mescladas na ramifica-
ção de destino. Em outras palavras, é quando termina o merge request.
– Os merges trains usam pipelines de merge result para enfileirar merges, um após o outro;
– Os pipelines pai-filho dividem pipelines complexos em um pipeline pai, que pode
acionar vários subpipelines filhos, todos executados no mesmo projeto e com o
mesmo SHA. Essa arquitetura de pipeline é comumente usada para mono-repôs;
mono-repôs: é quando em um repositório apenas contém o back end e o front end
– Os pipelines de vários projetos combinam pipelines para diferentes projetos juntos;

ATENÇÃO
Recomenda-se que a preocupação do estudante esteja nos casos mais básicos
20m

COMO CONFIGURAR UM PIPELINE?

Os pipelines, seus jobs e stages de componentes são definidos no arquivo de configura-


ção do pipeline CI/CD, para cada projeto;

• Os Jobs são o componente básico de configuração;


• Os stages são definidos usando a palavra-chave “stages”.

VISUALIZAÇÃO DO PIPELINE

www.grancursosonline.com.br 5
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

INTERAÇÃO MANUAL NO PIPELINE

Observa-se a interação manual na parte de produção (production). É possível ver


que o símbolo é um “play”.

PASSO A PASSO

Para usar o GitLab CI/CD:

• Certifique-se de ter executores (runners) disponíveis para executar seus trabalhos;


• Crie um arquivo.gitlab-ci.yml na raiz do seu repositório. Nele, é possível definir vários
Jobs, com o nome desejado, conforme imagem abaixo.

Nesses Jobs, define-se qual é o stage que se deseja que o trabalho seja realizado. Paós,
define-se o script, ou seja, qual atividade deve ser realizada.

www.grancursosonline.com.br 6
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Outra possibilidade, é definir uma imagem de execução.

A imagem será usada na forma de container, mas isso não quer dizer que a aplicação
será containerizada.
25m

Nessa imagem, é possível ler as informações que o sistema oferece: status, número
do pipeline etc. Veja que ele informa que já fez o build, sinalizado pelo símbolo do “ok”, em
verde. Neste momento, estão sendo rodados os dois testes em paralelo. O deploy só será
habilitado quando as duas tarefas em execução forem bem-sucedidas.
Por fim, um exemplo de relatório.
ANOTAÇÕES

www.grancursosonline.com.br 7
CONHECIMENTOS ESPECÍFICOS
Gitlab II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

CI – INTEGRAÇÃO CONTÍNUA

CI – CONTINUOUS INTEGRATION

“A Integração Contínua (CI) é o processo de automatizar a criação e o teste de código


toda vez que um membro da equipe entrega alterações no controle de versão. O CI incentiva
os desenvolvedores a compartilharem seus códigos e testes de unidade mesclando suas
alterações em um repositório de controle de versão compartilhado após cada pequena con-
clusão de tarefa. O código de confirmação aciona um sistema de compilação automatizado
para capturar o código mais recente do repositório compartilhado e para construir, testar e
validar a branch principal.”
https://martinfowler.com/articles/continuousIntegration.html

O CI surge da necessidade de demanda para desenvolver softwares que não gerem


conflitos e erros entre versões. No CI, cada desenvolvedor vai trabalhando e enviando seu
código para uma ramificação do projeto, do código-fonte e o ferramental, automaticamente,
vai construir versos novas desses softwares, o que deve acontecer, de forma continua, pelo
menos uma vez por dia.
5m

Testes automatizados (Automated tests)

• Testes automatizados são testes que podem ser executados sem a necessidade de
intervenção humana de maneira repetitiva, a qualquer momento;
• Normalmente tem-se que escrever um script para testar algumas afirmações ou validar
o comportamento do seu aplicativo;
• O script é então executado por uma máquina que fornece os resultados como uma saída;
• O teste automatizado é uma parte essencial do CI, mas não é suficiente por si só.

Entrega contínua (Continuous delivery)

• É uma extensão da integração contínua para garantir que se possa liberar novas alte-
rações para os clientes rapidamente e de maneira sustentável;
• Isso significa que, além de automatizar os testes, também se automatiza o processo
de liberação e pode–se implantar o aplicativo a qualquer momento;
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Em teoria, com a entrega contínua, pode-se decidir entregar diariamente, semanal-


mente, quinzenalmente, ou o que for adequado às necessidades comerciais.
• No entanto, se realmente deseja-se obter os benefícios da entrega contínua, implan-
ta-se na produção o mais cedo possível para ter certeza de liberar pequenos lotes que
sejam fáceis de solucionar em caso de um problema;

Hoje em dia, tem-se a ideia de entregar pequenos lotes e corrigindo-os na maneira que
os problemas começassem a surgir. A interação continua faz os testem e entrega continua-
mente no código - fonte e faz os testes de maneira automatizada.

IMPLANTAÇÃO CONTÍNUA (CONTINUOUS DEPLOYMENT)

• A implantação contínua vai um passo além da entrega contínua;


• Com essa prática, todas as alterações que passam por todos os estágios do pipeline
• de produção são liberadas para os clientes;
• Não há intervenção humana e somente um teste com falha impedirá que uma nova
• mudança seja implantada em produção;
• A implantação contínua é uma excelente maneira de acelerar o ciclo de feedback
• com os clientes e tirar a pressão da equipe, já que não há mais um dia de
• implantação. Os desenvolvedores podem se concentrar na criação de software, e
• eles veem o seu trabalho implantado minutos depois de terem terminado de
• trabalhar nele;
• O pipeline passa pelo teste, pela fase de desenvolvimento, piloto, homologação, ino-
vação e vai para a produção automaticamente.
• O teste para a ser mais essencial porque o desenvolvedor fez uma entrega do código
que vai passar pelas fases de desenvolvimento e vai ser implantado em produção
automaticamente, sem intervenção humana.
10m
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ATENÇÃO
Em geral, essas são fases feitas sempre nos softwares, a automatização das tarefas e as
ferramentais é chamada de integração contínua, implantação contínua.

Requisitos da integração contínua

• A equipe precisará escrever testes automatizados para cada novo recurso, melhoria
ou correção de bug;
• É necessário um servidor de integração contínua que possa monitorar o repositório
principal e executar os testes automaticamente para cada novo comitê enviado;
• Os desenvolvedores precisam mesclar suas alterações com a maior frequência possí-
vel, pelo menos uma vez por dia;

Benefícios da integração contínua

• Menos bugs são enviados para produção à medida que os erros são capturadas
• antecipadamente pelos testes automatizados;
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Construir o a versão de implantação é fácil, pois todos os problemas de integração foram


• resolvidos cedo;
• Menos “troca de contexto”, pois os desenvolvedores são alertados assim que quebram a
• compilação e podem trabalhar para corrigi-la antes de passar para outra tarefa;
• Os custos de teste são reduzidos drasticamente – o servidor de CI pode executar
• centenas de testes em questão de segundos;
• A equipe de controle de qualidade passa menos tempo testando e pode se concentrar
• em melhorias significativas na cultura de qualidade;

Requisitos da entrega contínua

• É necessário uma base sólida em integração contínua e sua suíte de testes precisa
• cobrir o suficiente da sua base de código;
• Implantações precisam ser automatizadas. O acionador ainda é manual, mas uma
• vez iniciada a implantação, não deve haver necessidade de intervenção humana;
• A equipe provavelmente precisará incluir sinalizadores de funcionalidades para
• que as funcionalidades incompletas não afetem os clientes na produção;
15m

ATENÇÃO
Tem-se os índices do percentual de cobertura de qualidade de código.

Benefícios da entrega contínua

• A complexidade da implantação de software é removida. O time não precisa mais


• passar dias se preparando para uma implantação;
• Pode-se implantar com mais frequência, acelerando assim o ciclo de feedback
• com seus clientes;
• Há muito menos pressão nas decisões para pequenas mudanças, incentivando,
• portanto, a interação mais rápida.

Requisitos da implantação contínua

• A cultura de teste precisa estar no seu melhor. A qualidade do conjunto de testes


• determinará a qualidade dos seus lançamentos;
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O processo de documentação precisará acompanhar o ritmo das implantações;


• A marcação de funcionalidades se torna parte inerente do processo de liberação
• de mudanças significativas para garantir que se possa coordenar com outros
• departamentos (Suporte, Marketing, RP...);

Se houver alguma funcionalidade incompleta, deve ser marcada ou exibida no usu-


ário final.

Benefícios da implantação contínua

• Pode-se desenvolver mais rápido, pois não há necessidade de pausar o


• desenvolvimento para implantações. Os pipelines de implantação são acionados
• automaticamente para cada alteração;
• As liberações são menos arriscadas e mais fáceis de corrigir em caso de problema,
• à medida que se implanta pequenos lotes de alterações;
• Os clientes veem um fluxo contínuo de melhorias e a qualidade aumenta a cada
• dia, em vez de todo mês, trimestre ou ano;

Proteção da qualidade com construções contínuas e automação de testes

• Construções contínuas: construir o projeto assim que uma alteração é feita.


• Idealmente, o delta entre cada compilação é um único conjunto de mudanças;
• Automação de teste: validação programática do software para garantir a
• qualidade. Os testes podem iniciar ações no software a partir da interface do
• usuário ou da camada de serviços de back-end.
• A integração contínua combina construções contínuas com automação de testes
• para garantir que cada construção também avalie a qualidade da base de código.
20m

Se tem o commit, é feito a construção.

Testes no CI: testes unitários, API e funcionais

• As execuções de IC têm duas fases principais;


ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

1. O primeiro passo garante que o código seja compilado. (Ou, no caso de linguagens
interpretadas, simplesmente une todas as partes.)
2. A segunda etapa garante que o código funcione conforme projetado. A maneira mais
certa de fazer isso é com uma série de testes automatizados que validam todos os níveis
do produto;

TESTES UNITÁRIOS

• Benefícios: Fácil de escrever, executar rapidamente, modelar de perto a


• arquitetura da base de código;
• Desvantagens: os testes unitários apenas validam os principais componentes do
• software; eles não refletem fluxos de trabalho do usuário que geralmente
• envolvem vários componentes trabalhando juntos;

Teste unitário é aquele que vai testar uma função específica.

Testes de API

• Um bom software é modular, o que permite uma separação mais clara do


• trabalho em várias aplicações. As APIs são os pontos finais nos quais diferentes
• módulos se comunicam entre si, e os testes da API os validam fazendo chamadas
• de um módulo para outro.
• Benefícios: Geralmente fácil de escrever, executar rapidamente e pode facilmente
modelar como os aplicativos irão interagir uns com os outros.
• Desvantagens: em códigos simples, os testes de API podem imitar alguns testes
• de unidade;

Um tipo de teste de integração, para verificar se o componente e a comunicação estão


funcionando corretamente.

Testes Funcionais
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
CI – Integração Contínua
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Os testes funcionais funcionam em áreas maiores da base de código e modelam fluxos


de trabalho de usuários. Em aplicativos da Web, por exemplo, HTTPUnit e Selenium
interagem diretamente com a interface do usuário para testar o produto.
• Benefícios: mais propensos a encontrar erros, pois eles imitam as ações do usuário e
testam a interoperabilidade de vários componentes.
• Desvantagens: mais lentas que os testes de unidade e, às vezes, relatam falsos
• negativos devido à latência da rede ou a uma interrupção momentânea em algum
• ponto da pilha tecnológica;

Esse tipo de teste vai imitar o usuário, vai fazer um fluxo de trabalho. No entanto, há dois
problemas principais: a demora para processar e testar o fluxo e a indisponibilidade, sistema
fora do ar, que pode gerar um falso negativo e a possiblidade de não fazer a integração.

DIRETO DO CONCURSO
1. (CESPE/2015/TCU/AUDITOR FEDERAL DE CONTROLE EXTERNO - TECNOLO-
GIA DA INFORMAÇÃO) Acerca de integração contínua e entrega contínua, julgue o
próximo item.
Para que a prática de integração contínua seja eficiente, é necessário parametrizar e
automatizar várias atividades relativas à gerência da configuração, não somente do có-
digo- fonte produzido, mas também de bibliotecas e componentes externos.

COMENTÁRIO
Deve ter um fluxo de trabalho mais automatizado possível para ter um a integração con-
tinua e que ela funcione de uma maneira bem sucedida.

GABARITO
1. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
ANOTAÇÕES

preparada e ministrada pelo professor Tiago Lage.


A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROTOCOLO HTTP

• Hypertext Transfer Protocol (HTTP) é um protocolo de camada de aplicação para


transmissão de documentos hipermídia, como o HTML.
• Foi desenvolvido para comunicação entre navegadores web e servidores web, porém
pode ser utilizado para outros propósitos também.
• Segue um modelo cliente-servidor clássico, em que um cliente abre uma conexão,
executa uma requisição e espera até receber uma resposta.
• É também um protocolo sem estado ou stateless protocol, que significa que o servidor
não mantém nenhum dado entre duas requisições (state);

ATENÇÃO
Há questões de prova baseadas em cada um dos tópicos apresentados. O protocolo HTTP
é um protocolo da camada OSI.
5m
HTTP, FTP e SMTP são da camada de aplicação. O HTTPS é uma versão segura do HTTP.
Todos os conteúdos que se vê na internet são transmitidos a partir do protocolo HTTP.
O protocolo HTTP não mantém uma conexão ativa.
10m
HTTP é um assunto recorrente em provas.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ENTENDA O CASO

Você, no seu navegador, digita http://www.grancursos.com. A solicitação vai para a inter-


net, que contata o servidor web, que retorna o page.html, fazendo referência a uma série
de outros conteúdos. Clientes-servidores se comunicam, trocando mensagens no lugar de
fluxos de dados, ou seja, são solicitadas mensagens individuais, a exemplo de uma imagem,
um vídeo, um anúncio etc. Apesar disso, é possível retornar um documento que possa fazer
referência a outros conteúdos, como no exemplo apresentado acima, mas cada um desses
serão requisições individuais dos conteúdos. O protocolo mudou muito pouco desde seu
desenvolvimento, pois protocolos são difíceis de serem alterados.
15m
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Entendendo o caso

As mensagens são chamadas de solicitações ou requests, e as retornadas são cha-


madas de responses. Apesar de terem surgido tecnologias para tentar superar o HTTP,
nenhuma teve êxito, por conta da simplicidade do protocolo já utilizado. No começo da web,
uma página era atualizada por inteiro. Depois, por meio de algumas APIs, a página poderia
ser atualizada por partes.

Componentes de sistemas baseados em HTTP

• O HTTP é um protocolo cliente-servidor: as requisições são enviadas por uma enti-


dade, o agente-usuário (ou um proxy em nome dele);
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A maior parte do tempo, o agente-usuário é um navegador da Web, mas pode ser qual-
quer coisa, a exemplo de um robô que varre a Web para preencher e manter um índice
de mecanismo de pesquisa e coletar informações;
• Cada requisição individual é enviada para um servidor, que lidará com isso e fornecerá
um resultado, chamado de resposta;
• Entre a solicitação e a resposta, existem várias entidades, designadas coletivamente
como proxies, que executam operações diferentes e atuam como gateways (interme-
diários) ou caches, por exemplo;

ATENÇÃO
O proxy é utilizado comumente para bloquear sites específicos (em empresas e escolas, é
bastante comum sua utilização para esse fim).
20m

Cliente: o agente-usuário

• O agente-usuário é qualquer ferramenta que age em nome do usuário;


• Essa função é predominantemente realizada pelo navegador Web;
• O navegador sempre é a entidade que inicia as requisições, nunca o lado do servidor
(embora alguns mecanismos tenham sido adicionados ao longo dos anos para simular
mensagens iniciadas pelo servidor);

ATENÇÃO
O navegador envia uma requisição HTTP para buscar um documento da web. É realiza-
da uma análise e pode ter uma série de outras referências, e o navegador realiza outras
requisições para receber esses elementos. É por isso que, quando a internet está lenta, a
página solicitada é apresentada em partes, pois o primeiro documento recebido é o HTML,
que é o texto da página.
25m
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O servidor de páginas Web

• Do outro lado do canal de comunicação está o servidor que serve o documento requi-
sitado pelo usuário;
• Um servidor se apresenta virtualmente apenas como uma máquina: isso porque o ser-
vidor pode ser uma coleção de servidores dividindo a carga (através de uma técnica
chamada balanceamento de carga) ou também como um programa complexo que
acessa outros servidores (como um cache, um servidor de banco de dados, servidores
de e-commerce (lojas virtuais) etc.), gerando todo ou parte do documento solicitado;
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Proxies

• Entre o navegador Web e o servidor, vários computadores e máquinas transmitem as


mensagens HTTP;
• Devido à estrutura em camadas da pilha Web, a maioria dessas máquinas operam em
alguma das camadas: de transporte, de rede ou física, sendo transparente na camada
da aplicação HTTP e potencialmente exercendo um grande impacto na performance;
• Essas máquinas que operam na camada de aplicação são normalmente conhecidas
como proxies (representantes ou procuradores etc.);

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula prepa-
rada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES

A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo minis-
trado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclusiva deste
material.

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROTOCOLO HTTP II

Aspectos básicos do HTTP

• HTTP é simples;
• HTTP é extensível;
• HTTP não tem estado, mas tem sessões;
• HTTP e conexões;

O protocolo é baseado em textos e, por esse motivo, é simples. Ele foi aumentado com
o HTTP2, para melhorar questões de performance e segurança. Isso aconteceu após come-
çarem a ser realizadas compras pela internet. Com a movimentação de cartões, houve a
necessidade da realização da encriptação.
Ele é bastante extensível: há uma série de cabeçalhos de envio e de respostas. Não é
o conteúdo, mas são alguns metadados adicionais que identificam a requisição. Podem ser,
inclusive, criados novos cabeçalhos, estendendo para novos casos de usos.
Suponhamos que alguém entre em um site, por exemplo, e insira os itens em um carrinho
de compras. Como o servidor saberá que se trata da mesma pessoa?
5m
Na primeira requisição, serão digitados o usuário e senha e será enviado um cookie, por
meio de um cabeçalho, que é como um “protocolo de atendimento”. Na próxima requisição,
o servidor passará esse protocolo. Ele mantém sessões através dos cookies.
O HTTP utiliza o protocolo TCP. Também há o UDP, mas ele não é confiável. Protocolos
de streaming de vídeo, por exemplo, utilizam o UDP. Porém, o HTTP precisa da garantia de
entrega das informações, logo, de um protocolo seguro e, por isso, utiliza o TCP.
O HTTP 2.0 permite que haja multiplexação de mensagens, permitindo que seja feita
uma requisição e que o servidor envie vários arquivos de uma única vez. Ele é bastante
recente e seu uso não é tão popular.

O que pode ser controlado pelo HTTP


10m

• Cache;
• Relaxamento das restrições na origem;
• Autenticação;
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Proxy e tunelamento;
• Sessões;

O cache permite que se possa ter o conteúdo sem a necessidade de atualização em cada
requisição.
Quando se acessa um determinado site, ele pode fazer outras requisições. O pessoal
utiliza de forma maliciosa, direcionando para outros sites para roubar dados etc. O HTTP
definiu um tipo de header que define se é possível ou não realizar requisições para outros
sites. Assim, o site precisa autorizar esses acessos. Caso não autorize, não será exibido o
conteúdo dessas outras páginas.
A autenticação pelo protocolo HTTP não é mais recomendada. Ela funcionava da seguinte
maneira: ao acessar uma página, era solicitado e enviado o usuário e senha. Na requisição
para o servidor, era enviado o usuário e senha. A cada nova requisição, era enviado nova-
mente o usuário e senha para o servidor, gerando muito trânsito de usuário e senha, o que
foi considerado não seguro.
15m
Quando se acessa um site, com usuário e senha, o site devolve um token e só o transita.
No tunelamento, é possível encriptar informações ao passar por esse “túnel”. O proxy é
importante para bloquear determinados conteúdos de acordo com a necessidade.

Fluxo HTTP

1) Abre uma conexão TCP: A conexão TCP será usada para enviar uma requisição, ou
várias, e receber uma resposta. O cliente pode abrir uma nova conexão, reusar uma conexão
existente ou abrir várias conexões aos servidores;
2) Envia uma mensagem HTTP: mensagens HTTP (antes do HTTP/2.0) são legíveis às
pessoas. Com o HTTP/2.0, essas mensagens simples são encapsuladas dentro de quadros
(frames), tornando-as impossíveis de se ler diretamente, mas o princípio se mantém o mesmo.

Host: o local no qual foi solicitado o conteúdo.


ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Accept-Language: língua retornada. No caso do exemplo, francês.

3) Lê a resposta do servidor:
A resposta retorna o código de operação. Nesse caso, OK, a data do conteúdo, o servi-
dor, a última modificação, a tag, o tipo de conteúdo, o tamanho do conteúdo e os ranges –
nesse caso, bytes e a “caixa”, que se refere ao conteúdo.
20m
4) Fecha ou reutiliza a conexão para requisições futuras;
No geral, ele fecha a conexão.

Mensagens HTTP

• Requisições:
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Respostas:

APIs baseadas no HTTP

• A API mais utilizada construída sobre o HTTP é a XMLHttpRequest, que pode ser
usada para trocar dados entre um user agent (en-US) e um servidor;

Inicialmente, o único agente que era permitido de realizar requisições do lado do cliente
era o navegador. Por volta dos anos 1990, houve a necessidade de uma web um pouco mais
dinâmica, pois o modelo inicial obrigava o trânsito de uma página a outra. No momento, é
realizada via javascript.
25m

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROTOCOLO HTTP III

DIRETO DO CONCURSO
1. (FGV/BANESTES/ANALISTA EM TECNOLOGIA DA INFORMAÇÃO/SUPORTE E IN-
FRAESTRUTURA/2021) O protocolo HTTP define um conjunto de métodos de requisi-
ção responsáveis por indicar a ação a ser executada para um dado recurso. Um método
HTTP é denominado idempotente se:
a. as requisições em algum momento causam danos ou efeitos colaterais irreversíveis
no servidor;
b. as requisições com cabeçalhos e parâmetros diferentes causam uma mesma mudança
no estado do recurso;
c. toda requisição estabelecer um túnel para o servidor identificado pelo recurso
de destino;
d. o código de status for o mesmo entre requisições que aplicam modificações parciais
em um recurso;
e. uma requisição idêntica puder ser feita uma ou mais vezes em sequência com o
mesmo efeito enquanto deixa o servidor no mesmo estado.

COMENTÁRIO

Idempotente

• Entre o navegador Web e o servidor, vários computadores e máquinas transmitem as


mensagens HTTP;
• Devido à estrutura em camadas da pilha Web, a maioria dessas máquinas operam em
alguma das camadas: de transporte, de rede ou física, sendo transparente na camada
da aplicação HTTP, e potencialmente exercendo um grande impacto na performance;
• Essas máquinas que operam na camada de aplicação são normalmente conhecidas
como proxies (representantes ou procuradores etc.);

GET /pageX HTTP/1.1 é idempotente. Chamado diversas vezes em sequência, ele vai
retornar o mesmo resultado:
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

POST /add_row HTTP/1.1 não é idempotente. Se ele for chamado diversas vezes, ele
adicionará novas entradas:
5m

DELETE /idX/delete HTTP/1.1 é idempotente, mesmo que o código de status mude entre
requisições:

ATENÇÃO
Idempotência é a possibilidade de repetir o método. Os métodos idempotentes precisam
ser seguros. Para os métodos que não são idempotentes, o navegador pergunta se se
tem certeza que deseja repetir a solicitação do método, pois pode ser perigoso (aviso de
reenvio de formulário).

Seguro

• Um método HTTP é seguro se ele não altera o estado do servidor;


• Em outras palavras, um método é seguro se ele leva a uma operação de somente leitura;
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Diversos métodos de HTTP são seguros: GET, HEAD ou OPTIONS;


• Todos os métodos seguros também são idempotentes, mas nem todos os métodos
idempotentes são seguros;
• Por exemplo, PUT e DELETE são ambos idempotentes, entretanto são inseguros;
• Uma chamada a um método seguro, não alterando o estado do servidor:

GET /pageX.html HTTP/1.1

• Uma chamada a um método não seguro, que pode alterar o estado do servidor:

POST /pageX.html HTTP/1.1

• Uma chamada a um método idempotente, mas não seguro:

DELETE /idX/delete HTTP/1.1


10m

ATENÇÃO
Se sua operação for segura, utilize o método GET. Se ela for não segura, utilize os métodos
POST, DELETE etc.

2. (FGV/BANESTES/ANALISTA EM TECNOLOGIA DA INFORMAÇÃO/DESENVOLVI-


MENTO DE SISTEMAS/2021) No contexto dos métodos disponíveis pelo protocolo
HTTP, a lista que contém apenas métodos válidos é:
a. GET, POST, PUT;
b. GET, PUT, SEND;
c. POST, READ, WRITE;
d. PUT, SET, WRITE;
e. SEND, INPUT, OUTPUT.

COMENTÁRIO
Os métodos SEND, READ, WRITE, SET, INPUT e OUTPUT não fazem parte da lista de
métodos válidos.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Métodos de requisição HTTP

• GET – O método GET solicita a representação de um recurso específico. Requisições


utilizando o método GET devem retornar apenas dados.
• HEAD – O método HEAD solicita uma resposta de forma idêntica ao método GET,
porém sem conter o corpo da resposta;
• POST – O método POST é utilizado para submeter uma entidade a um recurso espe-
cífico, frequentemente causando uma mudança no estado do recurso ou efeitos
colaterais no servidor;
• PUT – O método PUT substitui todas as atuais representações do recurso de destino
pela carga de dados da requisição;
• DELETE – O método DELETE remove um recurso específico;
• CONNECT – O método CONNECT estabelece um túnel para o servidor identificado
pelo recurso de destino;
• OPTIONS – O método OPTIONS é usado para descrever as opções de comunicação
com o recurso de destino;
• TRACE – O método TRACE executa um teste de chamada loopback junto com o cami-
nho para o recurso de destino;
• PATCH – O método PATCH é utilizado para aplicar modificações parciais em um recurso.

3. (UFMT/UFMT/TECNÓLOGO EM REDES DE COMPUTADORES/2021) A coluna da es-


querda apresenta protocolos, e a da direita, a sua porta padrão, conforme a IANA. Nu-
mere a coluna da direita de acordo com a da esquerda.
15m

1) HTTP
2) HTTPS
3) SSH
4) DNS

 (  ) 443
 (  ) 80
 (  ) 53
 (  ) 22
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Marque a sequência correta


a. 2, 1, 4, 3
b. 2, 1, 3, 4
c. 3, 4, 1, 2
d. 4, 3, 2, 1

4. (UFMT/UFMT/TECNÓLOGO EM REDES DE COMPUTADORES/2021) A coluna da es-


querda apresenta códigos de status de respostas do protocolo HTTP, e a da direita, as
suas definições. Numere a coluna da direita de acordo com a da esquerda.

1) 403
2) 301
3) 404
4) 500

 (  ) Movido (Moved Permanently)


 (  ) Proibido (Forbidden)
 (  ) Erro interno do servidor (Internal Server Error)
 (  ) Não encontrado (Not Found)

Marque a sequência correta


a. 2, 1, 4, 3
b. 1, 2, 3, 4
c. 3, 4, 1, 2
d. 2, 4, 1, 3

Códigos de status de respostas HTTP

• Os códigos de status das respostas HTTP indicam se uma requisição HTTP foi corre-
tamente concluída. As respostas são agrupadas em cinco classes:
– Respostas de informação (100-199);
– Respostas de sucesso (200-299);
– Redirecionamentos (300-399);
– Erros do cliente (400-499);
– Erros do servidor (500-599);
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
É necessário saber, minimamente, as cinco classes em que são agrupados os códigos
de status.
20m

5. (IF SUL RIO-GRANDENSE/IF SUL RIO-GRANDENSE/PROFESSOR/INFORMAÇÃO


E COMUNICAÇÃO/2021) Existem oito métodos definidos no protocolo HTTP que são:
GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS e CONNECT. Esses métodos
indicam a ação a ser realizada no recurso especificado. Analise as afirmações abaixo
sobre os métodos GET e POST:

I – GET deve ser usado para obter dados.


II – POST deve ser usado para enviar dados para serem processados.
III – As solicitações GET aceitam que os visitantes façam bookmark da página; as
POST não.
IV – Com o POST, o parâmetro é limitado ao que se pode colocar na linha de solicitação.
Estão corretas apenas as afirmativas

a. I e II, apenas.
b. I, II, III e IV.
c. I, II e III, apenas
d. II, III e IV, apenas.

6. (UFMT/UFMT/TECNÓLOGO EM REDES DE COMPUTADORES/2021) A coluna da es-


querda apresenta aplicações da internet, e a da direita, seus protocolos da camada de
aplicação. Numere a coluna da direita de acordo com a da esquerda.

 (  ) NFS 1. Correio Eletrônico


 (  ) SMTP 2. Acesso a terminal remoto
 (  ) HTTP 3. Web
 (  ) Telnet 4. Servidor remoto de arquivos
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Marque a sequência correta.


a. 2, 1, 3, 4
b. 3, 4, 1, 2
c. 4, 1, 3, 2
d. 2, 3, 1, 4

7. (INSTITUTO AOCP/UFPB/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2019) O


HTTP (HyperText Transfer Protocol) foi especificado na RF2616 e é um protocolo sim-
ples do tipo solicitação/ resposta. Tem um funcionamento básico de especificação de
quais mensagens o cliente tem a possibilidade de enviar para o servidor e quais são as
respostas que este recebe novamente. Com base no exposto, a qual camada do mode-
lo OSI esse protocolo pertence?
a. Apresentação.
b. Sessão.
c. Aplicação.
d. Rede.
e. Enlace.

HTTP

• Hypertext Transfer Protocol (HTTP) é um protocolo de camada de aplicação para


transmissão de documentos hipermídia, como o HTML.
• Foi desenvolvido para comunicação entre navegadores web e servidores web, porém
pode ser utilizado para outros propósitos também.
• Segue um modelo cliente-servidor clássico, onde um cliente abre uma conexão, exe-
cuta uma requisição e espera até receber uma resposta.
• É também um protocolo sem estado ou stateless protocol, que significa que o servidor
não mantém nenhum dado entre duas requisições (state).

O PULO DO GATO
Os tópicos das questões da presente aula são bastante comuns em provas.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Protocolo HTTP III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

GABARITO
1. e
2. a
3. a
4. a
5. c
6. c
7. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

WEB SOCKET – INTRODUÇÃO

WebSocket é um meio para estabelecer uma comunicação persistente entre o cliente e


o servidor. O WebSocket mantém a conexão aberta em tempo integral entre o servidor e o
cliente. Assim, caso surja um dado do servidor para o cliente ou do cliente para o servidor,
não será necessária qualquer ação das partes, uma vez que já estão conectados persistente-
mente. É exemplo de utilização WebSocket o placar virtual ao vivo de uma partida de futebol,
de sites de esportes, em que a ocorrência de um gol é uma informação enviada do servidor
para o cliente.
5m
WebSocket é um protocolo, descrito na especificação RFC 6455, fornece uma maneira
de trocar dados entre o navegador e o servidor através de uma conexão persistente.

Obs.: o HTTP difere-se do WebSocket porque não tem comunicação persistente. Após o
cliente requisitar uma resposta do servidor, o servidor processa o dado e envia ao
cliente, encerrando a comunicação; isso porque a comunicação não é persistente.

Depois que uma conexão de WebSocket é estabelecida, o cliente e o servidor podem


enviar os dados uns aos outros.
O WebSocket é especialmente excelente para serviços que exigem troca contínua de
dados, por exemplo, jogos online, sistemas de negociação em tempo real e assim por diante.

RFC 6455 - https://tools.ietf.org/html/rfc6455

“O protocolo WebSocket permite a comunicação bidirecional entre um cliente executando


código não confiável em um ambiente controlado para um host remoto que tenha optado por
comunicações desse código. O modelo de segurança usado é baseado em origem comu-
mente usado pelos navegadores da web.”

Obs.: inicia-se uma comunicação HTTP com o servidor, o que executa um Java script que
se comunica com o mesmo servidor ou com outro que seja autorizado. A partir daí, o
servidor reconhece que o cliente quer se comunicar por meio do serviço WebSocket.
Assim, o modelo de segurança é baseado em origem.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O protocolo consiste em um hand-shake de abertura seguido pelo envio de frames de


mensagens, operando sobre TCP.

Obs.: Hand-shake é um “aperto de mãos”, um acordo que encerra as “negociações” entre


servidor e cliente. Quando ocorre o hand-shake, a conexão é alterada para o modo
WebSocket. A partir de então, são trocados frames ou quadros de mensagem entre
o servidor e o cliente.
10m

O objetivo dessa tecnologia é fornecer um mecanismo para aplicativos baseados em


navegador que precisam de comunicação bidirecional com servidores e que não depende da
abertura de várias conexões HTTP (por exemplo, XMLHttpRequest ou e long polling).”
EXEMPLO
Para abrir uma conexão, é preciso criar um WebSocket usando o protocolo especial
ws na URL:
let socket = new WebSocket(“ws://exemplo.com”);
Na linha de código acima, há a declaração da variável socket, que cria o new WebSocket,
objeto que estará disponível no cliente; em seguida, em parênteses, há a especificação da
URL com que se deseja conectar.
Há também um wss:// que é um protocolo criptografado. É como o HTTPS para
WebSockets.

Obs.: a saber, o “s” adicional em wss e em HTTP corresponde a secure (“segurança”).

EVENTOS

Depois que o socket é criado, pode-se ouvir os eventos nele. Há um total de 4 eventos:

• open – conexão estabelecida;


• message – dados recebidos;
• error – erro de WebSocket;
• close – conexão fechada;

Para enviar dados usamos socket.send(data).


ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: o WebSocket é um protocolo simples de ser manejado. Ele é baseado na estratégia


de eventos, em que se registra funções de call-back para cada um dos eventos.

let socket = new WebSocket(“wss://exemplo.com/websocket”);


socket.onopen = function(e) {
alert(“[open] Conexão estabelecida, enviando dados ao servidor”);
socket.send(“Meu nome é Tiago”);
};
socket.onmessage = function(event) {
alert(`[message] Dados recebidos do servidor: ${event.data}`);
};
socket.onclose = function(event) {
if (event.wasClean) {
alert(`[close] Conexão fechada corretamente, código=${event.code}
razão=${event.reason}`);
} else {
// Ex.: Processo do servidor encerrou ou rede caiu
// event.code é geralmente 1006 neste caso
alert(‘[close] Conexão encerrada com erro’);
}
};
socket.onerror = function(error) {
alert(`[error] ${error.message}`);
};
15m

No exemplo acima, as linhas introduzidas por socket.onopen, socket.onmessage e


socket.onclose registram três funções para determinados eventos. As linhas introduzidas por
alert indicam a notificação que será retornada. Em caso de conexão encerrada, observável
em [close], é possível saber se ela foi encerrada corretamente ou se foi encerrada com erro.
O último agrupamento, introduzido por socket.onerror, é o registro para notificar a mensagem
de erro, caso a conexão tenha se encerrado com erro.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ABRINDO UM WEBSOCKET

Quando new WebSocket é criado, inicia-se um hand-shake HTTP (HTTPS para wss://).
Em termos abstratos, o navegador pergunta ao servidor: “Você suporta WebSocket?” E
se o servidor disser “sim”, a conversa continua no protocolo WebSocket, que não é HTTP.

Segue exemplo de solicitação de navegador para new WebSocket(“wss://exemplo.com.


br/chat”):
GET /chat
Host: exemplo.com.br
Origin: https://exemplo.com.br
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: Iv8io/9s+lYFgZWcXczP8Q==
Sec-WebSocket-Version: 13

• Origin – a origem da página do cliente. O WebSocket é de crossorigin por natureza.


Não há cabeçalhos especiais ou outras limitações. Os servidores antigos são inca-
pazes de lidar com o WebSocket de qualquer maneira, portanto, não há problemas
de compatibilidade. Mas o cabeçalho Origin é importante, pois permite que o servidor
decida se deve ou não falar WebSocket com este site.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Obs.: isto é, se a origem do site especificado em origin for fraudulenta, não haverá permis-
são de conexão por meio de WebSocket.

• Connection: Upgrade – sinaliza que o cliente gostaria de alterar o protocolo.


• Upgrade: websocket – o protocolo solicitado é “websocket”.
• Sec-WebSocket-Key – uma chave gerada aleatoriamente pelo navegador para
segurança.
• Sec-WebSocket-Version – versão do protocolo WebSocket, 13 é a atual.
20m

Se o servidor concordar em mudar para o WebSocket, ele deve enviar o código de


resposta 101:
101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: hsBlbuDTkk24srzEOTBUlZAlC2g=

Aqui, Sec-WebSocket-Accept é o Sec-WebSocket-Key recodificado, usando um algo-


ritmo especial. O navegador usa para garantir que a resposta corresponda à solicitação.
Posteriormente, os dados são transferidos usando o protocolo WebSocket.

DADOS WEBSOCKET

A comunicação WebSocket consiste em frames que podem ser enviados de ambos os lados:

• Frames de texto – contêm dados de texto que as partes enviam entre si.
• Frames de dados binários – contêm dados binários que as partes enviam entre si.
• Frames de ping/pong – são usados para verificar a conexão, enviados pelo servidor, o
navegador responde a eles automaticamente.
• Frame de conexão fechada – e alguns outros frames de serviço.

O navegador preocupa-se apenas com frames de texto ou binários.


WebSocket.send() pode enviar texto ou dados binários.
Os dados textuais sempre vêm como string. Para receber dados binários, pode-se esco-
lher entre os formatos Blob e ArrayBuffer.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

socket.bufferType = “arraybuffer”;
socket.onmessage = (event) => {
// event.data é uma string ou arraybuffer (se binário)
};

ENCERRAMENTO DA CONEXÃO

Normalmente, quando uma parte deseja fechar a conexão (o navegador e o servidor têm
direitos iguais), eles enviam um frame de fechamento de conexão com um código numérico
e um motivo como texto.
O método é:
socket.close([código], [razão])
25m
Em seguida, a outra parte no gerenciador do evento close pode obter o código e o motivo,
por exemplo:
// um lado:
socket.close(1000, “Tarefa concluída”);
// Outro lado:
socket.onclose = event => {
// event.code === 1000
// event.reason === “Tarefa concluída”
// event.wasClean === true (fechamento limpo)
};

O código de fechamento não é um número qualquer, mas um código de fechamento


especial do WebSocket:

• 1000 – o padrão, fechamento normal;


• 1006 – não se pode definir esse código manualmente, indica que a conexão foi inter-
rompida (sem frame de fechamento).

Há outros códigos, como:

• 1001 – o servidor está sendo desligado ou um navegador saiu da página;


• 1009 – a mensagem é muito grande para processar;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• 1011 – erro inesperado no servidor.

Obs.: do mesmo modo, o protocolo HTTP traz seus códigos de resposta.

ESTADO DA CONEXÃO

Para obter o estado da conexão, há também há a propriedade socket.readyState


com valores:

•0 – CONNECTING: a conexão ainda não foi estabelecida;


• 1 – OPEN: comunicando;
• 2 – CLOSING: a conexão está sendo fechada;
• 3 – CLOSED: a conexão está fechada;

DIRETO DO CONCURSO
1. (UFC/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO/DESENVOLVIMENTO DE SIS-
TEMAS/2019) Sobre WebSockets, assinale a alternativa correta:
a. WebSockets utiliza AJAX para possibilitar a comunicação RESTful.
b. WebSockets e Sockets de rede são sinônimos, representando o mesmo protocolo e
especificação.
c. De acordo com a RFC 6455 que descreve o protocolo WebSocket, não é possível
utilizar WebSockets em ambientes que possuam um servidor proxy.
d. O handshake WebSocket usa o cabeçalho HTTP Upgrade para mudar do protocolo
HTTP para o protocolo WebSocket, com uma requisição de Upgrade.
e. Por padrão, o protocolo WebSocket usa a porta 8080 para conexões WebSocket
comuns e a porta 443 para conexões WebSocket encapsuladas por TLS (Transport
Layer Security).
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Web Socket – Introdução
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
a) WebSocket não se relaciona com XML.
b) WebSocket e Socket não são sinônimos: Socket é um elemento em nível mais baixo de
rede, ao passo que o WebSocket se enquadra na camada de aplicativo.
c) A utilização de WebSocket é permitida em servidor proxy.
d) O hand-shake usa o cabeçalho Upgrade para alterar o protocolo HTTP para o protocolo
WebSocket.
e) Não há que se falar em padrão 8080 ou 443.

GABARITO
1. d

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

AMQP

A maioria dos sistemas trabalha com comunicação síncrona. Para os casos mais bási-
cos, esse modelo funciona perfeitamente, porém, com os sistemas ficando mais complexos,
encontram-se alguns problemas com essa comunicação, visto o acoplamento forte entre sis-
temas. Devido a isso, foi criado o sistema assíncrono, nesse caso, por exemplo, um sistema
de vendas ao invés de se comunicar sincronamente com o sistema de mercadorias e ter de
aguardar o retorno, publica em uma espécie de fila, informando a este que as mercadorias
foram vendidas, desse modo, caso o sistema de mercadorias fique indisponível por alguma
falha, não afetará o uso.

• AMQP (Advanced Message Queuing Protocol) é um protocolo de mensagens que per-


mite que aplicativos clientes compatíveis se comuniquem com intermediários de mid-
dleware de mensagens compatíveis;
• Os brokers de mensagens recebem mensagens dos publishers (aplicativos que as
publicam, também conhecidos como produtores) e as encaminham para os consumi-
dores (aplicativos que as processam);
• Como é um protocolo de rede, os publishers, consumidores e o broker podem residir
em máquinas diferentes;
5m

Ao invés de o sistema de compra (Publisher) mandar a mensagem direto para o sistema


de envio (costumer), após a publicação, a informação vai para o Exchange, que possui uma
rota, enviando a informação para uma fila que irá até o consumidor.
ANOTAÇÕES

www.grancursosonline.com.br 1
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

AMQP é um Protocolo Programável

• O AMQP é um protocolo programável no sentido de que as entidades AMQP e os


esquemas de roteamento são definidos principalmente pelos próprios aplicativos, não
por um administrador do broker;
• Os aplicativos declaram as entidades AMQP de que precisam, definem os esquemas
de roteamento necessários e podem optar por excluir as entidades AMQP quando não
forem mais usadas;
10m

Exchanges e Tipos de Exchanges

• As exchanges são entidades AMQP para as quais as mensagens são enviadas; é uma
espécie de direcionamento.
• As exchanges pegam uma mensagem e a roteiam para zero ou mais filas;
• O algoritmo de roteamento usado depende do tipo de exchange e das regras chama-
das bindings;

Tipos de Exchanges

• Direct Exchange;
• Fanout Exchange;
• Topic Exchange;
• Headers Exchange.

Default Exchange

• A exchange padrão é uma exchange direta sem nome (string vazia) pré-declarada
pelo broker;
• Ele tem uma propriedade especial que o torna muito útil para aplicações simples: cada
fila que é criada é automaticamente vinculada a ela com uma chave de roteamento que
é igual ao nome da fila;
• Por exemplo, quando você declara uma fila com o nome de “search-indexingonline”, o
broker AMQP irá vinculá-la à exchange padrão usando “searchindexing-online” como
chave de roteamento.
ANOTAÇÕES

www.grancursosonline.com.br 2
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Direct Exchange

• Uma exchange direta entrega mensagens para filas com base na chave de roteamento
de mensagens;
• Uma exchange direta é ideal para o roteamento unicast de mensagens (embora
também possam ser usadas para roteamento multicast);
– Uma fila se liga à exchange com uma chave de roteamento K;
– Quando uma nova mensagem com chave de roteamento R chega à central direta, a
central a encaminha para a fila se K = R;
15m

Em geral, esses processos em fila, não são processos que funcionam em tempo real,
a informação vai ser processada e depois será gravada uma resposta em algum lugar,
gerando as filas.

www.grancursosonline.com.br 3
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Fanout Exchange

• Uma exchange de fanout roteia mensagens para todas as filas que estão vinculadas a
ela e a chave de roteamento é ignorada;
• Se N filas estiverem vinculadas a uma exchange de fanout, quando uma nova mensa-
gem for publicada nessa exchange, uma cópia da mensagem será entregue a todas
as N filas;
• As exchanges de fanout são ideais para o roteamento de mensagens em broadcast;

No caso acima, ao se publicar uma nova mensagem na Exchange, todas as demais filas
receberão uma cópia da mensagem.
20m

Topic Exchange

• As exchanges de tópicos roteiam mensagens para uma ou várias filas com base na
correspondência entre uma chave de roteamento de mensagens e o padrão que foi
usado para vincular uma fila a uma exchange.
• O tipo de exchange de tópicos é frequentemente usado para implementar várias varia-
ções de padrão de publicação/assinatura;
• As exchanges de tópicos são comumente usadas para o roteamento multicast de
mensagens;
ANOTAÇÕES

www.grancursosonline.com.br 4
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No Topic, a chave de roteamento terá uma composição de varias partes, como se fosse
um DNS, possui várias filas diferentes.
Observe o exemplo acima, no primeiro caso, tem-se o consumidor A, que deseja consu-
mir tudo que tenha a informação *.error, desse modo, quando publicada a mensagem Users.
error, ele receberá a mensagem apenas no que se refere ao primeiro caso, visto que no
segundo caso a informação é Users.info.
No exemplo do consumidor B, tanto no primeiro caso quanto no segundo, este deseja
consumir tudo que tenha Users.* como a mensagem publicada foi Users.error, ele também
receberá a mensagem.
O consumidor C está interessado em *.*, logo, receberá a mensagem tanto no primeiro
caso quanto no segundo.

Headers Exchange

• Uma exchange de cabeçalhos é projetada para roteamento em vários atributos que


são mais facilmente expressos como cabeçalhos de mensagem do que uma chave de
roteamento;
• As exchanges de cabeçalhos ignoram o atributo de chave de roteamento;
• Em vez disso, os atributos usados ​para roteamento são obtidos do atributo headers;
• Uma mensagem é considerada correspondente se o valor do cabeçalho for igual ao
valor especificado no binding;

Uma mensagem possui uma série de atributos(headers), esses atributos podem ser utili-
zados para fazer o roteamento.

www.grancursosonline.com.br 5
CONHECIMENTOS ESPECIFICOS
AMQP
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Filas (Queues)

• As filas no modelo AMQP armazenam mensagens que são consumidas pelos


aplicativos;
25m
• Propriedades:
– Nome;
– Durável (a fila sobreviverá a uma reinicialização do broker);
– Exclusivo (usado por apenas uma conexão e a fila será excluída quando essa cone-
xão for encerrada);
– Exclusão automática (a fila que teve pelo menos um consumidor é excluída quando
o último consumidor cancela a inscrição);
– Argumentos (opcional; usado por plugins e recursos específicos do broker, como
TTL de mensagem, limite de comprimento de fila etc.);

Bindings

• Bindings são regras que as exchanges usam (entre outras coisas) para rotear mensa-
gens para filas;
• Para instruir uma exchange E a rotear mensagens para uma fila Q, Q deve estar vin-
culado a E;
• As ligações podem ter um atributo de chave de roteamento opcional usado por alguns
tipos de Exchange;
• A finalidade da chave de roteamento é selecionar determinadas mensagens publica-
das em uma exchange para serem roteadas para a fila vinculada.

Consumidores (Consumers)

• Armazenar mensagens em filas é inútil, a menos que os aplicativos possam consumi-las;


• No modelo AMQP, há duas maneiras de os aplicativos fazerem isso:
– Inscrever-se para receber mensagens (“push API”): esta é a opção recomendada;
– Polling (“pull API”): desta forma é altamente ineficiente e deve ser evitado na maioria
dos casos;
O importante para o AMQP é entender os seus intervenientes, primeiramente seu obje-
tivo, que é ter sistemas assíncronos e seus tipos de filas.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

www.grancursosonline.com.br 6
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

APACHE KAFKA

Apache Kafka é middleware, um software que fica entre outros softwares e serve como
um barramento corporativo, sendo uma maneira de comunicar uma aplicação com outra.
Dessa forma, ele é um barramento de eventos para possibilitar que haja comunicação assín-
crona entre as aplicações.
5m
Ainda há diversos cenários em que é necessária a comunicação síncrona entre sistemas,
porém o Apache Kafka oferece a possibilidade de comunicação assíncrona para quando for
vantajoso.

Streaming de Eventos

• É a prática de capturar dados em tempo real de fontes de eventos como bancos de


dados, sensores, dispositivos móveis, serviços em nuvem e aplicativos de software na
forma de fluxos de eventos;
• Armazenar esses fluxos de eventos de forma durável para recuperação posterior; mani-
pular, processar e reagir aos fluxos de eventos em tempo real e retrospectivamente;
• Rotear os fluxos de eventos para diferentes tecnologias de destino, conforme
necessário;
10m

Usos

• Para processar pagamentos e transações financeiras em tempo real, como em bolsas


de valores, bancos e seguros;
• Para rastrear e monitorar carros, caminhões, frotas e embarques em tempo real, como
na logística e na indústria automotiva;
• Para capturar e analisar continuamente dados de sensores de dispositivos IoT ou
outros equipamentos, como em fábricas e parques eólicos;
• Para coletar e reagir imediatamente às interações e pedidos do cliente, como no varejo,
no setor hoteleiro e de viagens e em aplicativos móveis;
• Monitorar os pacientes em cuidados hospitalares e prever mudanças na condição para
garantir o tratamento oportuno em emergências;
ANOTAÇÕES

www.grancursosonline.com.br 1
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Conectar, armazenar e disponibilizar dados produzidos por diferentes divisões de


uma empresa;
• Servir como base para plataformas de dados, arquiteturas orientadas a eventos e
microsserviços;

ATENÇÃO
Pode haver cenários em que um fluxo de eventos muito intenso provoque uma variação na
velocidade de consumo, assim, para não gerar um acoplamento direto entre os sistemas,
fazendo que a lentidão em um cause a lentidão em outro, trabalha-se com uma fila que
possibilita o consumo de mensagens na medida que for possível.

O Apache Kafka surge como necessidade em um momento em que os sistemas ficam


conectados e demandam que tudo seja executado em tempo real, com alta velocidade. O
antigo modelo de esperar o final do dia para fazer o processamento está ficando datado,
apesar de ainda ocorrer.
A comunicação síncrona carrega muita fragilidade para os sistemas, com grande dificul-
dade grande de comunicação entre os sistemas, pois com o acoplamento, pode ocorrer um
cenário em que a queda de um sistema provoque a queda de outro.

• Apache Kafka é uma plataforma de streaming de eventos;


• O Kafka combina três recursos principais para implementar casos de uso para trans-
missão de eventos de ponta a ponta com uma única solução:
– Para publicar (gravar) e assinar (ler) fluxos de eventos, incluindo importação/expor-
tação contínua de seus dados de outros sistemas;
– Para armazenar fluxos de eventos de forma durável e confiável pelo tempo
que desejar;
– Para processar fluxos de eventos à medida que ocorrem ou retrospectivamente;

• E toda essa funcionalidade é fornecida de maneira:


– Distribuída – pode haver vários servidores;
– Altamente escalável – É possível ir aumentando a potência do sistema, criando
mais servidores;
– Elástica – há a possibilidade de aumentar ou diminuir a potência do sistema;
ANOTAÇÕES

www.grancursosonline.com.br 2
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

– Tolerante a falhas e segura – em caso de alguma falha, pode-se recuperar;


15m

Foi originalmente criado pelo LinkedIn e tornou-se um projeto aberto posteriormente. É


escrito na linguagem Scala e Java, sendo que o Scala compila para o bytecode do Java.

Funcionamento

Kafka é um sistema distribuído que consiste em servidores e clientes que se comunicam


através de um protocolo de rede TCP de alto desempenho;
Servidores: Kafka é executado como um cluster de um ou mais servidores que podem
abranger vários datacenters ou regiões de nuvem;
Clientes: permitem escrever aplicativos distribuídos e microsserviços que leem, gravam
e processam fluxos de eventos em paralelo, em escala e de maneira tolerante a falhas,
mesmo no caso de problemas de rede ou falhas de máquina;

ATENÇÃO
Aplicações mais modernas, como o Apache Kafka, já devem ser feitas pensando em traba-
lhar em nuvem. Muitas aplicações antigas não são pensadas como escaláveis.
Os servidores formam uma camada chamada armazenamento (brokers), outros servido-
res executam outras ferramentas do Kafka, como o Kafka Connect, para importar e expor-
tar continuamente fluxo de dados e eventos que integram o Kafka com outros sistemas
existentes.
Microsserviços são parte de uma filosofia de desenvolvimento de aplicações bem recente.
ANOTAÇÕES

www.grancursosonline.com.br 3
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Diagrama

Para que as aplicações se comuniquem, o Apache Kafka funciona como uma espi-
nha dorsal:

CONCEITOS E TERMINOLOGIAS

• Um evento registra o fato de que “algo aconteceu” no mundo. Exemplo:

Chave de evento: “Alice”


Valor do evento: “Efetuou um pagamento de $200 para Bob”
Carimbo de data e hora do evento: “25 de junho de 2020 às 14h06”.
20m

• Os produtores são os aplicativos clientes que publicam (gravam) eventos no Kafka e


os consumidores são aqueles que assinam (leem e processam) esses eventos;
• Os tópicos no Kafka são sempre multiprodutores e multiassinantes: um tópico pode
ter zero, um ou muitos produtores que gravam eventos nele, bem como zero, um ou
muitos consumidores que assinam esses eventos;
• Os tópicos são particionados, o que significa que um tópico é distribuído por vários
“baldes” (“bucket”) localizados em diferentes corretores Kafka;
ANOTAÇÕES

www.grancursosonline.com.br 4
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

APIs

• A API Admin para gerenciar e inspecionar tópicos, agentes e outros objetos Kafka;
• A API do produtor para publicar (gravar) um fluxo de eventos para um ou mais tópi-
cos do Kafka;
• A API Consumer para assinar (ler) um ou mais tópicos e processar o fluxo de eventos
produzidos para eles;
• A API Kafka Streams para implementar aplicativos de processamento de fluxo e
microsserviços;
• A API Kafka Connect para criar e executar conectores de importação/exportação de
dados reutilizáveis que consomem (leem) ou produzem (gravam) fluxos de eventos de
e para sistemas e aplicativos externos para poderem se integrar ao Kafka;
ANOTAÇÕES

www.grancursosonline.com.br 5
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Conceitos

Tópicos: um fluxo de mensagens pertencentes a uma determinada categoria é chamado


tópico. Os dados são armazenados em tópicos. Os tópicos são divididos em partições. Para
cada tópico, Kafka mantém um mínimo de uma partição. Cada partição contém mensagens
em uma sequência ordenada imutável. Uma partição é implementada como um conjunto de
arquivos de segmentos de tamanhos iguais;
25m

Partição: os tópicos podem ter muitas partições, portanto, podem manipular uma quan-
tidade arbitrária de dados;
Offset da partição: cada mensagem particionada tem um id de sequência exclusivo cha-
mado offset;
Réplicas de partição: as réplicas nada mais são do que backups de uma partição. As répli-
cas nunca são dados de leitura ou gravação. Eles são usados para evitar a perda de dados;
Brokers: os Brokers são sistemas simples responsáveis por manter os dados publica-
dos. Cada broker pode ter zero ou mais partições por tópico;

• Suponha que, se houver N partições em um tópico e N número de brokers, cada broker


terá uma partição;
ANOTAÇÕES

www.grancursosonline.com.br 6
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Suponha que se houver N partições em um tópico e mais de N brokers (n + m), o pri-


meiro N broker terá uma partição e o próximo M broker não terá nenhuma partição
para esse tópico específico;
• Suponha que se houver N partições em um tópico e menos de N brokers (nm), cada
broker terá um ou mais compartilhamento de partição entre eles; este cenário não é
recomendado devido à distribuição desigual de carga entre o broker;

Cluster Kafka: Kafka ter mais de um Broker é chamado de cluster Kafka Um cluster
Kafka pode ser expandido sem tempo de inatividade. Esses clusters são usados para geren-
ciar a persistência e a replicação de dados de mensagens;
Produtores: os produtores são os editores de mensagens para um ou mais tópicos
Kafka. Produtores enviam dados para Brokers Kafka. Toda vez que um produtor publica uma
mensagem para um broker, o broker simplesmente anexa a mensagem ao último arquivo de
segmento. Na verdade, a mensagem será anexada a uma partição. O produtor também pode
enviar mensagens para uma partição de sua escolha;
Consumidores: os consumidores leem dados de Brokers. Os consumidores se inscrevem
em um ou mais tópicos e consomem mensagens publicadas extraindo dados dos Brokers.
Leader: Leader é o nó responsável por todas as leituras e gravações para a partição
especificada. Cada partição tem um servidor atuando como líder;
Follower: o nó que segue as instruções do líder é chamado de follower. Se o líder falhar,
um dos seguidores se tornará automaticamente o novo líder. Um seguidor atua como consu-
midor normal, extrai mensagens e atualiza seu próprio armazenamento de dados;

DIRETO DO CONCURSO

1. (2021/CESPE/CEBRASPE/SERPRO/ANALISTA– DESENVOLVIMENTO DE SISTEMAS)


A respeito do software Kafka, julgue o item a seguir. É possível fazer uso da API consumer
para publicar eventos em tópicos Kafka.

COMENTÁRIO
API consumer – para ler.
API de produtor – para gravar.
ANOTAÇÕES

www.grancursosonline.com.br 7
CONHECIMENTOS ESPECÍFICOS
Apache Kafka
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (2021/CESPE/CEBRASPE/SEFAZ– CE/AUDITOR FISCAL DE TECNOLOGIA DA


INFORMAÇÃO DA RECEITA ESTADUAL) Julgue o próximo item, relativos ao Apache
Kafka e ao Kubernetes. O Apache Kafka provê serviço de mensageria e integração de
dados, de forma assíncrona, em que produtores e consumidores ficam desacoplados
e agnósticos entre si.
30m

COMENTÁRIO
De forma assíncrona, ou seja, a mensagem acumula e depois chega.

GABARITO
1. E
2. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DOCKER

O Docker é um assunto muito atual e que vem começando a ser cobrado em provas
de concursos, especialmente de forma conceitual. O foco do nosso estudo também terá
um caráter majoritariamente conceitual, pelos seguintes motivos: (i) como o Docker é muito
recente, podemos dizer, inclusive, que é uma novidade tecnológica e, mesmo que tenha
cerca de 10 anos, esse tema caiu poucas vezes em provas, assim, a base de questões ainda
é pequena; e (ii) é um assunto que está começando a ser cobrado de forma conceitual, vol-
tada para suas características e utilização.

O Docker está muito associado à parte de microsserviços, mas não está diretamente aco-
plado, podendo haver microsserviços com Docker ou sem. Esses dois elementos andam de
mãos dadas, pois, no dia a dia, eles são utilizados em conjunto.

Referências Bibliográficas
• https://www.opencontainers.org/. Ótima descrição acerca de container, Docker e OCI.
• https://docs.microsoft.com/ptbr/dotnet/standard/microservicesarchitecture/container-
-docker-introduction/docker-defined
Vamos trabalhar com base nas referências acima. Também é importante ressaltar que
Docker não é um assunto tão acadêmico, de forma que não há, por esse motivo, muita litera-
tura acadêmica acerca do tema, como em outros assuntos na área de TI. Muitas vezes, é pre-
ciso buscar informações em compêndios de grandes empresas, disponibilizados na internet.
De início, para entender o que é Docker, precisamos entender o que é container.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Introdução aos Containers


Containerização é uma abordagem para desenvolvimento de software em que um apli-
cativo ou serviço, suas dependências e sua configuração (abstraída como arquivos de mani-
festo de implantação) são empacotados juntos como uma imagem de contêiner.
O aplicativo em contêiner pode ser testado como uma unidade e implementado como
uma instância de imagem do contêiner no sistema operacional do host (hospedeiro);

• Máquina virtual/virtualização: em um computador, instala-se um software – muitas


vezes, o Virtual Box – e roda um outro sistema operacional. Às vezes, dentro do Win-
dows, podemos rodar o Linux.

É muito comum que as provas cobrem a diferenciação entre virtualização e contêiner.


O container seria algo muito parecido com isso, mas é mais sutil do que uma máquina
virtual, pois não simula um computador inteiro, então, é muito mais leve. Em outras palavras,
o container é uma forma de executar um outro sistema operacional dentro do nosso próprio
sistema. Além disso, é possível empacotar nosso software junto com o sistema operacional
dele, trazendo a vantagem de reprodução muito melhor desse software. Toda vez que o ins-
talarmos dentro de um container, este vai ser semelhante, independentemente do computa-
dor que o esteja executando. .
5m
Assim como os contêineres permitem que as mercadorias sejam transportadas por navio,
trem ou caminhão, independentemente da carga dentro, os contêineres de software atuam
como uma unidade padrão de implantação de software que pode conter código e depen-
dências diferentes. Containerizar software dessa forma permite que os desenvolvedores e
profissionais de TI possam implantá-los em diversos ambientes com pouca ou nenhuma
modificação.
O nome “container” vem do conceito de contêiner de navio propriamente dito. Inclusive, o
ícone do Docker é um navio com vários contêineres empilhados. Para o navio, pouco importa
o que há dentro dos contêineres, visto que eles são uma estrutura padrão, e nós podemos
colocar qualquer tipo de software dentro deles, e eles vão executá-lo de forma independente.
Os containers também isolam os aplicativos uns dos outros em um sistema operacional
compartilhado.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os aplicativos em containers são executados em um host de containers que, por sua vez,
é executado no sistema operacional (Linux ou Windows).
Os containers, portanto, ocupam um espaço significativamente menor do que as imagens
de máquinas virtuais (VM). Cada container pode executar um aplicativo da web inteiro ou
um serviço.
Quando temos uma máquina virtual rodando, como, por exemplo, um Virtual Box, esta-
remos simulando um sistema operacional inteiro naquela máquina; já o container vai com-
partilhar o sistema operacional daquela mesma máquina, então, não levanta outro sistema
operacional distinto, o que economiza muitos recursos em termos de tamanho das imagens
e gasto de memória. Além disso, o container consegue separar um processo do outro para
evitar que aconteça algum tipo de quebra de segurança ou algo do tipo.
Exemplo: abaixo, temos o sistema operacional hospedeiro (host) com app 1, app 2, svc
1 e svc 2, cada um dentro de um container, separado e isolado, como se fossem máquinas
virtuais distintas, mas muito mais leve. Ademais, podemos ter o mesmo sistema operacional
rodando dentro de uma VM ou de um servidor.

Hospedeiro

Outro benefício da conteinerização é a escalabilidade. Pode-se dimensionar rapidamente


criando novos contêineres para tarefas de curto prazo.
Do ponto de vista do aplicativo, instanciar uma imagem (criar um contêiner) é semelhante
a instanciar um processo como um serviço ou aplicativo da web.
Para confiabilidade, no entanto, quando se executa várias instâncias da mesma imagem
em vários servidores host, geralmente deseja-se que cada contêiner (instância de imagem)
seja executado em um servidor host ou VM diferente em domínios de falhas diferentes.
Ou seja, a escalabilidade é muito melhor do que na máquina virtual, visto que, como
esta última tem um sistema operacional inteiro, temos que dar boot como se houvesse ali
um computador inteiro para rodar um processo. No caso de um container, é possível ter um
gasto muito menor de memória e de recursos e podemos escalar essas máquinas em máqui-
nas físicas ou virtuais diferentes, para diminuir o horizonte de falha. Isso porque, se tivermos

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

todos os nossos contêineres escalados em uma mesma máquina física, e ela tiver um pro-
blema, tudo morre de uma vez, sendo recomendável escalar em várias máquinas, virtuais ou
físicas, diferentes.
Em suma, os contêineres oferecem os benefícios de isolamento, portabilidade, agilidade,
escalabilidade e controle em todo o fluxo de trabalho do ciclo de vida do aplicativo.
O benefício mais importante é o isolamento do ambiente fornecido entre o Dev e o Ops.
Isto é, como o container é muito leve, podemos usar como se tivesse o mesmo sistema
operacional, que vai ser executado no aplicativo em produção. Conseguimos, então, trazê-lo
para dentro da nossa máquina e executá-lo localmente. Desse modo, teremos uma previsi-
bilidade de problemas muito menor e um isolamento, pois, quando rodamos o aplicativo em
produção na nossa máquina, ele está de um jeito, quando ele roda em produção, rodamos
no mesmo container da nossa máquina.
Isso começou com algumas empresas, sendo uma das grandes empresas a Docker e,
rapidamente, as pessoas quiseram padronizar para que não gerasse uma bagunça no mer-
cado e cada um fizesse de um jeito. Nesse contexto, foi criado um órgão chamado Open
Container Initiative (OCI). .
10m

Open Container Initiative (OCI)


Open Container Initiative (OCI) é uma estrutura de governança leve e aberta, formada
sob as diretrizes da Linux Foundation, com o propósito expresso de criar padrões abertos da
indústria em torno de formatos de contêiner e tempo de execução (runtime).
Então, para que cada empresa não criasse um modelo próprio que fosse incompatível
com outro, bem como para criar um padrão que fosse aberto para todos, foi criada a OCI.
A OCI foi lançada em 22 de junho de 2015 pela Docker, CoreOS e outros líderes da
indústria de contêineres. Atualmente, contém duas especificações: a Runtime Specification
(runtime-spec) e a Image Specification (image-spec).
Para executar o contêiner, temos duas coisas importantes: primeiro, a imagem, que é o
conjunto de arquivos; e o runtime, que é o processo que vai, de fato, pegar essa imagem e
executá-la.
A Runtime Specification descreve como executar um "bundle de sistema de arquivos"
que é descompactado no disco. Em alto nível, uma implementação de OCI baixaria uma
imagem de OCI e, em seguida, descompactaria essa imagem em um pacote configurável de
sistema de arquivos OCI Runtime.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Nesse ponto, o OCI Runtime Bundle seria executado por um OCI Runtime;
Ou seja, temos uma coleção de imagens e, quando executamos o runtime e ele quer exe-
cutar uma sql, mas não há nada de sql no computador, ele busca uma imagem sql no Docker
Hub, executa-a na nossa máquina e compartilha o sistema operacional, com base no sistema
operacional que veio no sistema de arquivos da imagem.
Esse fluxo de trabalho deve suportar o uso que os usuários esperam dos mecanismos
de contêineres como Docker e rkt (Rocket): principalmente, a capacidade de executar uma
imagem sem argumentos adicionais:
Rocket é concorrente do Docker, mas os dois seguem o mesmo padrão, conseguindo
executar as mesmas imagens.

Existe uma diferença de requisitos de um em relação ao outro, principalmente no tocante


à segurança. Eles seguem o mesmo padrão de imagem e de runtime.
Para suportar esse uso, o OCI Image Format contém informações suficientes para ini-
ciar o aplicativo na plataforma de destino (por exemplo, comando, argumentos, variáveis de
ambiente, etc.).
Essa especificação define como criar uma imagem de OCI, que geralmente será feita por
um sistema de compilação e gerará um manifesto de imagem, uma serialização do sistema
de arquivos (camada) e uma configuração de imagem.
A imagem possui um sistema de arquivos e outros metadados muito importantes para que
possa ser executada. Tais metadados estão embutidos na imagem, então, tanto o Docker
quanto o rkt conseguem executá-la no computador de destino.
Em um nível alto, o manifesto da imagem contém metadados sobre o conteúdo e as
dependências da imagem, incluindo a identidade endereçável pelo conteúdo de um ou mais
arquivos de serialização do sistema de arquivos que serão descompactados para compor o
sistema de arquivos executável final.
A configuração da imagem inclui informações como argumentos do aplicativo, ambientes
etc. A combinação do manifesto da imagem, da configuração da imagem e de uma ou mais
serializações do sistema de arquivos é chamada de Imagem da OCI.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Basicamente, a imagem é feita em camadas e ela pega um sistema operacional em


determinado nível e adiciona outra camada. .
15m

Para que isso funcione, são necessários alguns requisitos do sistema operacional:

LXC – Linux Container


• O LXC é uma interface de espaço de usuário para os recursos de contenção de kernel
do Linux. Por meio de uma API e ferramentas simples, permite que os usuários do
Linux criem e gerenciem facilmente containers de sistema ou aplicativo.
• O LXC atual usa os seguintes recursos de kernel:
– Namespaces do kernel;
– Apparmor e SELinux profiles;
– Políticas Seccomp;
– Chroots;
– Ferramentas do kernel;
– CGroups (grupos de controle).

Por um lado, temos o Docker, que executa a imagem no padrão determinado, mas
o sistema operacional do Linux tem um recurso específico chamado LXC, que permite o
isolamento.
O Docker baixa a imagem e descompacta o filesystem em algum lugar do sistema. Então,
faz solicitação ao LXC, que compartilha o kernel e consegue ler aquele filesystem, dando
uma espécie de boot ou inicialização daquele sistema como se a pessoa estivesse naquele
outro filesystem que foi baixado da imagem. Quem coordena tudo isso é o Docker.

Docker
• O Docker é um projeto de código aberto para automatizar a implantação de aplicativos,
como contêineres portáteis e autossuficientes que podem ser executados na nuvem
ou localmente;
• O Docker também é uma empresa que promove e desenvolve essa tecnologia, traba-
lhando em colaboração com os fornecedores de nuvem, Linux e Windows, incluindo a
Microsoft;
O Docker é tanto a ferramenta como a empresa.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Então, temos um padrão desenvolvido por uma especificação de imagem e um padrão


de runtime, ambos feitos pela OCI; temos os recursos do sistema operacional, sendo que um
dos principais é o LXC, que vai permitir que os contêineres sejam executados; além disso,
temos o software chamado Docker, que vai utilizar o recurso da LXC para baixar a imagem
e, de fato, executá-la. Então, o Docker é uma série de pecinhas separadas, que se juntam
para esse objetivo maior.
Os contêineres de imagens do Docker podem ser executados nativamente no Linux e no
Windows. No entanto, as imagens do Windows podem ser executadas somente em hosts
Windows e as imagens do Linux podem ser executadas em hosts Linux e Windows (usando
uma VM do Hyper-V Linux), em que host significa um servidor ou uma VM.
O recurso do LXC é específico do Linux. Quando baixamos o Docker, conseguimos exe-
cuta tanto uma imagem do Linux quanto uma do Windows, sendo que a deste último não
é muito popular, mas também é possível. No Windows, conseguimos executar imagens do
Linux e do Windows, mas como vamos compartilhar o sistema operacional, o Windows vai
subir uma hyperview – que é como se fosse uma máquina virtual do Linux – e vai rodar o
Docker dentro dela, pois é ela quem vai compartilhar os recursos.
Já no Linux, o processo é um pouco mais nativo, visto que ele vai compartilhar o próprio
sistema operacional.
Os desenvolvedores podem usar ambientes de desenvolvimento no Windows, Linux ou
macOS. No computador de desenvolvimento, o desenvolvedor executa um host do Docker
em que as imagens do Docker são implantadas, incluindo o aplicativo e suas dependências;
Ou seja, vamos executar o Docker, que vai implantar essa versão do Docker na nossa
máquina, sendo muito semelhante ao que é feito no ambiente de produção, pois estaremos
utilizando o mesmo sistema operacional porque é a mesma imagem Docker dele. Isso é uma
grande vantagem.
Para hospedar contêineres em ambientes de desenvolvimento e fornecer ferramentas
adicionais para desenvolvedores, o Docker disponibiliza o Docker Community Edition (CE)
para Windows ou para macOS.
Esses produtos instalam a VM necessária (o host do Docker) para hospedar os con-
têineres.
20m
O Docker também disponibiliza o Docker Enterprise Edition (EE), projetado para o desen-
volvimento corporativo e usado por equipes de TI que criam, enviam e executam grandes
aplicativos essenciais aos negócios na produção.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Comparando Contêineres do Docker com Máquinas Virtuais

Máquina Virtual

Em uma máquina virtual tradicional, temos a infraestrutura e o sistema operacional hos-


pedeiro, bem como um sistema de visualização. Temos a máquina virtual, que pode ser
várias. Perceba-se que cada máquina virtual tem um sistema operacional completo de con-
vidado, os binários, as libs, rodando, de fato, um sistema operacional.

Docker

No Docker, também temos a infraestrutura e o sistema operacional host, mas o engine


evita que cada virtualização tenha seu próprio sistema operacional, visto que ele compartilha
o mesmo sistema operacional de origem. Dessa forma, a solução do Docker é bem mais leve
de ser executada do que aquela da máquina virtual.

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

As máquinas virtuais incluem o aplicativo, as bibliotecas ou binários necessários e um


sistema operacional convidado completo. A virtualização completa requer mais recur-
sos do que a conteinerização.

Os contêineres incluem o aplicativo e todas as suas dependências. No entanto, eles


compartilham o kernel do sistema operacional com outros contêineres, sendo executados
como processos isolados no espaço do usuário no sistema operacional do host.
Como os contêineres exigem menos recursos (por exemplo, eles não precisam de um
sistema operacional completo), eles são fáceis de implantar e são iniciados rapidamente.
Isso permite que se tenha uma densidade mais alta, o que significa que se pode executar
mais serviços na mesma unidade de hardware, reduzindo assim os custos.
Em uma mesma máquina, ela consegue executar muito mais contêineres do que máqui-
nas virtuais.

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Como um efeito colateral da execução no mesmo kernel, há menos isolamento que as VMs.
Uma solução de máquina virtual é muito mais segura nesse aspecto, pois, como ela não
compartilha o sistema operacional, ela isola muito mais do que no caso do Linux Contai-
ner. Contudo, já existem diversas soluções e mecanismos de segurança para evitar esses
problemas.
O principal objetivo de uma imagem é que ela torne o ambiente (dependências) o mesmo
em diferentes implantações. Ou seja, pode-se repetir várias e várias vezes a implantação do
mesmo contêiner, pois vai ser exatamente a mesma coisa. Inclusive, podemos implementar
um container no Windows e outro no Linux, que vai funcionar da mesma forma.
Isso significa que se pode depurá-lo em uma máquina e implantá-lo em outra máquina
com a garantia de ser o mesmo ambiente.
Uma imagem de contêiner é uma maneira de empacotar um aplicativo ou serviço e
implantá-lo de maneira confiável e reproduzível. Podemos dizer que o Docker não é apenas
uma tecnologia, mas também uma filosofia e um processo.
25m
Então, se tivermos um sistema crítico, que não pode sair do ar porque tem muitos pro-
blemas, quando utilizamos o Docker, temos muito mais garantias de que vamos conseguir
reproduzir aquela imagem e executá-la de forma muito mais simples em máquinas diferentes.
Além dos containers, o Docker também tem imagens e registros.

Containers Docker, Imagens e Registros


Ao usar o Docker, um desenvolvedor cria um aplicativo ou serviço e o compacta junta-
mente com suas dependências em uma imagem de contêiner.
Uma imagem é uma representação estática do aplicativo ou serviço e sua configuração
e dependências.
Para executar o aplicativo ou serviço, a imagem do aplicativo é instanciada para criar um
contêiner, que será executado no host do Docker.
Os contêineres são inicialmente testados em um ambiente de desenvolvimento ou PC.
Conseguir isolar e reproduzir esse ambiente e reproduzir mais facilmente um problema
na máquina local são os principais objetivos do Docker e dos contêineres em si.
Os desenvolvedores devem armazenar imagens em um registro, que atua como uma
biblioteca de imagens e é necessário ao implantar em orquestradores de produção;
O Docker mantém um registro público por meio do Docker Hub; outros fornecedores for-
necem registros para diferentes coleções de imagens, incluindo o Azure Container Registry.
Como alternativa, as empresas podem ter um registro particular no local para suas pró-
prias imagens do Docker.

10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Considere que nós criamos o site da Gran Cursos. Assim, vamos gerar uma imagem
Docker que represente tudo – o site, as bibliotecas, o sistema operacional –, empacotamos
e enviamos para um local chamado registro. Esse registro mantém um catálogo de todas as
nossas imagens.
Temos o Docker Hub, o Azure, além de outros utilizados para não tornar o nosso sof-
tware público. Podemos também ter um registo interno da empresa, no qual as imagens
serão salvas.

Taxonomia
A taxonomia gera a seguinte estrutura:

DIRETO DO CONCURSO
:
1. (2017/FCC/DPE-RS/ANALISTA/DESENVOLVIMENTO DE SISTEMAS) Considere, por
hipótese, que a equipe de analistas da Defensoria Pública tenha optado pelo uso do
Docker. Esta decisão foi motivada pelo fato de o Docker
a. estar ganhando espaço como um gerenciador de máquinas virtuais no ambiente
GNU/Linux e não ter bibliotecas próprias, mantendo as bibliotecas nativas utilizadas
para gerenciar o LXC.
b. não utilizar Namespaces do Linux, o que permite prover espaços de trabalho isolados
para os contêineres. Desta forma, quando um contêiner é criado, automaticamente é
criada uma camada de isolamento para grupos de processos.
c. utilizar hypervisors, compatíveis com diversas plataformas, para executar máquinas
virtuais que virtualizam hardware físico como parte de um desenvolvimento multipla-
taforma para testes e implementação de fluxo de trabalho.

11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

d. permitir portabilidade de contêineres. É possível criar uma imagem de toda a confi-


guração e aplicativos instalados em um contêiner e transferi-lo para outro host que
tenha um Docker previamente instalado.
e. obter o mesmo desempenho da virtualização baseada em hypervisor, em que cada
contêiner é executado em seu próprio sistema operacional, o que reduz a utilização
de recursos de disco, embora os contêineres utilizem mais memória.

COMENTÁRIO
a. O Docker não é um gerenciador de máquinas virtuais, ele é um container. As duas coisas
são diferentes, como já foi visto anteriormente. .
30m
b. O LXC utiliza Namespaces.
c. O hypervisor não é obrigatório.
d. O Docker permite a portabilidade de contêineres. É possível criar uma imagem de toda
a configuração e aplicativos instalados em um contêiner e transferi-lo para outro host que
tenha um Docker previamente instalado.
e. O container utiliza menos memória, e o desempenho não é o mesmo do hypervisor.

2. (2019/CESPE/SLU-DF/Analista de Gestão de Resíduos Sólidos/Informática) No que diz


respeito a ferramentas de desenvolvimento, julgue o item a seguir.
O Docker é uma ferramenta open source que permite a criação de ambientes virtuais
por meio de Linux Containers, sendo uma das vantagens dos contêineres Docker for-
necer uma virtualização em nível de sistema operacional, o que isola as aplicações em
execução e não utiliza tantos recursos da máquina quanto as máquinas virtuais.

COMENTÁRIO
Esse item define o Docker de forma precisa.

GABARITO
1. d
2. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

12 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DOCKER II

Daremos continuidade ao tema Docker, uma ferramenta muito utilizada para trabalhar o
desenvolvimento e a conteinerização de aplicação. Nesta aula, veremos detalhes técnicos do
funcionamento e operação.

Arquitetura do Docker
O Docker usa uma arquitetura cliente-servidor. No entanto, em geral, o cliente e servidor
estão na mesma máquina. Existe um daemon, que é um processo que fica ativo escutando
conexões e comandos. Enviamos comandos para o daemon através do cliente, aquele pro-
cessa e devolve resposta aos comandos.
O cliente Docker conversa com o daemon Docker, que realiza o trabalho pesado de cons-
truir, executar e distribuir seus contêineres Docker.
O cliente e o daemon do Docker podem ser executados no mesmo sistema ou pode-
-se conectar um cliente do Docker a um daemon do Docker remoto. Se ele está na mesma
máquina, geralmente, irá utilizar a interface UNIX, e quando estiver em máquina separada,
utilizará a interface de rede.

O cliente e daemon do Docker se comunicam usando uma API REST, sobre soquetes
UNIX ou uma interface de rede.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Tem-se o cliente, que pode ou não ser uma máquina separada do daemon. No cliente, é
no Docker que se dá o comando.
Há o daemon, um processo que está em execução.
Por exemplo, quando é um comando de construção, ele criará uma imagem nova. Se for
o comando de run, ele pegará uma imagem, irá lê-la e transformá-la em um contêiner. Se o
comando for pull, ele pegará uma imagem do registry e trazê-la para a máquina local.
Em geral, o registry está em uma máquina separada, dedicada ao armazenamento das
imagens do Docker. Esse repositório pode ou não estar na empresa.
5m

O Daemon Docker
O daemon do Docker (dockerd) escuta solicitações da API do Docker e gerencia objetos
do Docker, como imagens, contêineres, redes e volumes;
Um daemon também pode se comunicar com outros daemons para gerenciar os serviços
do Docker, principalmente o Swarm ou outros processos que envolvem várias máquinas em
execução ao mesmo tempo.

Registro do Docker
Um registro do Docker armazena imagens do Docker. A imagem do Docker é um arquivo,
como se fosse zip, que guarda todas as informações do sistema criado. Ele fica guardado de
forma versionar, e, geralmente, pesquisável.
O Docker Hub é um registro público que qualquer pessoa pode usar. O Docker está con-
figurado para procurar imagens no Docker Hub por padrão. No entanto, pode-se executar um
registro privado.
Se baixarmos na máquina o Docker hub e executarmos, ele vai ao registro padrão da
internet. No entanto, algumas empresas, por questão de segurança, optam por ter uma cópia
do registry com as imagens autorizadas internamente, para que os funcionários utilizem
somente essas.
Quando se usam os comandos Docker pull ou Docker run, as imagens necessárias são
extraídas do registro configurado.
Quando se usa o comando docker push, a imagem é enviada para o registro configurado.
Dessa forma, pode-se fazer o pull de uma imagem básica, o Dockerfile (uma sequência
de comandos feita em cima de uma imagem base) que pode, inclusive, gerar uma segunda
imagem, fazer um push e enviá-la de volta para o registry.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Por exemplo, é possível pegar no registro uma imagem base só com o node, inserir a
aplicação e fazer um push para o registry, que é o node mais a aplicação em execução.

O pull busca a imagem do registry, ele tem várias opções de aplicativos, tais como NGINX,
Ubuntu etc.

Objetos do Docker
Ao usar o Docker, se está criando e usando imagens, contêineres, redes, volumes, plug-
-ins e outros objetos;
Segue uma breve visão geral de alguns desses objetos.

Imagens
Uma imagem é um modelo somente leitura com instruções para criar um contêiner
do Docker.
A imagem terá uma série de arquivos, é somente leitura porque é estática, dá a forma
para a execução do contêiner. O contêiner é uma instância de uma imagem, ele é modificá-
vel. Dessa forma, a imagem é a classe e o contêiner é o objeto.
10m
Note-se que se pode ter uma classe e várias instâncias (objetos), semelhantemente, uma
imagem e várias instâncias de execução dela (contêineres).
Muitas vezes, uma imagem é baseada em outra imagem, com alguma personalização
adicional.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Por exemplo, pode-se criar uma imagem baseada na imagem ubuntu, mas instalar o ser-
vidor da Web Apache e seu aplicativo, bem como os detalhes de configuração necessários
para executar o aplicativo.
Uma imagem é um modelo somente leitura com instruções para criar um contêiner
do Docker.
O comum é ter uma imagem base, inserir um aplicativo e executá-lo. A vantagem disso
é que, no cenário antigo de execução, sem o Docker, era necessário configurar o ambiente
final de execução da aplicação. Por exemplo, se a aplicação depende do apache, era preciso
ir à máquina de execução e instalá-lo.
Começou o seguinte problema: e se a aplicação precisa do apache em uma versão e a
aplicação de outra equipe precisa do apache noutra versão?
Era preciso ter dois servidores ou colocar duas instâncias do apache em execução.
Por isso, passou-se a utilizar a estrutura de contêiner, na qual se pode conteinerizar a
aplicação em uma versão específica do Ubuntu e do apache. A outra equipe pode ter ver-
sões diferentes daquele mesmo software, em execução paralela, numa mesma máquina, de
forma isolada.
Pode-se criar as próprias imagens ou usar apenas aquelas criadas por outras pessoas e
publicadas em um registro.
Para criar uma imagem, cria-se um Dockerfile com uma sintaxe simples para definir as
etapas necessárias para criar a imagem e executá-la.
Cada instrução em um arquivo Dockerfile cria uma camada na imagem.
Quando se altera o Dockerfile e reconstrói a imagem, apenas as camadas que foram
alteradas são reconstruídas. Isso faz parte do que torna as imagens tão leves, pequenas e
rápidas, quando comparadas a outras tecnologias de virtualização.
Ele tem um sistema de arquivos especial que atribuiu hashcodes para cada uma das
camadas. Por exemplo, na imagem do Ubuntu com hashcode 123, se instalado o apache,
o hashcode será modificado para 456. A parte inicial da imagem se mantém, só será adicio-
nado algo ao final.
15m
Se for criada outra imagem Ngix, por exemplo, ele aproveitará a parte inicial do Ubuntu
com o 123, e adicionará o 789. Ou seja, as duas imagens, diferentes, compartilharão a
mesma imagem base, que é o Ubuntu. Isso economiza porque, no cenário original de virtua-
lização, tudo era isolado, cada máquina virtual tinha o tamanho do Ubuntu completo. Com a
estratégia de compartilhar as etapas anteriores com o Dockerfile e o sistema do Docker, as
imagens são muito menores.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Contêineres
Um contêiner é uma instância executável de uma imagem.
Pode-se criar, iniciar, parar, mover ou excluir um contêiner usando a API ou a CLI
do Docker.
É possível conectar um contêiner a uma ou mais redes, anexar armazenamento a ele ou
até criar uma nova imagem com base em seu estado atual. Não é muito comum, em geral,
cria-se a partir do Dockerfile.
Por padrão, um contêiner é relativamente bem isolado de outros contêineres e sua
máquina host. Pode-se controlar como a rede, o armazenamento ou outros subsistemas sub-
jacentes de um contêiner estão isolados de outros contêineres ou da máquina host. A chave
do Docker é como ele consegue isolar e manter a segurança dos contêineres.
Um contêiner é definido por sua imagem, bem como pelas opções de configuração que
se fornece quando a cria ou inicia.
Quando um contêiner é removido, quaisquer alterações em seu estado que não sejam
armazenadas no armazenamento persistente desaparecem.
Por exemplo, ao iniciar o contêiner, não foi associado a ele o armazenamento persistente.
Ele tem um HD virtual, no entanto, se desligarmos ou removermos o contêiner, o que foi feito
nele desaparece. Ele feito para que os dados não persistam, a não ser que seja feito o com-
partilhamento de uma área de dados persistente.

Comando de Exemplo: Docker Run


20m
O comando a seguir executa um contêiner ubuntu, anexa interativamente à sua sessão
de linha de comando local e executa /bin/bash:
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Quando se executa esse comando, acontece o seguinte:


• Se não possui a imagem ubuntu localmente, o Docker a obtém do registro configurado,
como se tivesse executado Docker pull ubuntu manualmente. Dessa forma, é dado o
comando docker run, se a imagem for ubuntu, por exemplo, e se não existir no local,
ele irá no docker hub configurado, público ou privado, baixará a imagem, fará o pull e
executará;
• O Docker cria um novo contêiner, como se tivesse executado um comando docker con-
tainer create manualmente;
• O Docker aloca um sistema de arquivos de leitura e gravação no contêiner, como sua
camada final. Isso permite que um contêiner em execução crie ou modifique arquivos e
diretórios em seu sistema de arquivos local. Lembre-se que esse sistema de arquivos
de leitura e gravação que é criado na camada final é volátil, não se pode gravar nele
dados persistentes;
• O Docker cria uma interface de rede para conectar o contêiner à rede padrão, pois não
foi especificada nenhuma opção de rede. Isso inclui atribuir um endereço IP ao contê-
iner. Por padrão, os contêineres podem se conectar a redes externas usando a cone-
xão de rede da máquina host. Ele cria um sistema para comunicar via rede. Note-se
que não é uma virtualização completa, é uma conteinerização, logo o isolamento dele
não é completo, como se fosse uma máquina virtual;
• O Docker inicia o contêiner e é executado /bin/bash. Como o contêiner está execu-
tando interativamente e conectado ao seu terminal (devido aos sinalizadores -ie-t),
pode-se fornecer entrada usando o teclado enquanto a saída é registrada no terminal.

Quando se digita exit para finalizar o comando /bin/bash, o contêiner para, mas não é
removido. Pode-se iniciá-lo novamente ou removê-lo.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

No exemplo, abre-se a linha de comando docker run -i -t ubuntu /bin/bash. A máquina não
tinha o ubuntu localmente e tenta fazer o pull desta imagem.
Observe-se que há um pull em cada uma das hashs, as quais representam camadas. Ele
baixa e executa a imagem.
Note-se que no início estava na máquina Windows e, ao final, está como host. Nesse
ponto, executa-se o shell dentro do contêiner.

Serviços
Os serviços permitem escalar contêineres em vários daemons do Docker, que funcionam
juntos como um enxame (swarm) com vários gerentes e trabalhadores. Nessa estratégia do
Docker daemon, pode-se colocar várias máquinas trabalhando juntas, de forma cooperativa,
em um cluster.
Cada membro de um enxame é um daemon do Docker e todos os daemons se comuni-
cam usando a API do Docker. Um serviço permite definir o estado desejado, como o número
de réplicas do serviço que devem estar disponíveis a qualquer momento.
25m
Por padrão, o serviço é balanceado por carga em todos os nós do trabalhador. Para o con-
sumidor, o serviço Docker parece ser um único aplicativo. O Docker Engine oferece suporte
ao modo swarm (enxame) no Docker 1.12 e superior. O swarm permite a orquestração dos
contêineres, que se coloque várias máquinas para trabalhar em conjunto com o docker.

A tecnologia subjacente
O Docker é escrito em Go e tira proveito de vários recursos do kernel do Linux para ofe-
recer sua funcionalidade.

Namespaces
O Docker usa uma tecnologia chamada namespaces para fornecer o espaço de trabalho
isolado chamado contêiner.
Quando se executa um contêiner, o Docker cria um conjunto de namespaces para esse
contêiner.
Esses namespaces fornecem uma camada de isolamento. Cada aspecto de um contê-
iner é executado em um namespace separado e seu acesso é limitado a esse namespace.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Namespaces
O Docker Engine usa os seguintes namespaces no Linux:
• Namespace pid: isolamento do processo (PID: ID do processo). Dessa forma, o pro-
cesso executado do contêiner não é visível de fora, porque ele é isolado pelo sistema
operacional;
• Namespace net: Gerenciando interfaces de rede (NET: Networking);
• Namespace ipc: Gerenciando o acesso aos recursos do IPC (IPC: InterProcess Com-
munication);
• Namespace mnt: Gerenciando pontos de montagem do sistema de arquivos (MNT:
Montagem);
• Namespace uts: Isolando identificadores de kernel e versão. (UTS: Sistema de com-
partilhamento de tempo Unix).

Para que funcione, ele precisa utilizar alguns recursos do Linux. Aquele script, rodado
anteriormente, estava no Windows, porque ele tem uma estratégia para rodar o Docker. No
entanto, quando ele roda imagens do Linux, o faz em um sistema interno chamado hypervi-
sor, que cria uma máquina virtual Linux. Isso porque o Docker, para ser executado, precisa
de uma máquina Linux.

Grupos de Controle
O Docker Engine no Linux também conta com outra tecnologia chamada control groups
(cgroups).
Um cgroup limita um aplicativo a um conjunto específico de recursos.
Os grupos de controle permitem que o Docker Engine compartilhe recursos de hardware
disponíveis em contêineres e, opcionalmente, imponha limites e restrições. Por exemplo,
pode-se limitar a memória disponível para um contêiner específico.
Isso é muito importante pois, por exemplo, se estivermos rodando muitas imagens Docker,
se uma delas consumir muitos recursos, não derrubará o sistema, pois são impostos limites
de consumo.

Sistemas de Arquivos Union


Os sistemas de arquivos Union, ou UnionFS, são sistemas de arquivos que operam
criando camadas, tornando-as muito leves e rápidas.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O Docker Engine usa o UnionFS para fornecer os blocos de construção para contêineres.
O Docker Engine pode usar várias variantes do UnionFS, incluindo AUFS, btrfs, vfs e
DeviceMapper.
Dessa forma, ele precisa de um sistema de arquivos especial com a capacidade de tra-
balhar com camadas, para permitir o compartilhamento de camadas entre diversas imagens,
a fim de que elas não fiquem muito grandes e lotem o HD rapidamente.

Formato do Contêiner
O Docker Engine combina os namespaces, grupos de controle e UnionFS em um wra-
pper chamado formato de contêiner.
30m
O formato padrão do contêiner é libcontainer.
No futuro, o Docker poderá suportar outros formatos de contêiner.

DIRETO DO CONCURSO
1. (2018/FAURGS/TJ-RS/ANALISTA DE SUPORTE) Conceitualmente, as máquinas virtu-
ais definidas por contêineres são baseadas em virtualização:
a. em nível de hardware.
b. em nível de linguagem.
c. em nível de sistema operacional.
d. por hipervisores.
e. por monitores.

COMENTÁRIO
O Linux fornece alguns recursos ao Docker que permitem que ele faça este tipo de virtuali-
zação. Ele se apoia no sistema operacional, não faz uma virtualização de hardware.

2. (2015/CESPE/TER-GO-TÉCNICO JUDICIÁRIO PROGRAMAÇÃO DE SISTEMAS) A


respeito de ambientes virtuais para servidores, julgue o item subsequente.
O uso de contêineres tem crescido acentuadamente, principalmente para apoiar desen-
volvedores na disponibilização de ambiente reservado com as respectivas necessida-
des para a execução e a realização de testes de aplicações em desenvolvimento. Essa
tecnologia tem como vantagem dispensar a necessidade de hypervisor de virtualização.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
A questão indaga se o Docker precisa de hipervisor.
A virtualização do tipo 1 é feita pelo VirtualBox ou VMware, por exemplo. Ele tem uma
virtualização acima do nível do hardware, na qual hipervisor irá isolar várias instâncias de
sistemas operacionais distintas. Tem-se uma máquina virtual que virtualiza tudo para que
se possa rodar o sistema operacional completo em cada uma das virtualizações.
Já na virtualização por contêiner, há o sistema operacional, que fornece recursos para con-
teinerizar as aplicações, e não o sistema operacional em si.

GABARITO
1. c
2. C

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DOCKER III

Nesta aula, continuaremos a tratar sobre conteinerização de aplicações – assunto atual,


muito utilizado pelas empresas, assim como toda a parte de microserviços.
Nas aulas anteriores, tratamos da parte introdutória, como é o docker, como funciona a
conteinerização de aplicações; contudo, esse cenário, mais simplificado, começará a não
funcionar com a aplicação em produção.
Vejamos um exemplo:alguém conteinerizou uma aplicação. Na sequência, fez réplicas
desse contêiner, com o comando docker run várias vezes.
Pode ser que esse comando tenha que ser feito em máquinas distintas, para garantir que
se uma delas sair do ar, a réplica continuará a atender. Pode-se trabalhar com isso através
de scripts ou comando Python. No entanto, deve-se fazer algumas análises, como balance-
amento de carga, identificar máquinas sobrecarregadas e fora do ar etc.
Quando o cenário se torna complexo, passa a ser necessária a utilização de ferramentas
de orquestração de contêineres, como o Kubernetes, mais popular no mercado, e Docker
Swarm, que já vem embutido em outro Docker.

Configuração

A melhor maneira de começar a desenvolver aplicativos em contêiner é com o Docker


Desktop, para OSX ou Windows.
A versão desktop não será, exatamente, a mesma versão do ambiente de produção,
mas uma versão simplificada com o objetivo de fazer testes locais. Já a versão que irá rodar
no ambiente corporativo de testes será a mais poderosa. No entanto, é possível replicar
várias dessas características nas máquinas locais utilizando o Docker Desktop, OSX, Win-
dows ou Linux.
O Docker Desktop permitirá que se configure facilmente o Kubernetes ou o Swarm
em uma máquina de desenvolvimento local, para que se possa usar todos os recursos do
orquestrador para o qual está desenvolvendo aplicativos imediatamente, sem necessidade
de um cluster.
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Em geral, ao se colocar o Kubernetes no ambiente de produção, ele não estará em uma


máquina física isolada, mas em um cluster de máquinas (conjunto de máquinas trabalhando
de forma paralela). Não é possível testar em um cluster, por isso utiliza-se a versão desktop
do Kubernetes e do Docker Swarm.
5m
Devem ser seguidas as instruções de instalação apropriadas para cada sistema
operacional.

O Kubernetes já utiliza a estrutura de contêineres, com finalidades específicas, como


schedulers, controlleers, etcd ou agendadores. Ele possui um API do servidor, e além do
master, há uma série de nós, onde está o cluster.
Nesses nós dá-se um comando no Kubernetes, no master dele, o qual enviará os coman-
dos para os nós. Por exemplo, se um indivíduo deseja 3 cópias da aplicação A, ele implantará
as cópias nos nós.
O pod é uma instância do contêiner em execução.
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

KUBERNETES

O Docker Desktop configurará o Kubernetes de forma rápida e fácil. Para isso, deve-se
seguir as orientações específicas do sistema operacional.
Para confirmar que o Kubernetes está em funcionamento, pode-se criar um arquivo de
texto chamado pod.yaml com o seguinte conteúdo:

Dessa forma, criaremos o primeiro pod, que é feito para ser executado dentro de determi-
nado nó. Quando rodado localmente, ele terá somente um nó, para que os testes sejam feitos.
O nó é um arquivo YAML no qual são colocadas várias versões, como o api do Kuberne-
tes, qual o tipo (pod), alguns metadados, especificação e um ou mais contêineres para serem
executados no pod.
No caso, especificamos um deles, o contêiner é o testpod, rodará o Linux apline:3.5 e o
comando ["ping", "8.8.8.8"], que é o dms do Google.
Para efetuar a criação do pod, faz-se:

Para verificar que o pod está em funcionamento:


ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Para verificar os logs, faz-se:

Para desmontar o pod:

É possível implantar o pod com várias réplicas, então o Kubernetes os distribui. Dá-se um
objetivo ao Kubernetes e ele irá trabalhar em prol de mantê-lo.
10m
O swarm é nativo da parte docker e funciona de forma parecida, mas com nomenclaturas
diferentes (ao invés de pods, workers). Há gerentes para os workers.

DOCKER SWARM

O Docker Desktop é executado principalmente no Docker Engine, que possui tudo o que
se precisa para executar um Swarm;
Deve-se seguir as instruções de configuração e validação apropriadas para o sistema
operacional.

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Inicializar o modo Docker Swarm:

Executar um serviço Docker simples que use um sistema de arquivos alpine e um ping
para 8.8.8.8:

A depender do cenário, pode-se utilizar uma solução ou outra. Em geral, considera-se


que o Kubernetes é mais poderoso do que o Swarm.
Para verificar os logs:
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Para desmontar o teste:

CONTAINERIZANDO UM APLICATIVO

Após ter um orquestrador configurado no ambiente de desenvolvimento, graças ao


Docker Desktop pode-se começar a desenvolver aplicativos em contêiner. Em geral, o fluxo
de trabalho de desenvolvimento se parece com o seguinte:
• Criar e testar contêineres individuais para cada componente do aplicativo, criando pri-
meiro imagens do Docker;
• Montar contêineres e a infraestrutura de suporte em um aplicativo completo, expresso
como um Docker stack file ou no Kubernetes YAML;
• Testar, compartilhar e implementar o aplicativo completo em contêiner.

Os ambientes de desenvolvimento em contêineres são mais fáceis de configurar do que


os ambientes de desenvolvimento tradicionais.
15m
Vejamos um exemplo: há um ambiente de desenvolvimento onde é necessário trabalhar
com o apache, php. É preparada uma máquina, a aplicação está rodando, a infraestrutura de
produção está com determinada versão do php e apache. O tempo passa, a aplicação fica
legada, e as equipes passam a ter que desenvolver exatamente naquela versão porque o
ambiente não foi conteinerizado. É possível ser que o php ou apache tenha configurações de
otimização especificas daquela aplicação, que podem acabar vazando ou não serem ideais
para outras aplicações.
No ambiente conteinerizado, pode-se rodar a sua versão de apache e php, enquanto
outro colega roda também sua própria versão, e os dois compartilham a mesma máquina.
Isso ocorre porque um ambiente de desenvolvimento em contêiner isolará todas as
dependências que o aplicativo precisa em uma imagem do Docker; não é necessário instalar
nada além do Docker na máquina de desenvolvimento.
Dessa forma, é possível facilmente desenvolver aplicativos para diferentes pilhas sem
alterar nada na máquina de desenvolvimento.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Configurando

Para efeito de exemplo, pode-se clonar um projeto de exemplo do GitHub:

O projeto possui um arquivo Dockerfile. Os Dockerfiles descrevem como montar um sis-


tema de arquivos privado para um contêiner e podem conter alguns metadados que des-
crevem como executar um contêiner com base nessa imagem. O arquivo Dockerfile do
exemplo é:

Dockerfile

Escrever um Dockerfile é a primeira etapa para criar um contêiner de um aplicativo.


Esse Dockerfile descreve a receita da sua infraestrutura para executar a aplicação. Pode-se
pensar nesses comandos do Dockerfile como uma receita passo a passo sobre como criar
uma imagem, onde:

FROM node:6.11.5: inicia a imagem pré-existente node:6.11.5. Essa é uma imagem ofi-
cial, criada pelos fornecedores do node.js e validada pelo Docker para ser uma imagem de
alta qualidade que contém o interpretador do node 6.11.5 e as dependências básicas.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Dessa forma, parte-se com uma imagem node oficial do repositório. Não é necessário se
preocupar com instalar o node. Por exemplo, se o sistema de destino é uma versão especí-
fica do Linux, não é preciso entender como instalar o node nela.
O from indica a base da imagem. Quando ela for construída, terá também o from dela.
20m

WORKDIR /usr/src/app: especifica que todas as ações subsequentes devem ser execu-
tadas no diretório /usr/src/app em seu sistema de arquivos de imagem (nunca no sistema de
arquivos do host).

COPY package.json.: copia o arquivo package.json do host para o local atual (.) na
imagem (nesse caso, para /usr/src/app/package.json).

RUN npm install: executa o comando npm install dentro do sistema de arquivos da
imagem (lerá o package.json para determinar as dependências do node do aplicativo e
instalá-las).

 Obs.: o run é um comando que será executado não na máquina hospedeira, mas na máqui-
na de destino. Rodará dentro da imagem do contêiner durante a sua criação. Ele
rodará com a versão do npm que veio com o node que estava na imagem oficial.

COPY..: copia o restante do código-fonte do aplicativo, do host para o sistema de arqui-


vos da imagem.

Criar e testar a imagem

Na pasta do Dockerfile executa-se o comando:

O Docker irá percorrer cada instrução no Dockerfile, construindo sua imagem à medida
que for avançando.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Se for bem-sucedido, o processo de construção deve terminar com uma mensagem:

Ou seja, será criada a imagem da aplicação, o que será executado. Ela é imutável.
Quando ela for executada e gerar um contêiner (sendo que a imagem é a classe e o con-
têiner é o objeto). Primeiro, dá-se um build na imagem, ela será construída e versionada. É
interessante enviá-la para o repositório de versões, como o repositório público do docker hub
ou em um repositório interno.
Para iniciar um contêiner com base na nova imagem:

Do lado direito, está a porta interna do contêiner (8080); do lado esquerdo, a porta de
fora. Significa que se for feito o local host 8000, ele redirecionará o fluxo para 8080 dentro do
contêiner.

• --publish solicita ao Docker que encaminhe o tráfego recebido na porta 8000 do host,
para a porta 8080 do contêiner (os contêineres têm seu próprio conjunto de portas pri-
vadas; portanto, para acessar um da rede, é necessário encaminhar o tráfego para ele
dessa maneira; caso contrário, as regras de firewall impedirão que todo o tráfego de
rede chegue ao contêiner, como uma postura de segurança padrão);

• --detach pede ao Docker para executar este contêiner em segundo plano;

• --name permite especificar um nome com o qual pode-se referir ao contêiner em


comandos subsequentes, neste caso bb.
25m

Não foi especificado qual processo o container deve executar. Isso não é necessário, pois
a diretiva CMD está contida no Dockerfile; graças a isso, o Docker sabe executar automatica-
mente o processo npm start dentro do contêiner quando ele é inicializado.
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Docker III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Lembre-se de que no dockerfile havia uma linha no final, que era do CMD. Essa linha
define o que será executado no dockerfile quando ele instanciado em um contêiner. Logo, ele
não é executado durante a criação da imagem, mas quando é levantado um contêiner a partir
dela. Dessa forma, está embutido nele o npm start.
O aplicativo pode ser acessado a partir de um navegador em localhost:8000.
O container pode ser excluído com o comando:

Essa é a maneira de execução tradicional dele, sem um orquestrador.

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.

10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
DOCKER IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

DOCKER IV

IMPLANTANDO NO KUBERNETES

Como se faz o conteinerização de uma determinada aplicação?


O primeiro passo é criar um dockerfile, um projeto, e executá-lo com o comando docker
run, no qual executa-se uma instância apenas da aplicação. Cria-se a imagem, faz-se o build
da imagem e executa-se a imagem como docker run. Nesse ponto, ela está pronta para ser
colocada dentro de um orquestrador.
Todos os contêineres no Kubernetes são agendados como pods, que são grupos de
contêineres colocalizados que compartilham alguns recursos.
Dessa forma, em cada um dos nós do Kubernetes haverá um conjunto de pods, em
geral na mesma máquina, os quais poderão ter um ou mais contêineres. O mais simples é
ter um contêiner dentro do pod. O pod será definido em termo de volume de recursos que
pode consumir.
Além disso, em uma aplicação realista, quase nunca se cria pods individuais; em vez
disso, a maioria das cargas de trabalho é agendada como implantações, que são grupos
escaláveis ​​de pods mantidos automaticamente pelo Kubernetes.
Isso porque tem-se o banco de dados, o php etc., e a aplicação será um grupo desses
pods, os quais serão implantados de uma vez, escalonados.
Por fim, todos os objetos do Kubernetes podem e devem ser descritos em manifestos
chamados arquivos YAML do Kubernetes. Esses arquivos YAML descrevem todos os
componentes e configurações do aplicativo Kubernetes e podem ser usados ​​para criar e
destruir facilmente o aplicativo em qualquer ambiente Kubernetes.
Logo, o arquivo YAML, o descritor, tem mais informações do que próprio Docker Link.
Veja um exemplo no bulletin board:
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
DOCKER IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

5m
Ou seja, dentro do arquivo YAML será colocada uma série de especificações sobre como
o pod deve ser executado.
Resumindo:
1. Criar o dockerfile;
2. Fazer o build e gerar a imagem;
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
DOCKER IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

3. Se for implantar no Kubernetes, criar um arquivo YAML descritor do Kubernetes.

Nesse arquivo YAML do Kubernetes, existem dois objetos, separados pelo ---:
• Um Deployment, descrevendo um grupo escalável de pods idênticos. Nesse caso,
haverá apenas uma réplica, ou cópia, do pod, e esse pod (que é descrito sob a chave
template:) possui apenas um contêiner, com base na imagem bulletinboard:1.0;
• Um serviço NodePort que encaminhará o tráfego da porta 30001 em seu host para a
porta 8080 dentro dos pods, permitindo acessar a aplicação da rede.

IMPLANTANDO NO SWARM

O Swarm nunca cria contêineres individuais; em vez disso, todas as cargas de trabalho
do Swarm são agendadas como serviços, que são grupos escalonáveis ​​de contêineres com
recursos adicionais de rede mantidos automaticamente pelo Swarm. É um pouco análogo ao
nó que há no Kubernetes.
Além disso, todos os objetos Swarm podem e devem ser descritos em manifestos
chamados arquivos de stack; esses arquivos YAML descrevem todos os componentes e
configurações do aplicativo Swarm e podem ser usados ​​para criar e destruir facilmente o
aplicativo em qualquer ambiente do Swarm.
Nesse arquivo YAML do Swarm, há apenas um objeto: service, descrevendo um grupo
escalável de contêineres idênticos.
Nesse caso, haverá apenas um contêiner (o padrão) e esse contêiner será baseado na
imagem bulletinboard:1.0.
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
DOCKER IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Além disso, configura o Swarm para encaminhar todo o tráfego que chega à porta 8000
na máquina de desenvolvimento para a porta 8080 dentro do contêiner. Aqui, faz-se também
a configuração das portas de uma forma parecida com o que é feito no Kubernetes.

10m

Como visto, da mesma forma executamos no Kubernetes. Tem-se a imagem pronta,


disponível, feita com o dockerfile. Ela é testada rodando via docker run, localmente. Depois,
pode-se fazer a implantação dela tanto no Kubernetes quanto no Docker Swarm.

DIRETO DO CONCURSO
1. (2018/PR-4/UFRJ/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Considere o
comando a seguir, executado em um terminal linux, com o docker instalado, e utilizando
o repositório padrão do docker:
# docker run --name pgSQL -p 8665:5432 -e POSTGRES_PASSWORD=pswrd
-d postgres

O comando apresentado resultará em um contêiner com as seguintes características:


a. de nome pgSQL, com a base de dados PostgreSQL instalada, com a senha do
usuário postgres equivalente a “pswrd” e com a porta virtual 8665 escutando a porta
real 5432.
b. de nome postgres, com a base de dados PostgreSQL instalada, com a senha do
usuário pgSQL equivalente a “pswrd” e com a porta virtual 5432 escutando a porta
real 8665.
c. de nome pgSQL, com a base de dados PostgreSQL instalada, com a senha do
usuário postgres equivalente a “pswrd” e com a porta virtual 5432 escutando a porta
real 8665.
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
DOCKER IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

d. de nome postgres, com a base de dados PostgreSQL instalada, com a senha do


usuário pgSQL equivalente a “pswrd” e com a porta virtual 8665 escutando a porta
real 5432.
e. de nome postgres, com a base de dados PostgreSQL instalada, com a senha do
usuário pgSQL equivalente a “pswrd” e com a porta virtual 5432 escutando a porta
real 5432.

COMENTÁRIO
Todos os itens que não têm como nome pgSQL estão incorretos.
Nem mesmo a documentação do docker utiliza a terminologia da banca ("porta real" e
"porta virtual").
Note-se que a "porta real" é da virtualização.
Geralmente, a porta da esquerda será da máquina host, convidado, e a porta 5432 será a
interna, onde a aplicação está sendo executada, ou da virtualização.

GABARITO
1. c

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

KUBERNETES

Referências Bibliográficas
https://kubernetes.io/docs/home/ (documentação de referência do Kubernetes)

Introdução
• O Kubernetes é uma plataforma portátil, extensível e de código aberto para geren-
ciamento de cargas de trabalho e serviços containerizados, que facilita a configuração
declarativa e a automação;

É muito importante entender que o Kubernetes trabalha com a virtualização de servido-


res, com o gerenciamento dessa virtualização, dessa containerização. O Kubernetes não é
a solução de container em si, funciona mais como um orquestrador dessa solução de contai-
ner. A solução de container que está envolvida no Kubernetes é a solução de Docker.

• Possui um ecossistema grande e de rápido crescimento;


• Os serviços, suporte e ferramentas do Kubernetes estão amplamente disponíveis;

O nome Kubernetes é originário do grego, que significa timoneiro ou piloto. O Google


transformou o projeto em open-source do Kubernetes em 2014.
5m
ANOTAÇÕES

1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Hypervisor - ex.: virtual box; Container Runtime - ex.: Doker. O container é uma solu-
ção bem mais leve do que uma solução de virtualização, porque a solução de virtualização
vai virtualizar todo o sistema operacional, enquanto a solução de container vai compartilhar
o sistema operacional.

Implantação Tradicional
10m
• As organizações executavam aplicativos em servidores físicos;
• Não havia como definir limites de recursos para aplicativos em um servidor físico,
e isso causava problemas de alocação de recursos;
• Por exemplo, se vários aplicativos forem executados em um servidor físico, pode haver
instâncias em que um aplicativo ocuparia a maioria dos recursos e, como resultado, os
outros aplicativos teriam desempenho inferior;
• Uma solução para isso seria executar cada aplicativo em um servidor físico diferente.
Mas isso não escalou pois os recursos foram subutilizados e foi caro para as organiza-
ções manterem muitos servidores físicos.

Implantação Virtualizada - Hypervisor


• Como solução, a virtualização foi introduzida. Ele permite que se execute várias
máquinas virtuais (VMs) na CPU de um único servidor físico. A virtualização permite
que os aplicativos sejam isolados entre as VMs e fornecem um nível de segurança, já
que as informações de um aplicativo não podem ser acessadas livremente por outro
aplicativo;
• A virtualização permite uma melhor utilização dos recursos em um servidor físico e
permite melhor escalabilidade porque um aplicativo pode ser adicionado ou atualizado
facilmente além de reduzir os custos de hardware;
• Cada VM é uma máquina completa que executa todos os componentes, incluindo seu
próprio sistema operacional, sobre o hardware virtualizado.

Implantação em Containers - ferramenta mais recente


• Os contêineres são semelhantes às VMs, mas eles diminuíram as características
de isolamento para compartilhar o sistema operacional (SO) entre os aplicativos;
ANOTAÇÕES

2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Portanto, os contêineres são considerados leves. Semelhante a uma VM, um con-


têinertem seu próprio sistema de arquivos, CPU, memória, espaço de processo e
muito mais;
• Como eles são desacoplados da infraestrutura subjacente, eles são portáveis
entre nuvens e distribuições de sistema operacional.

Benefícios dos Containers


15m
• Criação e implantação ágil de aplicativos: maior facilidade e eficiência da criação de
imagens de contêiner em comparação ao uso de imagens da VM;
• Desenvolvimento, integração e implementação contínuos: fornece criação e imple-
mentação confiável e frequente de imagens de contêiner com reversões rápidas e
fáceis (devido à imutabilidade da imagem); pode ser implantado a qualquer momento.
• Separação de interesses do Dev e do Ops: crie imagens de contêiner de aplicativo
no momento da criação/liberação, em vez do tempo de implementação, desacoplando
assim os aplicativos da infraestrutura;
• A observabilidade não apenas exibe informações e métricas no nível do sistema ope-
racional, mas também a integridade dos aplicativos e outros sinais;
• Consistência do ambiente de desenvolvimento, testes e produção: executa o mesmo
código em um laptop como na nuvem;
• Portabilidade de distribuição de nuvem e SO: funciona no Ubuntu, RHEL, CoreOS,
no Google, no Google Kubernetes Engine e em qualquer outro lugar;
• Gerenciamento centrado em aplicativo: Aumenta o nível de abstração de executar
um sistema operacional em hardware virtual para executar um aplicativo em um sis-
tema operacional usando recursos lógicos;
• Micro-serviços fracamente acoplados, distribuídos, elásticos e liberados: os apli-
cativos são divididos em partes menores e independentes e podem ser implantados
e gerenciados dinamicamente - não uma pilha monolítica executada em uma grande
máquina de propósito único;
• Isolamento de recursos: desempenho de aplicativo previsível (previsto);
• Utilização de recursos: alta eficiência e densidade (possibilidade de colocar mais
aplicações).
ANOTAÇÕES

3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que o Kubernetes pode fazer?


• Os contêineres são uma boa maneira de agrupar e executar aplicativos. Em um
ambiente de produção, é necessário gerenciar os contêineres que executam os apli-
cativos e garantir que não haja tempo de inatividade;
• Por exemplo, se um contêiner cair, outro contêiner precisará ser iniciado. Não seria
mais fácil se esse comportamento fosse tratado por um sistema?
20m
• O Kubernetes fornece um framework para executar sistemas distribuídos de forma
resiliente. Ele cuida dos requisitos de dimensionamento, failover, padrões de implanta-
ção e muito mais (gerenciamento de contêineres);
• Service discovery e load balancing (Descoberta de serviços e balanceamento de
carga): Expõe um contêiner usando o nome DNS ou usando seu próprio endereço IP.
Se o tráfego para um contêiner for alto, o Kubernetes poderá balancear a carga e dis-
tribuir o tráfego da rede para que a implantação seja estável;
• Storage orchestration (Orquestração de armazenamento): Permite que se monte
automaticamente um sistema de armazenamento de sua escolha, como armazena-
mentos locais, provedores de nuvem pública entre outros;
• Rollouts e rollbacks automatizados (implantações e reversões automatizadas):
Pode-se descrever o estado desejado para os contêineres implantados usando o
Kubernetes e alterar o estado real para o estado desejado a uma taxa controlada. Por
exemplo, você pode automatizar o Kubernetes para criar novos contêineres para sua
implantação, remover contêineres existentes e adotar todos os seus recursos para o
novo contêiner;
• Empacotamento automático: Permite que se especifique quanto de CPU e memória
(RAM) cada container precisa. Quando containeres têm solicitações de recursos espe-
cificadas, o Kubernetes pode tomar decisões melhores para gerenciar os recursos;
• Self-healing (auto-cura): Automaticamente reinicia containers que falham, substi-
tui containers, mata containers que não respondem à sua verificação de integridade
definida pelo usuário e não os disponibiliza aos clientes até que estejam prontos para
veiculação;
• Gerenciamento de configuração e segredos: Permite armazenar e gerenciar infor-
mações confidenciais, como senhas, tokens OAuth e chaves ssh. Pode-se implantar e
atualizar segredos e configurações de aplicativos sem recriar as imagens de contêiner
e sem expor segredos.
25m
ANOTAÇÕES

4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que o Kubernetes NÃO pode fazer?


• O Kubernetes não é um sistema tradicional de PaaS (Platform as a Service) com
tudo incluído. Como o Kubernetes opera no nível do container em vez de no nível
do hardware, ele fornece alguns recursos geralmente aplicáveis comuns aos PaaS,
como implantação, dimensionamento, balanceamento de carga, registro em log e
monitoramento;
• No entanto, o Kubernetes não é monolítico e essas soluções padrão são opcionais
e conectáveis. O Kubernetes fornece os blocos de construção para a construção de
plataformas de desenvolvedores, mas preserva a escolha do usuário e a flexibilidade
onde é importante;
• Não limita os tipos de aplicativos suportados. O Kubernetes visa oferecer suporte
a uma variedade extremamente diversificada de tipos de trabalho, incluindo cargas de
trabalho sem informações de estado, com informações de estado e processamento de
dados. Se um aplicativo puder ser executado em um contêiner, ele deverá funcionar
no Kubernetes;
• Não implanta o código-fonte e não cria seu aplicativo. Os fluxos de trabalho de
Integração, Entrega e Implantação (CI / CD) contínuos são determinados pelas cultu-
ras e preferências da organização, bem como pelos requisitos técnicos;
• Não fornece serviços em nível de aplicativo, como middleware (por exemplo, barra-
mentos de mensagens), estruturas de processamento de dados, bancos de dados (por
exemplo, mysql), caches nem sistemas de armazenamento em cluster como serviços
integrados. Esses componentes podem ser executados no Kubernetes e/ou podem
ser acessados por aplicativos executados no Kubernetes através de mecanismos
portáteis;
• Não dita as soluções de log, monitoramento ou alerta. Ele fornece algumas inte-
grações como prova de conceito e mecanismos para coletar e exportar métricas;
• Não fornece nem exige uma linguagem/sistema de configuração. Ele fornece uma
API declarativa que pode ser alvo de formas arbitrárias de especificações declarativas;
• Não fornece nem adota sistemas abrangentes de configuração, manutenção,
gerenciamento ou auto recuperação de máquinas;
• Kubernetes não é um mero sistema de orquestração. De fato, elimina a necessi-
dade de orquestração. A definição técnica de orquestração é a execução de um fluxo
de trabalho definido: primeiro A, depois B, depois C;
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Em contraste, o Kubernetes é composto por um conjunto de processos de controle


independentes e compostos que conduzem continuamente o estado atual para o
estado desejado fornecido;
• Não importa como você vai de A para C. O controle centralizado também não é
necessário. Isso resulta em um sistema mais fácil de usar e mais poderoso,robusto,
resiliente e extensível.
30m

DIRETO DO CONCURSO
1. (PUC-PR/TJ-MS/TÉCNICO DE NÍVEL SUPERIOR/ANALISTA DE INFRAESTRUTU-
RA DE RED/2017) Sistemas virtualizados e containers são conceitos importantes para
computação na nuvem. Para gerenciar grande número de servidores físicos, virtualiza-
dos e containers, utilizam-se ferramentas especializadas de configuração remota.
Indique a afirmativa que descreve de forma CORRETA os conceitos relativos a sistemas
virtualizados e containers e as ferramentas de gerenciamento disponíveis.

a. Puppet e Ansible são ferramentas que tem a finalidade de simplificar o processo de


gerenciamento de servidores remotos. Essas ferramentas funcionam apenas com
servidores físicos ou virtualizados. Elas não suportam containers.
b. Puppet e Ansible podem ser usados para gerenciar serviços virtualizados. Ansible é
preferível por ser uma ferramenta multi-plataforma, enquanto Puppet funciona apenas
para Linux, pois todos os seus comandos remotos são executados via SSH.
c. Containers e máquinas virtuais são sinônimos, pois ambos são usados para virtua-
lizar o hardware que hospeda um sistema operacional completo, que pode ser dife-
rente do sistema operacional da máquina física.
d. Containers do tipo Dockers podem ser orquestrados apenas pelo Docker Swarm, que
foi desenvolvido especificamente para suportar essa tecnologia de container.
e. Kubernetes é uma ferramenta de orquestração que oferece recursos de gerenciamento
para containers, como balanceamento de carga e migração sem perda de dados.
ANOTAÇÕES

6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O que é Puppet
• O Puppet é uma ferramenta de automação de servidor de última geração e de
código aberto. É composto de uma linguagem declarativa para expressar a configu-
ração do sistema, um cliente e servidor para distribuí-lo e uma biblioteca para realizar
a configuração;
• O principal objetivo do design do Puppet é ter uma linguagem suficientemente expres-
siva apoiada por uma biblioteca poderosa o suficiente para que você possa escrever
seus próprios aplicativos de automação de servidor em apenas algumas linhas de
código. A extensibilidade profunda do Puppet e a licença de código aberto permitem
adicionar funcionalidades conforme necessário e compartilhar suas inovações com
outras pessoas.

O que é Ansible
• Ansible é uma simples e poderosa ferramenta de automatização criada para gerenciar
múltiplas máquinas de uma vez. Além disso, é uma engine que permite executar Ansi-
ble Playbooks;

É uma linguagem que para escrever scripts e juntá-los nos Ansible Playbooks para auto-
matizar tarefas.

• Uma das principais características que faz o Ansible ser atrativo para uso em relação
à automação de serviços é a sua linguagem bastante simples, ao ponto de ser “huma-
namente legível”, isto é, não precisando ter um notável conhecimento técnico para
entender o que está sendo feito. Pelo fato da linguagem ser de fácil entendimento, é
possível começar a criar serviços de automação de forma fácil e rápida. E para auxiliar
ainda mais o entendimento do que está sendo processado, as tasks são executadas
na ordem em que são escritas.

O que é Docker Swarm


• O Docker Swarm ou simplesmente Swarm é uma plataforma de orquestração de con-
têiner de código aberto e é o mecanismo de cluster nativo criado pelo Docker. Todos
os softwares, serviços ou ferramentas que são executados com contêineres do Docker
são executados igualmente bem no Swarm. Além disso, o Swarm utiliza a mesma linha
de comando do Docker;
• O Swarm transforma um pool de hosts do Docker em um único host virtual. O
Swarm é especialmente útil para pessoas que estão tentando se familiarizar com um
ambiente orquestrado ou que precisam aderir a uma técnica de implementação simples.

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Kubernetes
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

RESOLUÇÃO
Resolução da questão anterior
a. Puppet e Ansible são ferramentas que tem a finalidade de simplificar o processo de ge-
renciamento de servidores remotos. Essas ferramentas funcionam apenas com servidores
físicos ou virtualizados. Elas não suportam containers.
b. Puppet e Ansible podem ser usados para gerenciar serviços virtualizados. Ansible é pre-
ferível por ser uma ferramenta multi-plataforma, enquanto Puppet funciona apenas para
Linux, pois todos os seus comandos remotos são executados via SSH.
c. Containers e máquinas virtuais são sinônimos, pois ambos são usados para virtualizar o
hardware que hospeda um sistema operacional completo, que pode ser diferente do siste-
ma operacional da máquina física.
d. Containers do tipo Dockers podem ser orquestrados apenas pelo Docker Swarm, que foi
desenvolvido especificamente para suportar essa tecnologia de container.
e. Kubernetes é uma ferramenta de orquestração que oferece recursos de geren-
ciamento para containers, como balanceamento de carga e migração sem perda
de dados.
35m

GABARITO
1. e

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

8 www.grancursosonline.com.br
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

RED HAT OPENSHIFT

Inicialmente, as atualizações das máquinas eram instaladas na própria máquina. Depois


disso, passou a existir a virtualização em nível de sistema operacional, que eram as máqui-
nas virtuais. Nesse sentido, as virtualizações eram bem pesadas, de modo que era preciso
lançar atualizações o ano inteiro. Com a evolução do desenvolvimento, passou-se a ter o
Docker, que é uma virtualização mais leve. Assim, o Docker é a ferramenta que permite fazer
isso. Porém, quando é preciso rodar várias imagens Docker, é preciso alguma ferramenta
para gerenciar isso. Nesse cenário, surge o Kubernetes. Então o Kubernetes é uma ferra-
menta que gerencia as imagens Docker em execução.
O Kubernetes é um produto open source desenvolvido pelo Google. Contudo, algumas
empresas querem suporte, uma atualização ou um auxílio para trabalhar com ele. Diante
disso, a Red Hat desenvolveu o OpenShift – um empacotamento do Kubernetes que permite
o gerenciamento das imagens Docker.

• O Red Hat OpenShift Container Platform é uma plataforma de aplicações em contai-


ners que permite às empresas acelerar e otimizar a implantação, a entrega e o desen-
volvimento de aplicações on-premise ou em nuvem – é o DevOps. Quando se fala
on-premise, isso quer dizer que é possível rodar o OpenShift dentro da empresa;
• O OpenShift é uma solução de conteinerização de nível empresarial, segura e confiá-
vel, desenvolvida em Kubernetes de código aberto;
• Possui componentes adicionais para fornecer autoatendimento pronto para uso, pai-
néis, automação-CI/CD, registro de imagem de contêiner, suporte multilíngue, outras
extensões do Kubernetes e recursos de nível empresarial;
• Então, ele pega uma série de recursos de gerenciamento de usuários, organiza-os e
entrega um pacote para as empresas começarem a trabalhar com eles.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Arquitetura

• RHEL CoreOS – O sistema operacional base é o Red Hat Enterprise Linux CoreOS.
O CoreOS é uma versão leve do RHEL, que fornece recursos essenciais do sistema
operacional e combina a facilidade de atualizações remotas do Container Linux com o
kernel Red Hat Enterprise Linux para hosts de contêiner;
• CRI-O – CRI-O é uma alternativa leve do Docker. Ele utiliza os contêineres que vêm no
Docker, sendo uma solução mais leve. É uma interface de tempo de execução de con-
têiner do Kubernetes que permite usar tempos de execução compatíveis com a Open
Container Initiative. O CRI-O suporta imagens de contêiner OCI de qualquer registro
de contêiner. Por sua vez, em cima dele vem o Kubernetes;
5m
• Kubernetes – Orquestra e organização da execução dos pods. Kubernetes é o meca-
nismo de orquestração de contêineres padrão do setor, gerenciando vários hosts
master e workers para executar contêineres. Os recursos do Kubernetes definem
como os aplicativos são criados, operados, gerenciados etc.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• ETCD – ETCD é um banco de dados distribuído de pares chave-valor, armazenando


clusters, configuração de objetos Kubernetes e informações de estado;
• Extensões do OpenShift Kubernetes – As extensões do OpenShift Kubernetes são
definições de recursos personalizados (CRDs) no banco de dados Kubernetes ETCD,
fornecendo funcionalidade adicional em comparação com uma implantação do Kuber-
netes padrão;
• Serviços em contêineres – a maioria dos recursos internos é executada como contê-
ineres em um ambiente Kubernetes. Eles estão cumprindo as funções de infraestru-
tura básica, como rede, autenticação etc;
• Além disso, ele traz os tempos de execução (runtimes) e o xPaaS – são imagens e
modelos de contêiner prontos para uso para desenvolvedores. Um conjunto de ima-
gens base para produtos de middleware JBoss, como JBoss EAP e ActiveMQ, e para
outras linguagens e bancos de dados Java, Node.JS, PHP, MongoDB, MySQL etc;
• No topo de toda a arquitetura vêm as ferramentas DevOps – Rest API fornece o prin-
cipal ponto de interação com a plataforma. WEB UI, CLI ou outras ferramentas CI/CD
de terceiros podem se conectar a essa API e permitir que os usuários finais interajam
com a plataforma.

Principais Componentes

Ele é organizado através de uma divisão entre a Master e o Node. Dentro da Master, ele
tem o controlador. Na divisão Node, ele tem vários nós controlados. O Master, nesse sentido,
faz o próprio gerenciamento dos elementos. Os nós ficam com a carga de trabalho.
Posto isso, a parte Master tem os seguintes componentes:

• API Server (valida e configura objetos Kubernetes);


• etcd (armazena as informações dos bancos de dados, a configuração de objeto
e estado);
• Controller Manager Server (observa as alterações no banco de dados e atualiza o ser-
vidor de API desses objetos de Kubernetes);
• Kubectl (gerencia as execuções conectadas, os contêineres locais do Master).
10m
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O Kubernetes tem um conceito mais declarativo. Então, o Kubernetes tem um nível de


controle que funciona na medida em que o usuário fala o que ele quer de maneira mais
declarativa.
Já os principais elementos do Node são: o Kubelet, o Kube proxy (faz a conexão dele
com a internet) e o gerenciamento dos contêineres dentro do Kubelet.

Cluster Masters

• Cluster Masters estão executando serviços necessários para controlar o cluster


OpenShift, como API Server, etcd e o Controller Manger Server;
• O API Server valida e configura objetos do Kubernetes;
• O banco de dados etcd armazena as informações de configuração do objeto e o estado;
• O Controller Manager Server observa as alterações no banco de dados etcd e as
impõe por meio do servidor de API nos objetos do Kubernetes;
• Kubelet é o serviço que gerencia requisições conectadas a containers locais
nos masters;
• CRI-O e Kubelet estão sendo executados como serviços gerenciados pelo Systemd.

Cluster Workers

• Executam 3 serviços principais: o Kubelet, Kube-Proxy e o Container Runtime CRI-O;


• Os workers são agrupados em CRDs MachineSets;
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Kubelet é o serviço que aceita as solicitações provenientes do Controller Manager


Server implementando alterações nos recursos, implantando recursos e destruindo
conforme solicitado;
• O Kube-Proxy gerencia a comunicação com os pods e entre nós do worker;
• CRI-O é o tempo de execução do contêiner;
• Da mesma forma, para o Kubernetes padrão, o menor objeto é o Pod em um cluster
do OpenShift. Assim, a sua unidade de execução são os pods. O pod pode ter vários
contêineres dentro dele;
• MachineSets são nós de agrupamento de recursos personalizados, como nós de tra-
balho, para gerenciar o escalonamento automático e a execução de pods de recursos
de computação do Kubernetes;
• A alta disponibilidade é incorporada à plataforma executando serviços de plano de
controle em vários mestres e executando recursos de aplicativos em ReplicaSets por
trás de Serviços em nós do trabalhador. A alta disponibilidade garante que um sistema
consiga replicar para outros nós mesmo em uma situação em que se caia alguns
de seus nós. Essa alta disponibilidade é muito importante principalmente para gran-
des empresas.

Operadores

Os operadores são métodos para gerenciar os serviços do OpenShift e eles são


divididos em:

• Operadores de plataforma – As operadoras incluem serviços críticos de rede, monito-


ramento e credenciais. Os operadores da plataforma são responsáveis por gerenciar
os serviços relacionados a toda a plataforma OpenShift. Esses operadores fornecem
uma API para permitir que os administradores configurem esses componentes. A pla-
taforma do OpenShift e do próprio Kubernete tem vários recursos diferentes. Ela tem
a parte de rede/proxy, a parte dos próprios contêineres. Diante disso, é necessário
operar tudo isso para ter conexões com aquele sistema. Por sua vez, são os operado-
res de plataforma que permitirão que isso seja feito;
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Operadores de aplicativos – Os operadores relacionados ao aplicativo são gerencia-


dos pelo Cluster Operator Lifecycle Management. Esses operadores são operadores
da Red Hat ou operadores certificados de terceiros e podem ser usados para gerenciar
cargas de trabalho de aplicativos específicos nos clusters.

Projetos

Outra divisão que o Kubernetes e o OpenShift permitirão é a dos projetos. Ao geren-


ciar uma grande equipe, é importante que várias pessoas tenham acesso aos recursos que
possam gerenciar isso. Essa divisão é chamada de projeto. Então, o projeto é uma forma
de dividir uma série de recursos para que, por exemplo, não seja necessário deixar tudo por
conta da administradora do OpenShift.

• Os projetos são recursos personalizados usados no OpenShift para agrupar recursos


do Kubernetes e fornecer acesso aos usuários com base nesses agrupamentos;
• Os projetos também podem receber cotas para limitar os recursos disponíveis, número
de pods, volumes etc;
15m
• Um projeto permite que uma equipe organize e gerencie suas cargas de trabalho iso-
ladamente de outras equipes.

Rede

Quando se fala em Kubernetes e Docker, outra parte essencial é a de gerencia-


mento de rede.

• O OpenShift usa recursos de Service, Ingress e Route para gerenciar a comunicação


de rede entre os pods e rotear o tráfego para os pods de fontes externas do cluster,
principalmente para definir regras como de Firewall, roteamento, código para entrar ou
não na internet, restrição de portas, entre outras coisas;
• O recurso de service expõe um único IP enquanto o load balancer equilibra o tráfego
entre os pods localizados atrás dele no cluster,
• Um recurso Route fornece um registro DNS, disponibilizando o serviço para fontes
externas de cluster. O nome NS permite distinguir um cluster do outro;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O Ingress Operator implementa uma API do controlador de ingress e permite o acesso


externo aos serviços executados no OpenShift Container Platform.

Para se ter alguma ideia dos componentes, veja o diagrama a seguir:

Service Mesh

• O OpenShift Service Mesh fornece controle operacional sobre a funcionalidade do ser-


vice mesh e uma maneira de conectar, proteger e monitorar aplicativos de microsser-
viço em execução na plataforma;
• Ele é baseado no projeto Istio, usando uma malha de proxies de envio de forma trans-
parente, fornecendo descoberta, balanceamento de carga, autenticação serviço a ser-
viço, recuperação de falhas, métricas e monitoramento;
• A solução também fornece testes A/B, versões canário, limitação de taxa, controle de
acesso e autenticação de ponta a ponta. A limitação de taxa é bastante importante
para evitar ataques de DOS (negação de serviços) ou a execução por algum usuário
de todos os recursos.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Como ilustra a imagem a seguir, o service mesh tem os proxys na frente das máquinas,
Isso bate no Istio, que conseguirá direcionar os serviços entre as máquinas A, B e C, contro-
lando tanto o tráfego de entrada como o de saída dessas máquinas.

Logging

Outro ponto importante é o gerenciamento de logging. O logging utiliza outro produto


open source chamado de Elasticsearch, que é uma espécie de banco de dados para guardar
bastante unidades de texto. Já o Kibana proporciona o gerenciamento de gráficos.

• Um Elasticsearch, Fluentd e Kibana (EFK) integrado fornece a funcionalidade de log


em todo o cluster;
• O Fluentd é implantado em cada nó e coleta todos os logs de nó e contêiner gravan-
do-os no Elastisearch;
• Kibana é a ferramenta de visualização onde desenvolvedores e administradores podem
criar painéis;

Então, para se ter um sistema de Docker bem amplo, são necessárias várias ferramentas
distintas, até mesmo na parte de logging.
20m
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Monitoramento

Além do logging, tem o monitoramento. O monitoramento serve para se saber quanto do


CPU se está utilizando, quanto de memória se está gastando, quais requisições estão dando
certo e quais estão falhando.

• O OpenShift possui uma solução de monitoramento integrada pré-instalada com base


no ecossistema Prometheus mais amplo;
• Ele monitora os componentes do cluster e alerta os administradores do cluster sobre
problemas;
• Ele usa o Grafana para visualização com painéis;

Medição

• A medição se concentra em dados de métrica em cluster usando o Prometheus como


fonte padrão de informações;
• A medição permite que os usuários façam relatórios sobre namespaces, pods e outros
recursos do Kubernetes;
• Permite a geração de Relatórios com jobs ETL periódicos utilizando consultas SQL;

Serverless

O recurso de Serveless é um nível de abstração um pouco mais alto e que é oferecido


pelo OpenShift.

• O OpenShift Serverless pode executar APIs nativas do Kubernetes, bem como lin-
guagens e estruturas familiares, para implantar aplicativos e cargas de trabalho de
contêiner;
• O OpenShift Serverless é baseado no projeto de código aberto Knative, oferecendo
portabilidade e consistência em ambientes híbridos e multinuvem;
ANOTAÇÕES

www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Então, escreve-se basicamente um código, uma função e não se define o servidor. Por
exemplo: escreve-se um código Java e o próprio ambiente do OpenShift consegue levantar
esse código e executá-lo sem que se levante um servidor de forma explícita. De toda forma,
implicitamente é necessário se ter um servidor.

Virtualização Nativa de Contêiner

• A virtualização nativa de contêiner permite que administradores e desenvolvedores


executem e gerenciem cargas de trabalho de máquinas virtuais juntamente com cargas
de trabalho de contêiner;
• Ele permite que a plataforma crie e gerencie máquinas virtuais Linux e Windows,
importe e clone máquinas virtuais existentes;
• Ele também fornece a funcionalidade de migração ao vivo de máquinas virtuais
entre nós;

Automação, CI/CD

O OpenShift já vem com várias ferramentas que fornecem recursos para o levantamento
das máquinas, a obtenção dos pods e do serviço para fazer a compilação e implantação do
código, a integração contínua, entre outros recursos.

• Compilação do Docker – A estratégia de criação de imagem de compilação do Docker


permite que os desenvolvedores com conhecimento de conteinerização do Docker
definam suas próprias compilações de imagem baseadas em Dockerfile. Ele espera
um repositório com um Dockerfile e todos os artefatos necessários;
• Source-to-image – Source-to-image pode extrair código de um repositório detectando
o tempo de execução necessário e criando e iniciando uma imagem base necessá-
ria para executar esse código específico em um pod. Se a imagem for criada com
sucesso, ela será carregada no registro de imagem interno do OpenShift e o Pod
poderá ser implantado na plataforma. Ferramentas externas podem ser usadas para
implementar alguns dos recursos de CI e estender a funcionalidade OpenShift CI/
CD, por exemplo, com testes, No Dockerfile, explicita-se a imagem que se quer. Já
no Source-to-image, escreve-se somente o código e ele tenta identificar qual o tipo de
máquina virtual necessária;
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Fluxos de imagem – Os fluxos de imagem podem ser usados ​​para detectar alterações
no código do aplicativo ou nas imagens de origem e forçar uma ação de reconstrução/
reimplantação do pod para implementar as alterações. Os fluxos de imagens agrupam
imagens de contêiner marcadas por tags e podem gerenciar o ciclo de vida do contê-
iner relacionado de acordo. Os fluxos de imagem podem atualizar automaticamente
uma implantação se uma nova imagem de base for lançada na plataforma.
25m
• Pipelines OpenShift – Com o OpenShift Pipelines, os desenvolvedores e administra-
dores de cluster podem automatizar os processos de criação, teste e implantação do
código do aplicativo na plataforma. Com pipelines é possível minimizar o erro humano
com um processo consistente. Um pipeline pode incluir código de compilação, testes
de unidade, análise de código, segurança, criação de instalador, construção e implan-
tação de contêiner. Nos pipelines do OpenShift, cada etapa do pipeline é executada em
seu próprio contêiner, permitindo que ele seja dimensionado de forma independente.
Portanto, o pipeline faz o fluxo completo, desde a parte do código até a implantação;

Como foi mostrado, o OpenShift tem várias ferramentas para fazer com que a utilização
do Docker e de contêiner seja completa. Além disso, ele busca trazer uma consistência no
resultado do gerenciamento dos Dockers e contêineres. Ele junta para isso vários softwares
que já existem como Elasticsearch, Prometheus, Kubernetes, entre outros, entregando uma
infraestrutura bastante coesa.

DIRETO DO CONCURSO
1. (2020/CESPE/CEBRASPE/TJ-PA/ANALISTA JUDICIÁRIO – ANÁLISE DE SISTEMAS
– SUPORTE) O Openshift provê recursos a partir do kubernetes, sendo capaz de exe-
cutar e disponibilizar aplicações a partir de contêineres. As imagens dos contêineres no
Openshift podem ser armazenadas no componente denominado
a. pod.
b. build.
c. secret.
d. registry.
e. master.
ANOTAÇÕES

www.grancursosonline.com.br 11
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO

d. O registry ou registro de imagem de contêiner é o elemento que armazena imagens dos


contêineres O registry é um pedaço do software que vai criando versões de aplicações.
Diante disso, na medida que se precisa implantá-las, acessa-se o registry e puxa a imagem
que o usuário está precisando.
c. Secre é uma parte para armazenamento de segredos como a senha de acesso à ban-
co de dados.
a. O pod é a menor unidade de execução do OpenShift, que pode incluir vários contêineres.
b. A parte de build é um processo.
e. O Master é o nó do OpenShift que gerencia os demais nós.

2. (2020/CESPE/CEBRASPE/TJ-PA/CARGO/ANALISTA JUDICIÁRIO – ANÁLISE DE


SISTEMAS – SUPORTE) Em um cluster Openshift, há uma série de configurações que
são feitas e devem ser persistidas. O estado persistente do master é armazenado no
componente
a. etcd.
b. haproxy.
c. API server.
d. namespace.
e. replica controller.

COMENTÁRIO
• Um dos componentes do OpenShift é permitir o armazenamento do estado e das con-
figurações.
• Haproxy é proxy de alta disponibilidade.
• ETCD – ETCD é um banco de dados distribuído de pares chave-valor, armazenando
cluster, configuração de objetos Kubernetes e informações de estado;
• Extensões do OpenShift Kubernetes – As extensões do OpenShift Kubernetes são
definições de recursos personalizados (CRDs) no banco de dados Kubernetes ETCD,
fornecendo funcionalidade adicional em comparação com uma implantação do Kuber-
netes padrão;
ANOTAÇÕES

www.grancursosonline.com.br 12
DESENVOLVIMENTO DE SISTEMAS
Red Hat Openshift
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Serviços em contêineres – a maioria dos recursos internos é executada como contê-


ineres em um ambiente Kubernetes. Eles estão cumprindo as funções de infraestru-
tura básica, como rede, autenticação etc.
30m

GABARITO
1. d
2. a

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 13

Você também pode gostar