2010-03-17 6 views
3

J'essaie d'obtenir une source de données fonctionnant dans mon application jsf. J'ai défini la source de données dans mes web-apps context.xmlSources Tomcat 6, JPA et Data

webapp/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/Sale"> 
<Resource auth="Container" 
    driverClassName="com.mysql.jdbc.Driver" 
    maxActive="20" 
    maxIdle="10" 
    maxWait="-1" 
    name="Sale" 
    password="admin" 
    type="javax.sql.DataSource" 
    url="jdbc:mysql://localhost/sale" 
    username="admin"/> 
</Context> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<filter> 
<display-name>RichFaces Filter</display-name> 
<filter-name>richfaces</filter-name> 
<filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>richfaces</filter-name> 
<servlet-name>Faces Servlet</servlet-name> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
<dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 
<servlet> 
<servlet-name>Faces Servlet</servlet-name> 
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>Faces Servlet</servlet-name> 
<url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 
<session-config> 
<session-timeout> 
    30 
</session-timeout> 
</session-config> 
<welcome-file-list> 
<welcome-file>faces/welcomeJSF.jsp</welcome-file> 
</welcome-file-list> 
<context-param> 
<param-name>org.richfaces.SKIN</param-name> 
<param-value>ruby</param-value> 
</context-param> 
</web-app> 

et mon persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
<persistence-unit name="SalePU" transaction-type="RESOURCE_LOCAL"> 
<provider>oracle.toplink.essentials.PersistenceProvider</provider> 
<non-jta-data-source>Sale</non-jta-data-source> 
<class>org.comp.sale.AnfrageAnhang</class> 
<class>org.comp.sale.Beschaffung</class> 
<class>org.comp.sale.Konto</class> 
<class>org.comp.sale.Anfrage</class> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
</persistence-unit> 
</persistence> 

Mais aucune source de données ne semble être créée par Tomcat, je reçois seulement cette exception

Les jars nécessaires pour le pilote MySQL sont inclus dans le répertoire WEB-INF/lib.
Exception [TOPLINK-7060] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException 
Exception Description: Cannot acquire data source [Sale]. 
Internal Exception: javax.naming.NameNotFoundException: Name Sale is not bound in this Context 

Qu'est-ce que je fais mal?

+0

cela pourrait aider http://forums.oracle.com/forums/thread.jspa?messageID=1899677 – marcosbeirigo

Répondre

0

pense que le web.xml a également besoin d'une référence à la source de données

<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>Sale</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> </resource-ref> 
+0

la pensée même, testé aussi, mais pas d'effet.Quoi qu'il en soit le doc Tomcat semble être clair à ce sujet http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#context.xml%20configuration – onigunn

+0

Que diriez-vous cette note « Note: docBase est très important - il doit correspondre à votre fichier WAR ou vous obtiendrez une exception "sur (nom ds n'est pas lié dans ce contexte) ce lien http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Non-JTA_Datasource – JoseK

6

Votre <non-jta-data-source>Sale</non-jta-data-source> ne semble pas correcte, vous devez utiliser le format <non-jta-data-source>java:comp/env/ds/OracleDS</non-jta-data-source> (au moins ce que je comprends de la documentation).

Et je ne suis pas convaincu que votre ressource JDNI de source de données JDBC est correctement créée (parce que vous mettez le jar de pilote jdbc dans WEB-INF/lib). De la documentation Tomcat:

Utilisation des sources de données JDBC JNDI ressources usine exige que vous faire un pilote JDBC approprié disponible à la fois Tomcat internes des classes et à votre application Web. Ceci est le plus facile à réaliser par installer le fichier de pilote JAR (s) dans le répertoire $CATALINA_HOME/common/lib , ce qui rend le conducteur disponible à la fois à l'usine de ressources et à votre application.

Vous devriez peut-être tester ceci en premier (en écrivant un petit bout de code en recherchant une connexion).

également suivre strictement les étapes décrites dans EclipseLink/Examples/JPA/Tomcat Web Tutorial (et aligner le contenu de web.xml, context.xml et persistence.xml).

+0

' java: comp/env/Vente' compte tenu de la question dans ce 'name = "Vente"'. – Arjan

1

Comme Josek a dit que vous devez faire une référence source de données sur fichier web.xml:

<resource-ref> 
    <description>This is a PostgreSQL database connection</description> 
    <res-ref-name>jdbc/sadep</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref>  

Et la bonne façon de l'appeler est la suivante:

javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:/comp/env/jdbc/sadep"); 

Ainsi, pour JPA en utilisant tomcat:

<non-jta-data-source>java:/comp/env/jdbc/sadep</non-jta-data-source>