← Questões de Programação

Programação · FGV · 2022

Questão comentada de Programaçã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 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á:

Gabarito: D

Em Hibernate, a SessionFactory e um objeto pesado de inicializacao, mas depois de criado ele fica pronto para uso compartilhado entre varias threads. Isso acontece porque ele e imutavel no uso normal e guarda principalmente metadados do ORM, como mapeamentos, configuracoes e caches, sem ficar alterando seu estado a cada operacao. Na pratica, a SessionFactory e pensada para ser criada uma vez e reutilizada pela aplicacao inteira, o que combina bem com ambientes concorrentes. O ponto importante e nao confundir SessionFactory com Session. A Session nao e thread-safe e nao deve ser compartilhada entre threads, pois representa a unidade de trabalho de cada fluxo de execucao. Ja a SessionFactory funciona como uma fabrica de Sessions, podendo ser usada em paralelo sem problema. Por isso, o gabarito D esta correto: ele diz exatamente que o objeto SessionFactory e imutavel e que seu estado interno contem os metadados ORM. Essa e a ideia doutrinaria consolidada no proprio uso do Hibernate: SessionFactory e compartilhavel, enquanto Session e contextual e descartavel.

Continue treinando

Questões relacionadas