Questão nº 53

Questão de Desenvolvimento de Sistemas · FGV CGU 2021 - Tarde (nº 53)

FGV2021Auditor Federal de Finanças e Controle - Área Tecnologia da InformaçãoDesenvolvimento de Sistemas
Gabarito: Dver comentário ↓

Considere o desenvolvimento de uma aplicação em um contexto de programação concorrente, em que é esperada a execução simultânea de múltiplas tarefas computacionais. O time utiliza a linguagem de programação JAVA e o framework ORM Hibernate no projeto. Para obter um objeto do tipo `SessionFactory`, o time decide utilizar o arquivo de configuração e as seguintes classes: `org.hibernate.cfg.Configuration`, `org.hibernate.service.ServiceRegistry` e `org.hibernate.service.ServiceRegistryBuilder`.

No início do desenvolvimento da primeira funcionalidade com linhas de execução paralelas (Threads), o time discute se é seguro compartilhar o objeto do tipo `SessionFactory`.

Um dos desenvolvedores afirma que é seguro.

O time concluiu acertadamente que esse desenvolvedor está:

Resposta comentada

Gabarito Alternativa D

Conceito-chave: O SessionFactory é um objeto pesado e caro de criar, que representa todo o mapeamento objeto-relacional (ORM) da aplicação. Ele é thread-safe porque é imutável após a construção: seu estado interno (metadados, SQL gerado, dialeto) não muda, então múltiplas Threads podem ler e usar esse mesmo objeto simultaneamente sem risco de corrupção de dados. Já o Session (criado a partir dele) é leve, não é thread-safe e deve ser usado por uma única Thread por vez.

  • (A) Incorreta: A interface Referenceable (do pacote javax.naming) serve para registro em serviços de nomes (JNDI), não tem relação com segurança em concorrência.
  • (B) Incorreta: A classe SessionFactoryImpl é, sim, thread-safe (por ser imutável), então afirmar que ela "não é thread-safe" é falso.
  • (C) Incorreta: A interface SessionFactoryImplementor (usada internamente) também é thread-safe pelo mesmo motivo: imutabilidade e compartilhamento seguro de metadados.
  • (D) Correta: O SessionFactory é imutável e seu estado interno contém os metadados ORM (mapeamentos, configurações, SQL pré-compilado). Por ser imutável, é seguro compartilhá-lo entre múltiplas Threads sem sincronização explícita.
  • (E) Incorreta: A classe SessionFactoryImplementor não implementa ConcurrentHashMap; ela é uma interface do Hibernate, e a imutabilidade é o que garante a segurança, não uma coleção concorrente.

Armadilha da banca (distrator B): A pegadinha está em confundir SessionFactory com Session. O Session não é thread-safe e deve ser isolado por Thread. O candidato que lembra disso pode marcar "errado" para o SessionFactory por associação incorreta. A banca testa exatamente esse conhecimento: SessionFactory é imutável e seguro; Session é descartável e inseguro.

Fonte: FGV CGU 2021 - Tarde Auditor Federal de Finanças e Controle - Área Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho