Problemas com DataSource em projeto JPA + Tomcat

Boa tarde pessoal,
Estou tentando configurar meu persistence.xml da seguinte forma:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="DSDefault" transaction-type="JTA">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <jta-data-source>java:comp/env/jdbc/DSDefault</jta-data-source>
          <properties>
               <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
               <property name="hibernate.show_sql" value="true" />
          </properties>
     </persistence-unit>
</persistence>

Meu arquivo context.xml está assim:

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <Resource
    	name="jdbc/DSDefault"
        type="javax.sql.DataSource" 
        driverClassName="org.postgresql.Driver"
		url="jdbc:postgresql://localhost/database"
        username="user" 
        password="pass" 
        maxActive="20" 
        maxIdle="10" 
    />    
</Context>

Quando eu executo o projeto, recebo o seguinte erro:

...
Caused by: Exception [EclipseLink-7060] (Eclipse Persistence Services - 1.1.3.v20091002-r5404): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Cannot acquire data source [java:comp/env/jdbc/DSDefault].
Internal Exception: javax.naming.NamingException: This context must be accessed throught a java: URL
     at org.eclipse.persistence.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:433)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:123)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
     at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
     at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:583)
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:227)
     at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:255)
     ... 73 more
Caused by: javax.naming.NamingException: This context must be accessed throught a java: URL
     at org.apache.naming.SelectorContext.parseName(SelectorContext.java:737)
     at org.apache.naming.SelectorContext.lookup(SelectorContext.java:130)
     at javax.naming.InitialContext.lookup(Unknown Source)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:117)
     ... 78 more

Alguma dica?

[]´s
Daniel

Tente os seguintes passos:

  • no seu arquivo context.xml, mude o nome do data source para DSDefault, sem o “jdbc/”.
  • na tag <jta-data-source>, mude a URL para java:/DSDefault.

Não deu certo. Fazendo dessa forma o console retornou o seguinte erro:

...
Caused by: Exception [EclipseLink-7060] (Eclipse Persistence Services - 1.1.3.v20091002-r5404): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Cannot acquire data source [java:/DSDefault].
Internal Exception: javax.naming.NameNotFoundException: Name DSDefault is not bound in this Context
     at org.eclipse.persistence.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:433)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:123)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
     at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
     at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:583)
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:227)
     at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:255)
     ... 73 more
Caused by: javax.naming.NameNotFoundException: Name DSDefault is not bound in this Context
     at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
     at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
     at org.apache.naming.SelectorContext.lookup(SelectorContext.java:130)
     at javax.naming.InitialContext.lookup(Unknown Source)
     at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:117)
     ... 78 more

Qual o servidor que você tá usando? Tem alguma forma de visualizar a árvore JNDI dele?

No Weblogic, por exemplo, é possível visualizar a árvore JNDI através do console.

Estou usando o Tomcat 6.
Não encontrei como visualizar a árvore JNDI dele.
Mas através do Lamba Probe, consegui visualizar o Data Source e executar consultas através de comandos SQL.

Hmmm… Pelo que eu tava vendo aqui, acho que é preciso colocar novamente o termo “jdbc/” diante do nome do datasource.