2013-03-12 8 views
5

ich in context.xml für Tomcat den folgenden Code haben:kann nicht verstehen, Verbindungsfehler Pooling mit JPA, Tomcat, Oracle

<Resource name="ds/OracleDS" auth="Container" type="javax.sql.DataSource" 
maxActive="1" maxIdle="2" maxWait="2" 
username="demo" password="demo" 
driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@localhost:1521:orcl"/> 

Ich habe diesen Code in web.xml:

<resource-ref> 
<description>Oracle Datasource example</description> 
<res-ref-name>ds/OracleDS</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 

ich geschrieben habe Code in persistence.xml mag:

<persistence-unit name="ReceivablesPU" transaction-type="RESOURCE_LOCAL"> 
     <provider>oracle.toplink.essentials.PersistenceProvider</provider> 
     <non-jta-data-source>java:ds/OracleDS</non-jta-data-source> 

ich verstehe nicht, java:ds/OracleDS, <Resource name="ds/OracleDS", <res-ref-name>ds/OracleDS</res-ref-name>. Der Fehler ist:

javax.persistence.PersistenceException: Exception [TOPLINK-7060] (Oracle TopLink Essentials - 2.0 (Build b40-rc (03/21/2007))): oracle.toplink.essentials.exceptions.ValidationException 
Exception Description: Cannot acquire data source [java:ds/OracleDS]. 
Internal Exception: javax.naming.NamingException: This context must be accessed through a java: URL 

Antwort

0

i Änderungen in contex.xml:

<Resource name="OracleDS" auth="Container" type="javax.sql.DataSource" 
    maxActive="1" maxIdle="2" maxWait="2" 
    username="demo" password="demo" 
    driverClassName="oracle.jdbc.driver.OracleDriver" 
    url="jdbc:oracle:thin:@localhost:1521:orcl"/> 

i Änderungen in web.xml:

<resource-ref> 
    <description>Oracle Datasource example</description> 
    <res-ref-name>OracleDS</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 

ich ändert in p ersistence.xml

<persistence-unit name="ReceivablesPU" transaction-type="RESOURCE_LOCAL"> 
     <provider>oracle.toplink.essentials.PersistenceProvider</provider> 
     <non-jta-data-source>java:comp/env/OracleDS</non-jta-data-source> 

dann bekam ich die Ausgabe ....

2

In persistence.xml, Ihre dritte Zeile sollte wie folgt aussehen:

 <non-jta-data-source>java:comp/env/ds/OracleDS</non-jta-data-source> 
0

Bitte beachten Sie diese Antwort auf eine ähnliche (aber nicht Frage duplizieren):

Jetty Data Source, Hibernate, datasource not found

Abhängig von Java EE Web App Container, für eine Datenquelle mit dem Namen "ds/OracleDS" müssen Sie möglicherweise den JNDI-Kontext mit "java: comp/env" versehen, wenn Sie ihn adressieren (wie in Ihrer Datei persistence.xml), damit er funktioniert.

In Ihrem speziellen Fall von Tomcat, würde ich folgendes versuchen:

<Resource name="ds/OracleDS" auth="Container" type="javax.sql.DataSource" 
maxActive="1" maxIdle="2" maxWait="2" 
username="demo" password="demo" 
driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@localhost:1521:orcl"/> 

Sie müssen in Ihren web.xml nicht wirklich etwas.

<persistence-unit name="ReceivablesPU" transaction-type="RESOURCE_LOCAL"> 
     <provider>oracle.toplink.essentials.PersistenceProvider</provider> 
     <non-jta-data-source>java:comp/env/ds/OracleDS</non-jta-data-source> 
: Die obige Konfiguration in context.xml wird die Datenquelle als JNDI Ressource

schließlich in persistence.xml put machen Tomcat aussetzen