JPA + Tomcat (Injeção de Dependências)

Olá pessoal! Já procurei a resposta pra essa minha dúvida em vários lugares e nada… então, lá vai:

É possível usar JPA com o servidor Tomcat 6 sem usar JSF?
O que ocorre é que tentei configurar de várias maneiras o datasource no context.xml, o persistence.xml e a forma como meu servlet obtem o EntityManagerFactory e nenhuma alternativa funcionou… o EntityManagerFactory sempre fica nulo… ou seja, não está sendo feita a injeção de dependências.

Tento obter minha fábrica assim:

@PersistenceUnit(unitName="UnidadePersistente") EntityManagerFactory emf;
pra depois usá-la no servlet

Eis o meu persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="UnidadePersistente" transaction-type="JTA"> <provider>oracle.toplink.essentials.PersistenceProvider</provider> <jta-data-source>jdbc/TestDB</jta-data-source> <class>teste.Veiculo</class> <properties> <property name="toplink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence>

E por fim, o context.xml:

<?xml version="1.0" encoding="UTF-8"?> <Context path="/teste"> <Resource auth="Container" driverClassName="org.postgresql.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/TestDB" password="senha" type="javax.sql.DataSource" url="jdbc:postgresql://127.0.0.1:5432/teste" username="administrador" /> </Context>

Eu já trabalho com JPA há algum tempo, porém sempre voltado pra aplicações desktop, nunca tinha me aventurado em uma aplicação web com JPA antes… por isso as dúvidas
Se alguém que já trabalha com JPA e tb usa o Tomcat puder dar alguma dica será de grande valia. Obrigado!

Pra essa pergunta a resposta é sim. Porém eu já trabalhei fazendo aplicações web com jsp/servlets fazendo Servlets “na mão”, e depois com o ActionServlet do Struts. Hoje estou trabalhando num projeto que usa JPA e JSF, tendo Tomcat 6 como container web. Confesso a você que o JavaServerFaces deu um grande salto de qualidade quando o assunto é fazer aplicações web.

Para o seu caso, vou te dar uma idéia que está funcionando comigo:
Implemente uma classe DAO genérica para a tua camada de negócio. E se isso não der certo:

@PersistenceUnit(unitName="UnidadePersistente") EntityManagerFactory emf;
Então usa isso:

private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("UnidadePersistente");
	private static EntityManager em = emf.createEntityManager();

Eu uso JPA com XML, funciona só a beleza!!![/quote]

Valeu pelas dicas Wagner! Vou tentar o que vc disse e posto aqui o resultado…

Sobre o JSF, me pareceu bem produtivo mesmo… a única coisa que não gostei foi do fato do NetBeans criar uma classe New, Edit, List, Detail um controller e um converter pra cada CRUD… a aplicação fica com muitos arquivos que fazem quase a mesma coisa. Embora não seja nada fácil, acho que dá pra resumir alguns desses componentes usando parametrização e reflexão. Vou dar uma olhada melhor pra ver se consigo fazer isso… o problema é que fazendo isso eu deixo de usar a construção automática de código do NetBeans, e com isso vai embora parte da produtividade num primeiro momento. Bom, vou estudar mais a respeito… ainda sou muito newbie em aplicações web! :grin: