Olá!
Eu na verdade já atuo no mercado há um bom tempo e estou fazendo cursos Alura para aprender do forma estruturada coisas que já faço. Em especial coisas que me ensinaram a sempre fazer de uma mesma forma mas sem entender o motivo. Posto isto, eu queria pedir licença para citar EJB em minha questão (assunto que é posterior ao conteúdo de um curso de JPA).
Nos últimos anos me foi empurrado goela abaixo que ao criar um método em uma classe EJB era uma boa prática anotar o mesmo como NOT_SUPPORTED e a explicação que ouvi era de que era utilizar um recurso desnecessariamente abrir uma transação para fazer apenas uma consulta ao banco (quando não houvesse persistência, remoção ou alteração de algum dado).
Eu vi ao longo das aulas que para facilitar a vida saímos copiando todas as linhas do código que abrem e fecham as transações, bem como o fechamento do EntityManager (e apesar do código deste curso falhar nisso a partir de uma refatoração feita no começo, também fechar o EntityManagerFactory).
Minha pergunta é sobre, em caso de estarmos fazendo apenas uma consulta no banco, o que disso tudo é verdadeiramente necessário? É necessário abrir e fechar uma transação? É necessário fechar o EntityManager e o EntityManagerFactory? Por que tudo isso é ou não é necessário?