2013-03-12 13 views
5

Ho il seguente codice nel context.xml per Tomcat mettere in comune:Impossibile capire il collegamento errore utilizzando 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"/> 

ho questo codice nella 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> 

ho scritto codice persistence.xml piace:

<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> 

non capisco java:ds/OracleDS, <Resource name="ds/OracleDS", <res-ref-name>ds/OracleDS</res-ref-name>. L'errore è:

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 

risposta

0

i cambiamenti nella 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 cambiamenti 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> 

i cambiamenti 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> 

quindi ho ottenuto l'uscita ....

2

In persistence.xml, la tua terza riga dovrebbe essere simile a questo:

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

Si prega di vedere questa risposta a una simile (ma non duplicare domanda):

Jetty Data Source, Hibernate, datasource not found

A seconda Java EE Contenitore di applicazioni Web, per un'origine dati denominata "ds/OracleDS" potrebbe essere necessario anteporre il proprio contesto JNDI a "java: comp/env" quando lo si indirizza (come nel file persistence.xml) per farlo funzionare.

Nel vostro caso particolare di Tomcat, mi piacerebbe provare il seguente:

<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"/> 

non si ha realmente bisogno di qualcosa nel vostro web.xml. La configurazione di cui sopra in context.xml farà Tomcat esporre l'origine dei dati come una risorsa JNDI

Infine, in persistence.xml messo:

<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> 
Problemi correlati