Questão de Programação — Frameworks Java — FGV 2022
Programação›Frameworks Java
Código
fg047180
Banca
FGV
Órgão
CGU
Ano
2022
Nível
Superior
Cargo
Auditor Federal de Finanças e Controle - Tecnologia da Informação
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 eorg.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á:
Aerrado, pois a classe SessionFactoryImpl implementa a interface Referenceable;
Berrado, pois a classe SessionFactoryImpl não é thread-safe;
Cerrado, pois a classe SessionFactoryImplementor não é thread-safe;
Dcorreto, pois o objeto do tipo SessionFactory é imutável e seu estado interno contém os metadados ORM;
Ecorreto, pois a classe SessionFactoryImplementor implementa a interface ConcurrentHashMap.
Revelar gabarito e comentário▾
GabaritoD — correto, pois o objeto do tipo SessionFactory é imutável e seu estado interno contém os metadados ORM;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Hibernate – Thread-safety do SessionFactory
Gabarito: letra D. O objeto SessionFactory é imutável e, portanto, thread-safe. Ele armazena os metadados do mapeamento ORM e pode ser compartilhado com segurança entre múltiplas threads. As alternativas A, B e C afirmam erroneamente que não é seguro; a alternativa E atribui uma interface que não existe.
O Hibernate define que a SessionFactory é uma fábrica de sessões, criada uma vez e reutilizada. Seu estado interno (metadados, configurações de conexão, cache de segundo nível) não se altera após a construção, o que garante a segurança em cenários concorrentes. Já a Session (objeto retornado pela fábrica) não é thread-safe e deve ser usada exclusivamente por uma thread por vez.
Característica
SessionFactory
Session
Thread-safe
Sim (imutável)
Não
Estado interno
Metadados ORM, configurações, cache de segundo nível
Conexão com banco, cache de primeiro nível
Compartilhamento entre threads
Seguro
Proibido
Papel
Fábrica de sessões
Unidade de trabalho (transação)
Alternativa A — ❌ Incorreta
Afirma que o desenvolvedor está errado porque SessionFactoryImpl implementa Referenceable. A implementação de uma interface de referência não anula a thread-safety; a classe é imutável, e a interface Referenceable é irrelevante para a segurança concorrente.
Alternativa B — ❌ Incorreta
Diz que SessionFactoryImpl não é thread-safe. Na verdade, a implementação concreta é thread-safe justamente por ser imutável. Confunde SessionFactory com Session.
Alternativa C — ❌ Incorreta
Afirma que SessionFactoryImplementor não é thread-safe. Essa interface estende SessionFactory e mantém a mesma característica de imutabilidade. O desenvolvedor está correto, portanto a afirmação é falsa.
Alternativa D — ✅ Correta ⟵ GABARITO
Correta. A SessionFactory é imutável e contém apenas metadados ORM; logo, pode ser compartilhada entre threads sem risco de corrupção. Esse é o comportamento definido na documentação oficial do Hibernate.
Alternativa E — ❌ Incorreta
Afirma que SessionFactoryImplementor implementa ConcurrentHashMap. Isso é falso. A interface ConcurrentHashMap não é implementada por nenhuma classe do Hibernate; a thread-safety decorre da imutabilidade, não de uma interface de mapa concorrente.
NÃO CAIA NESSA!
A banca espera que o candidato confunda SessionFactory (thread-safe) com Session (não thread-safe). As alternativas B e C exploram exatamente essa troca.