Questão nº 68

Questão de Informática · FGV MPMS 2012 (nº 68)

FGV2012Analista - Informática/Análise de SistemasInformática
Gabarito: Dver comentário ↓

Para garantir o funcionamento correto das aplicações, componentes web devem obedecer a algumas diretrizes. Considerando essas diretrizes, analise as afirmativas a seguir.

I. Transações JTA devem ser iniciadas e concluídas na mesma thread em que o método de serviço/negócio é chamado. Threads adicionais que são criadas para qualquer outra finalidade dentro desse método não devem tentar iniciar transações JTA.
II. Recursos transacionais podem ser adquiridos e dispensados por uma thread diferente da thread do método de serviço/negócio, mas esses recursos não devem ser compartilhados entre essas threads.
III. Objetos de recursos transacionais (por exemplo, objetos de conexão JDBC) devem ser armazenados em campos estáticos já que esses objetos podem ser compartilhados por mais de uma transação simultaneamente.

Assinale:

Resposta comentada

Gabarito Alternativa D

O conceito-chave aqui é que as transações JTA (Java Transaction API) em Java EE são geralmente vinculadas à thread (ou seja, cada transação é gerenciada por uma thread específica) e os recursos transacionais (como conexões de banco de dados) não devem ser compartilhados diretamente entre threads para evitar problemas de concorrência e integridade de dados.

  • (A) Incorreta: A afirmativa I está correta, mas a alternativa D indica que I e II estão corretas.
  • (B) Incorreta: A afirmativa II está correta, mas a alternativa D indica que I e II estão corretas.
  • (C) Incorreta: A afirmativa III está incorreta, pois recursos transacionais não devem ser armazenados em campos estáticos nem compartilhados diretamente entre transações ou threads.
  • (D) Correta:
    • I. Correta: Transações JTA são gerenciadas por um contexto de transação que é tipicamente associado à thread que a iniciou. Tentar iniciar uma nova transação JTA em uma thread filha sem propagação explícita (e complexa) do contexto da transação pai é uma má prática e pode levar a erros ou transações independentes não intencionais.
    • II. Correta: Uma thread diferente pode, sim, adquirir e dispensar seus próprios recursos transacionais (por exemplo, obter uma nova conexão do pool) para realizar seu próprio trabalho. O ponto crucial e correto da afirmativa é que esses recursos não devem ser compartilhados entre threads, pois a maioria dos recursos transacionais não é thread-safe e o compartilhamento direto causaria inconsistências e erros de transação.
  • (E) Incorreta: A afirmativa III está incorreta. A armadilha aqui é sugerir o uso de campos estáticos para recursos transacionais como conexões JDBC. Isso é um erro grave porque campos estáticos significam que haveria uma única instância do recurso compartilhada por todas as threads e transações simultaneamente, o que levaria a sérios problemas de concorrência, corrupção de dados e falhas na gestão das transações, já que esses recursos não são thread-safe e cada transação precisa de seu próprio recurso isolado.

Fonte: FGV MPMS 2012 Analista - Informática/Análise de Sistemas. 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