1
O Java Spring Framework (Spring Framework) é um framework bastante popular em organizações de desenvolvimento de software, para criar aplicativos profissionais que são executados na Java Virtual Machine (JVM). O Spring Boot se baseia nos seguintes princípios: I. Prover uma experiência de finalização de projeto (getting started experience) extremamente rápida e direta. II. Apresentar uma visão bastante opinativa (opinionated) sobre o modo como devemos configurar nossos projetos Spring, mas, ao mesmo tempo, flexível o suficiente para que possa ser facilmente substituída de acordo com os requisitos do projeto. III. Fornecer uma série de requisitos não funcionais já pré-configurados para o desenvolvedor, como: acesso a base de dados, servidor de aplicações/servlet embarcado, etc. IV. Não prover nenhuma geração de código e minimizar a zero a necessidade de arquivos XML. Estão corretos:
Somente os itens I e IV
Somente os itens I, II e III
Somente os itens II, III e IV
Somente os itens II e III
2
No projeto interdisciplinar um grupo de alunos na semana de conclusão do Sprint percebeu que não havia finalizado todo o trabalho que havia se comprometido no planejamento da Sprint. Qual deve ser a ação tomada pela equipe nestes casos?
Buscar ajuda com os outros times envolvidos na disciplina, de maneira a agregar valor, convidando para se juntar ao esforço de entrega.
Comunicar ao professor que vai atrasar a entrega justificando os problemas enfrentados.
O grupo deve acelerar o processo de desenvolvimento, trabalhando o máximo possível durante o dia e a noite para entregar conforme esperado, para manter a moral da equipe elevada considerando sua responsabilidade no trabalho.
Entregar o que estiver concluído na data planejada e replanejar as próximas entregas incluindo as tarefas não realizadas.
3
No projeto didático a classe ProdutoServico ficou responsável por associar a imagem ao produto no método consultaCatalogo ( ). Considere a implementação do método consultaCatalgo( ), apresentado no código abaixo, para analisar as asserções, suponha que as importações estão corretas. //imports omitidos @Service public class ProdutoServico implements IProdutoServico { @Autowired IProdutoRepository repository; @Autowired ImagemServico imagemServico; Logger logger = LogManager.getLogger(this.getClass()); @Override public List<Catalogo> consultaCatalogo() { Catalogo c = null; List<Catalogo> lista = new ArrayList<>(); List<Produto> listaP = repository.findAll(); List<Imagem> listaI = imagemServico.getAll(); for (Produto p : listaP) { for (Imagem i : listaI) { if (p.getId().equals(i.getId())) { c = new Catalogo(p.getId(), p.getDescricao(), p.getCategoria(), p.getCusto(), p.getQuantidadeNoEstoque(), i.getArquivo()); lista.add(c); } } } return lista; } } I - A classe ProdutoServico demonstra um uso simples de herança ao definir a implementação como uma extensão da classe IProdutoServiço no entanto, há um erro no construtor quando é executada a linha " List<Imagem> listaI = imagemServico.getAll();" visto que a imagem deveria ser obtida de repositório e não do serviço. II - Se o id do produto existir mas o id da imagem não existir gera uma exception do tipo IllegalArgumentException. III - O método consultaCatalogo ( ) gera uma lista de produto com a imagem associada obtendo o atributo imagem do método getArquivo( ) da classe Imagem. IV - A injeção de dependências se refere ao processo de fornecer as dependências necessárias a uma classe através de injeção de objetos em vez de criar esses objetos dentro da classe. Isso significa que as dependências são injetadas por uma fonte externa, em vez de serem criadas internamente na classe, neste caso o uso @Autowired ImagemServico injeta um objeto na classe ProdutoServico. Estão corretas somente as asserções:
III e IV
II e IV
II e III
I e III
4
Qual é o objetivo de se gerar o build do projeto no Spring Boot?
Um build ocorre quando é necessário gerar uma versão executável do código.
No Java é opcional pois não ocorre em linguagens interpretadas.
O build depende da IDE sendo utilizando somente em linguagens interpretadas.
O build permite executar os casos de teste de forma automática durante o desenvolvimento da aplicação.
5
No projeto analisado em aula, o grupo deve corrigir um defeito na aplicação que está armazenada em um repositório GIT. Após o término das alterações necessárias, o código deve ser reintegrado no ramo principal pela equipe para ser apresentado na próxima aula. Analise as operações abaixo, considerando o plugin Eclipse Git, utilizado na aula: 1. team>commit 2. team > commit and push 3. git clone 4. team > add to index 5. team > pull Supondo que você ainda não tem o código na sua máquina, para que você possa trabalhar na correção do defeito, a ordem correta das operações acima seria:
5 – 3 – 4 – 2
3 – 4 – 1 – 2
2 – 1 – 3 – 4
3 – 2 – 5 – 4
6
Considere a interface IProdutoRepository.java abaixo, de uma aplicação Java que utiliza Spring Boot JPA, em condições ideais. import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface IProdutoRepository extends JpaRepository <Produto, Long> { } O parâmetro "Long" passado na interface refere-se:
Ao tipo convertido para String automaticamente no JPA para atender requisitos relacionados a CNPJ, RG etc.
A estratégia de autoincremento do banco de dados que suporta números com até 64 bits de capacidade que atende a grande maioria de domínios utilizados em computação.
Ao tipo que estabelece a conexão com o banco de dados, definido no arquivo pom.xml.
Ao tipo da chave primaria definida na entidade adjacente.
7
No contexto do Spring Data JPA, analise a declaração a seguir. @Repository public interface IProdutoRepository extends JpaRepository <Produto, Long> { public List<Produto> findAllByDescricaoIgnoreCaseContaining( ?1 ); } Supondo-se que todas as definições complementares à declaração foram devidamente estabelecidas, é correto afirmar que o trecho ‘?1’ expressa:
uma referência a uma variável de ambiente declarada e definida no Spring Data JPA;
um código que estabelece o uso da cláusula LIKE na execução do comando ‘select’;
uma expressão regular a ser aplicada na execução do comando ‘select’;
o valor de um parâmetro utilizado na invocação do método associado à consulta.
8
Qual o propósito da anotação @PathVariable no estudo de caso analisado em aula?
É usada para extrair o valor de uma página HTML que foi submetida ao servidor de aplicação.
Esta anotação define o container de dados da aplicação
Define o caminho (path) onde a variável está armazenada no servidor de aplicação.
Esta anotação manipula diferentes tipos de requisições HTTP
9
Ao implementar a "Classe1.java" o programador incluiu o seguinte trecho de código: Logger logger = LogManager.getLogger(Classe1.class); Qual o objetivo da classe Logger utilizada na programação do estudo de caso?
Permite enviar uma mensagem na console ou em um arquivo de dados para rastrear o caminho de execução da aplicação.
Aumenta a legibilidade do código em tempo de edição.
Permite comentar uma classe no momento de edição
Quando associado ao "System.out.println" permite enviar uma mensagem na console da IDE.
10
Em uma aplicação Java que utiliza JPA, em condições ideais, o método da interface utilizado para salvar um objeto de uma entidade da aplicação chamada Produto na tabela Produto do banco de dados é o
add
append
execute
save
pesist
11
O trecho de código abaixo, utiliza a biblioteca Spring Boot JPA, e apresenta a declaração de uma chave primária de uma entidade de um banco de dados considerando que a responsabilidade de criar o identificador será da aplicação. __________ public class Pessoa { __________ PessoaId id; String endereco; } Assinale a alternativa que preenche, correta e respectivamente, as lacunas do trecho de código acima.
@Entity, @Id
@Entity, @Id @GeneratedValue
@Entity, @Embeddable
@Instance, @Entity
12
O código a seguir é parte de uma aplicação, em condições ideais, que utiliza o Spring Boot. @CrossOrigin @PostMapping public ResponseEntity<Object> cadastraProduto(@RequestBody ProdutoDTO p) { try { Produto produto = new Produto(); produto.setDescricao(p.descricao); produto.setCategoria(p.categoria); produto.setCusto(p.custo); produto.setQuantidadeNoEstoque(p.quantidadeNoEstoque); Optional<Produto> novoProduto = produtoServico.cadastrar(produto); return ResponseEntity.status(HttpStatus.CREATED).body(novoProduto.get()); }catch (Exception e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( I ); } } Para incluir no corpo da mensagem de retorno o motivo que gerou a Exception de maneira que o cliente deste serviço tenha uma descrição clara do erro como deve ser preenchida a lacuna I :
e.getLocalizedError ( )
e.getStackTrace ( )
e.getCauseError( )
e.getMessage()
13
O que significa mapeamento objeto relacional no contexto da Java Persistence API (JPA) utilizada no projeto piloto?
Permite controlar a injeção de dependencias.
É utilizado para mapear os atributos da classe Java nos atributos da tabela no sistema gerenciador de banco de dados relacional
Constitui a base para o diagrama de entidade e relacionamento no projeto de banco de dados
Permite a validação de atributos no banco de dados (bean validation)
14
Existem algumas vantagens na utilização da JPA. Considerando o projeto piloto analisado em aula, selecione a principal vantagem em utilizar a JPA como uma camada de abstração do mecanismo de persistência no banco de dados:
O uso de mapeamento objeto-relacional (ORM), que permite definir o mapeamento entre classes Java e tabelas de banco de dados de uma maneira independente do banco de dados específico.
A segurança de acesso a camada de persistência configurada automaticamente pela JPA
A precisão que é obtida pelas querys de consultas.
O desempenho da JPA que é superior a conexão direta com o banco de dados
15
O que é JPQL utilizada na JPA?
Java Persistence Query Language é usada para construção de querys
É uma interface utilizada para conexão com o Banco de Dados
Java Persistence Query Laboratory permite analise de desempenho para JPA
É o provedor de pertistência da JPA
16
O Spring Data JPA tem como objetivo fornecer os repositórios baseados em JPA para simplificar a implementação da camada de acesso a dados. Selecione entre as opções abaixo a que descreve a assinatura da interface de repositório: "Para salvar, atualizar, consultar ou excluir entidades, cria-se uma interface de repositório, que respectivamente deve ser anotada e estendida pela interface ... ":
anotada com @JpaRepository e estendida com DataRepository.
anotada com @Repository e estendida por CrudRepository ou JpaRepository.
anotada com @Component e estendida por OperationRepository.
anotada com @CrudRepository e estendida com FactoryRepository
anotada com @SpringData e estendida por JPAFactory.
17
Ao desenvolver softwares comerciais, boa parte do tempo investido na programação é gasto com a codificação de queries SQL para manipular um banco de dados, inserindo, alterando, excluindo e localizando dados nas tabelas. Outro grande problema é a mudança de paradigma. Na programação orientada a objeto, os dados são representados por meio de classes e atributos, podendo utilizar herança, composição para relacionar atributos, polimorfismo, enumerações, entre outros. Sistemas gerenciadores de banco de dados representam os dados utilizando tabelas e colunas, que possuem chave primária (PK) e podem ser relacionadas por meio da criação de chaves estrangeiras (FK) com outras tabelas. Isto faz com que o programador tenha que pensar de duas maneiras diferentes para fazer um único sistema. Pensando nisso, várias ferramentas vêm sendo desenvolvidas para auxiliar nesta tarefa. Essas ferramentas são conhecidas como ferramentas de mapeamento objeto-relacional (ORM). O Java Persistence API (JPA) fornece um mecanismo para gerenciar a persistência e mapeamento relacional e objeto. Em relação a JPA pode ser afirmar que: I) No estudo de caso analisado em aula, o objetivo de se utilizar o framework Spring Data JPA é a transformação das classes para tabelas de dados, com a geração dos comandos SQL. II) Uma empresa que opte pela utilização do JPA em seus sistemas enfrentará dificuldades à medida que seus projetos forem crescendo, devido ao fato de que a JPA pode ser considerada inapropriada para a execução de trabalhos em uma arquitetura altamente escalável. III) O Hibernate é de fato o framework ORM, ou seja, a implementação física usada para persistir, remover, atualizar ou buscar dados no SGBD. Por outro lado, o JPA é uma camada que descreve uma interface comum para frameworks ORM. É correto o que se afirma em:
Somente III
I, II, III
Somente I
Somente I, e II
18
Qual é a diferença entre JPA e Hibernate?
Ambos são implementações de um ORM
JPA é especificação e Hibernate a implementação
Hibernate é especificação e JPA a implementação
Ambos são especificações de um ORM
19
Na JPA (Java Persistence API) a anotação que permite mapear uma classe Java para o banco de dados é:
@Entity
@Optional.
@Stateless
@Transient.
20
Qual a função da anotação @GeneratedValue na JPA:
Associar uma classe a uma tabela, indicar chave primária no banco e permitir que a interface gere automaticamente a chave
Associar uma classe a uma tabela, indicar chave primária no banco e permitir o desenvolvedor se encarregue pela geração da chave.
Associar uma classe a uma tabela, permitir que o banco gere automaticamente a chave, de maneira opcional, indicar chave primária no banco
Especificar como os valores de chave primária devem ser gerados para entidades JPA
21
Qual anotação permite declarar uma chave primária de uma entidade JPA.
@Abstract
@Anotations
@Primary
@Id
22
Ao programar a entidade Produto qual foi a estratégia utilizada para geração da chave primária?
Implementar uma clausula de verificação na classe Repository da entidade Produto
Programar na classe ProdutoController o envio de uma mensagem para a camada de visualização quando uma exceção for disparada na tentativa de salvar um registro com código de produto duplicado.
Utilizar o @Valid que permite verificar se houve uma violação de integridade na entrada de dados do usuário.
A estratégia é definida pelo provedor JPA que escolhe a estratégia adequada ao banco de dados subjacente definido na configuração
23
Para configurar o mapeamento de solicitações da Web, o Spring Boot usa os métodos controllers e servem para informar a aplicação o que exibir quando for requisitada uma página no navegador. A anotação pode ser aplicada ao nível da classe e / ou do método em um controlador. A anotação em nível de classe mapeia um caminho ou padrão de solicitação específico para um controlador. O programador pode aplicar anotações adicionais no nível do método para tornar os mapeamentos mais específicos aos métodos do manipulador. Ao se requisitar uma URL em um sistema desenvolvido em Spring Boot, a classe @Controller verificará a URL que foi solicitada, por meio da anotação?
@Entity.
@RestController
@RequestMapping.
@Configuration.
24
Ao programar a entidade da aplicação o desenvolvedor implementou o fragmento de código abaixo. Selecione a opção que está de acordo com a estratégia utilizada: @Entity public class Cliente { @Id String cpf //getters e setters omitidos }
A chave primária associada a esta tabela será gerenciada pelo componente SGBD (Sistema Gerenciador de Banco de Dados) configurado na aplicação.
A chave primaria associada a esta tabela é cpf
A chave primaria associada a esta tabela é Id
A chave primária associada a esta tabela é id_cpf