Estou tentando usar a JPA da Toplink com uma coneção por JNDI configurada pela Locaweb e não funciona. Minha aplicação não reconhece de forma alguma o “nome” de jndi que me passaram.
Reclamei em um chamado e responderam que a configuração realmente estava errada. :x Corrigiram e fizeram um teste na minha área com uma conexão em JSP que funciona:
Context context = new InitialContext();
Context lautx = (Context) context.lookup("java:comp/env");
ds = (DataSource)lautx.lookup("jdbc/jndiname");
conexao = ds.getConnection();
out.write("Conectado via JNDI!<br><br>");
Statement stmt= conexao.createStatement();
conexao.close();
Mas eu preciso que funcione com JPA… Aqui na minha máquina funciona (tomcat configurado por mim)
Alguém sabe se tem algum outro macete que preciso configurar para conseguir usar a persistência por JPA? :?: :?:
Minha configuração por JPA:
<persistence-unit name="newsPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>jdbc/jndiname</jta-data-source>
<properties/>
</persistence-unit>
Erro que aparece no log:
Caused by: javax.persistence.PersistenceException: Exception [TOPLINK-7060] (Oracle TopLink Essentials - 9.1 (Build b27)): oracle.toplink.esse
ntials.exceptions.ValidationException
Exception Description: Cannot acquire data source [jdbc/jndiname].
Internal Exception: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:180)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:78)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:113
)
A propósito, tenho JVM dedicado.