Tutorial JPA com Servlets
Coloquei aqui no site um tutorial sobre JPA usando TopLink e MySQL em uma aplicação desktop. Bom, nesse período estou fazendo uma experiência na faculdade de trocar o uso de JDBC com DAO, por JPA utilizando os geradores de código do Netbeans, até então parece que tudo está caminhando bem exceto por alguns problemas que tivemos em sala de aula. O primeiro problema foi a dificuldade de usar o MySQL, e para isso vou colocar um mini tutorial de MySQL em outro post, o segundo problema é para o pessoal que está fazendo a disciplina de programação web temos um outro problema.
A arquitetura projetada pela Sun sugere que usemos EJBs para isolar a parte de acesso a dados, no entanto essa tecnologia não faz parte da ementa da nossa disciplina e portanto não discutimos isso (embora possam ser gerados pelo Netbeans também.) E aí temos um problema, o tutorial anterior pressupõe que o uso do JPA seria gerenciado, mas isso não é possível quando usamos Servlets.
Se quisermos usar JPA com Servlets (que é o que estamos fazendo atualmente) precisamos de algumas pequenas modificações em relação ao tutorial inicial.
A primeira delas é que quando criamos o persistence.xml, devemos desmarcar a opção de usar JTA.
A segunda modificação diz respeito ao JPAController, quando o Netbeans cria a classe com alguns conceitos voltados para a injeção de dependência, mas o que é isso ? É quando o próprio ambiente insere para nós os recursos que são necessários para executar nosso software, isso é uma grande inovação em relação a tudo que precisavamos fazer para conseguir referenciar conexões por exemplo.
Como disse antes, a visão da Sun é que uma aplicação web seja feita para interagir com componentes EJB, mas se não é isso que você quer fazer então temos um problema aqui para gerenciar as dependências. O que pode ser feito é criar um EntityManagerFactory a partir do persistence unit diretamente. Para isso precisamos fazer algumas modificações no código gerado pelo Netbeans.
Como o código já foi gerado no outro tutorial vou apenas mostrar as modificações no código.
O código:
@Resource
private UserTransaction utx = null;
@PersistenceUnit(unitName = “TesteJPAWebPU”)
private EntityManagerFactory emf = null;
Deve ser modificado para:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(“TesteJPAWebPU”);
O código do método create gerado é:
Deve ser substituído pelo seguinte código:
Note os detalhes relacionados a troca da criação da transação para um processo manual.
Com essas duas pequenas modificações já podemos usar o JPA dentro de Servlets para gravar nossos dados com mais facilidades. É claro que os outros métodos como edit e destroy devem ser modificados de forma semelhante.





Leave a Reply