2013-03-12 11 views
5

Mam następujący kod w context.xml dla Tomcat:Nie można zrozumieć połączenia łączenie błędu przy użyciu WZP, 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"/> 

Mam ten kod w 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> 

Mam pisemne kod w persistence.xml na przykład:

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

Nie rozumiem java:ds/OracleDS, <Resource name="ds/OracleDS", <res-ref-name>ds/OracleDS</res-ref-name>. Błąd jest:

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 

Odpowiedz

0

I Zmiany w 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 Zmiany w 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 zmiany w 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> 

potem mam wyjścia ....

2

W persistence.xml, twoja trzecia linia powinna wyglądać następująco:

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

Proszę zobaczyć tę odpowiedź do podobnego (ale nie powielać pytanie):

Jetty Data Source, Hibernate, datasource not found

zależności od Java EE Kontener aplikacji sieci Web, dla źródła danych o nazwie "ds/OracleDS", może być konieczne przedrostek jego kontekstu JNDI za pomocą "java: comp/env" podczas adresowania (np. W pliku persistence.xml), aby działał.

W danym przypadku Tomcat, chciałbym spróbować wykonać następujące czynności:

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

naprawdę nie trzeba nic w web.xml. Powyższa konfiguracja w context.xml uczyni Tomcat wystawiać źródła danych jako zasób JNDI

Wreszcie w persistence.xml put:

<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> 
Powiązane problemy