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 II, III e IV
Somente os itens I, II e III
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?
Entregar o que estiver concluído na data planejada e replanejar as próximas entregas incluindo as tarefas não realizadas.
Comunicar ao professor que vai atrasar a entrega justificando os problemas enfrentados.
Buscar ajuda com os outros times envolvidos na disciplina, de maneira a agregar valor, convidando para se juntar ao esforço de entrega.
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.
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?
O build depende da IDE sendo utilizando somente em linguagens interpretadas.
Um build ocorre quando é necessário gerar uma versão executável do código.
O build permite executar os casos de teste de forma automática durante o desenvolvimento da aplicação.
No Java é opcional pois não ocorre em linguagens interpretadas.
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 – 2 – 5 – 4
2 – 1 – 3 – 4
3 – 4 – 1 – 2
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 da chave primaria definida na entidade adjacente.
Ao tipo que estabelece a conexão com o banco de dados, definido no arquivo pom.xml.
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.
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:
o valor de um parâmetro utilizado na invocação do método associado à consulta.
uma expressão regular a ser aplicada na execução do comando ‘select’;
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’;
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.
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
Esta anotação define o container de dados da aplicação
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?
Quando associado ao "System.out.println" permite enviar uma mensagem na console da IDE.
Aumenta a legibilidade do código em tempo de edição.
Permite comentar uma classe no momento de edição
Permite enviar uma mensagem na console ou em um arquivo de dados para rastrear o caminho de execução da aplicação.
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
save
pesist
append
execute
add
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.
@Instance, @Entity
@Entity, @Embeddable
@Entity, @Id @GeneratedValue
@Entity, @Id
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.getMessage()
e.getStackTrace ( )
e.getLocalizedError ( )
e.getCauseError( )
13
O que significa mapeamento objeto relacional no contexto da Java Persistence API (JPA) utilizada no projeto piloto?
Permite a validação de atributos no banco de dados (bean validation)
Constitui a base para o diagrama de entidade e relacionamento no projeto de banco de dados
É utilizado para mapear os atributos da classe Java nos atributos da tabela no sistema gerenciador de banco de dados relacional
Permite controlar a injeção de dependencias.
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 desempenho da JPA que é superior a conexão direta com o banco de dados
A precisão que é obtida pelas querys de consultas.
A segurança de acesso a camada de persistência configurada automaticamente pela JPA
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.
15
O que é JPQL utilizada na JPA?
É uma interface utilizada para conexão com o Banco de Dados
É o provedor de pertistência da JPA
Java Persistence Query Laboratory permite analise de desempenho para JPA
Java Persistence Query Language é usada para construção de querys
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 @Repository e estendida por CrudRepository ou JpaRepository.
anotada com @JpaRepository e estendida com DataRepository.
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:
I, II, III
Somente I, e II
Somente I
Somente III
18
Qual é a diferença entre JPA e Hibernate?
JPA é especificação e Hibernate a implementação
Ambos são especificações de um ORM
Ambos são implementações de um ORM
Hibernate é especificação e JPA a implementação
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
@Id
@Primary
22
Ao programar a entidade Produto qual foi a estratégia utilizada para geração da chave primária?
A estratégia é definida pelo provedor JPA que escolhe a estratégia adequada ao banco de dados subjacente definido na configuração
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.
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?
@Configuration.
@RequestMapping.
@Entity.
@RestController
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 primaria associada a esta tabela é Id
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 primária associada a esta tabela é id_cpf
A chave primaria associada a esta tabela é cpf