JPA:le fichier :persistence.xml

cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010 - 23 déc. 2009 à 10:28
sabrineisimm Messages postés 9 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 11 avril 2013 - 9 avril 2010 à 13:31
Bonjour à tous,
j'ai un problème sur une application utilisant JPA, je pense que c'est dû à mon fichier de configuration que voici:

-----------------------------------------



<!-- pour voir les requetes SQL -->



<!-- parametres de connection JDBC -->

















normalement une fois que j'exécute mon code, la table qui porte le nom de mon entity doit être crée, mais ce n'est pas le cas!!
alors si vous pouvez regarder mon fichier, peut être il ya des choses pas propres dedans , merci à vous

NB:la base planning existe déjà, et donc la table aurez dû se trouver dedans
-----------------------------------------

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 déc. 2009 à 11:29
Salut,

C'est normal, tu indique qu'il mettre à jour la table si ta classe est modifiée, mais pas de la créer !

Modifie la ligne suivante :



Par :


______________________________________
DarK Sidious
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
23 déc. 2009 à 14:57
AH, merci beaucoup,
je vais modifier mon fichier
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 10:57
Bonjour,
j bien modifié le fichier, mais le problème
perciste, en plus l'exemple provient d'une sources sur le net qui fonctionne!!
au fait quand je lance le fichier add.xhtml, la page se lance bien, mais quand je clic sur le bouton Ajoute(pour ajouter une personne) et la ça plante et voici l'erreur:

-------------------------------------------

-------------------------------------------Etat HTTP 500 -

type Rapport d'exception

message

description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.

exception

javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/persistence/Persistence
javax.faces.webapp.FacesServlet.service(FacesServlet.java:323)

cause mère

javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: javax/persistence/Persistence
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:774)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1266)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)

cause mère

java.lang.NoClassDefFoundError: javax/persistence/Persistence
jpa.PersonDao.getEntityManager(PersonDao.java:21)
jpa.PersonDao.insert(PersonDao.java:38)
jpa.PersonCtrl.createPerson(PersonCtrl.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:172)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:774)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1266)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)

cause mère

java.lang.ClassNotFoundException: javax.persistence.Persistence
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
jpa.PersonDao.getEntityManager(PersonDao.java:21)
jpa.PersonDao.insert(PersonDao.java:38)
jpa.PersonCtrl.createPerson(PersonCtrl.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:172)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:774)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1266)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)


la classe entitie:
---------------------------------------------

package jpa;
import java.io.Serializable;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.Entity;

/**
* Cette classe représente une personne. C'est une entité persistente vu qu'on
* l'a annoté avec l'annotation Entity.
*
* @author [mailto:djo.mos.contact@gmail.com djo.mos]
*
*/
@Entity
public class Person implements Serializable{
/**
*
*/

private static final long serialVersionUID = 1L;
private Long id;
private String firstName;
private String lastName;



public Person(){}
/**
* C'est l'accesseur de l'identifiant.

* On indique qu'un champ est un identifiant en l'annotant avec Id.

* De plus, si on ajoute GeneratedValue, alors c'est la base de données ou
* l'implémentation JPA qui se charge d'affecter un identifiant unique.
*
* @return l'identifiant.
*/
@Id
@GeneratedValue

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName=lastName;
}
}

---------------------------------------------
la classe d'acces aux données:

package jpa;

import java.util.List;

import javax.faces.model.ListDataModel;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import jpa.Person;
/**
* C'est le DAO qui permet d'effectuer des opérations portant sur une personne
* dans la base de données.
*
* @author [mailto:djo.mos.contact@gmail.com djo.mos]
*
*/
public class PersonDao {
private static final String JPA_UNIT_NAME = "jsf-crud";
private EntityManager entityManager;
protected EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = Persistence.createEntityManagerFactory(
JPA_UNIT_NAME).createEntityManager();
}
return entityManager;
}



@SuppressWarnings("unchecked")
public List findAll() {
List persons = (List) getEntityManager().createQuery(
"select p from Person p").getResultList();
return persons;
}


public Person insert(Person u) {
getEntityManager().getTransaction().begin();
getEntityManager().persist(u);
getEntityManager().getTransaction().commit();
return u;
}

//la méthode delate()

public void delete(Person p)
{
getEntityManager().getTransaction().begin();
getEntityManager().merge(p);//le reatache au contexte de persistence
getEntityManager().remove(p);
getEntityManager().getTransaction().commit();

}

//la méthode updtae()

public String update(Person p)
{
getEntityManager().getTransaction().begin();
getEntityManager().merge(p);
getEntityManager().getTransaction().commit();
return null;
}








}

---------------------------------------------
la classe du backing bean:
package jpa;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean(name="personCtrl")
@SessionScoped
public class PersonCtrl {
private PersonDao pDao = new PersonDao();
private ListDataModel persons;
private Person newPerson = new Person();


public Person getNewPerson()
{
return newPerson;
}



public DataModel getPersons()
{
if(persons==null)
{
persons=new ListDataModel();
persons.setWrappedData(pDao.findAll());
}
return persons;
}

public String createPerson() //créer une personne
{
pDao.insert(newPerson);
newPerson = new Person();
persons.setWrappedData(pDao.findAll());
return "view";
}

public String DeleteCtrl()//supprimer une personne
{
pDao.delete((Person) (getPersons().getRowData()));
persons.setWrappedData(pDao.findAll());
return null;
}

public String modifier()//modifier une persone
{
pDao.update((Person) getPersons().getRowData());
persons.setWrappedData(pDao.findAll());
return null;
}
}

------------------------------------------
la vue:add.xhtml:celle ci permet de créer une personne et appelle la classe view.xhtml


<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title> </title>
</head>
<f:view>
<h:panelGrid columns="2" cellpadding="10">
<h:outputLink value="view.xhtml">
<h:outputText value="Lister" />
</h:outputLink>
<h:outputLink value="add.xhtml">
<h:outputText value="Ajouter" />
</h:outputLink>
</h:panelGrid>
<h:form>
<h:panelGrid border="0" columns="3" cellpadding="5">
<h:outputText value="Prenom" />
<h:inputText id="firstName" value="#{personCtrl.newPerson.firstName}"
required="true" requiredMessage="Prenom obligatoire" />
<h:message for="firstName" />
<h:outputText value="Nom" />
<h:inputText id="lastName" value="#{personCtrl.newPerson.lastName}"
required="true" requiredMessage="Nom obligatoire" />
<h:message for="firstName" />
<h:outputText />
<h:commandButton value="Ajouter" action="#{personCtrl.createPerson}" />
</h:panelGrid>
</h:form>
</f:view>

</html>
---------------------------------------------
view.xhtml:
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title> </title>
</head>

<f:view>

<h:panelGrid columns="2" cellpadding="10">
<h:outputLink value="view.xhtml">
<h:outputText value="Lister" />
</h:outputLink>
<h:outputLink value="add.xhtml">
<h:outputText value="Ajouter" />
</h:outputLink>
</h:panelGrid>
<h:form>
<h:dataTable border="0" rules="all" value="#{personCtrl.persons}"
var="p">
<h:column>
<f:facet name="header">
<h:outputText value="Prenom" />
</f:facet>
<h:outputText value="#{p.firstName}" />
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="Nom" />
</f:facet>
<h:outputText value="#{p.lastName}" />
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="Operations" />
</f:facet>
<h:commandButton value="Supprimer" action="#{personCtrl.DeleteCtrl}" />
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="Operations" />
</f:facet>
<h:commandButton value="Modifier" action="#{personCtrl.modifier}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</html>
---------------------------------------------
le fichier faces-config.xhtml:les roles de navigations
<?xml version='1.0' encoding='UTF-8'?>

<faces-config version="2.0"
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-facesconfig_2_0.xsd">



<navigation-rule>
<display-name>add</display-name>
<from-view-id>/add.xhtml</from-view-id>
<navigation-case>
<from-outcome>view</from-outcome>
<to-view-id>/view.xhtml</to-view-id>
</navigation-case>
</navigation-rule>

</faces-config>



---------------------------------------------
fichier web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<context-param>
com.sun.faces.verifyObjects


false


</context-param>
<context-param>
com.sun.faces.validateXml


true


</context-param>
<context-param>
javax.faces.STATE_SAVING_METHOD


client


</context-param>
<context-param>
javax.faces.DEFAULT_SUFFIX


.xhtml


</context-param>
<context-param>
facelets.DEVELOPMENT


true


</context-param>
<context-param>
javax.faces.SKIP_COMMENTS


true


</context-param>
<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>
/faces/*
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>

</web-app>

-----------------------------------------

merci à tous, de jeter un coup d'oeil, je suis vraiment bloqué
----------------------------------------------
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 déc. 2009 à 11:05
Salut,

Qu'il plante lorsque tu clique sur le bouton de ta page HTML n'a pas grand chose à voir avec la création des tables automatiquement par le fichier persistence.xml...

Est-ce que déjà les tables sont bien crées dans ta base de données lorsque tu déploie ton application ? (c'était ta question d'origine...).

Ensuite, pour ton problème d'exception qui est levée, je dirais que ca vient plutôt que ca vient des bibliothèques déployées sur ton serveur J2EE. Un ClassNotFoundException vient, comme son nom l'indique, d'une classe qu'il ne trouve pas (rien à voir avec le fichier persistence.xml donc...), et vu la classe qu'il ne trouve pas, je dirais que c'est JPA qui n'est pas reconnu par ton serveur d'application ! Quel est-il ?
______________________________________
DarK Sidious
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 11:21
Bonjour, merci pour les précisions,
pour le serveur d'application, je ne veux pas l'utiliser, car je cherche juste à faire tourner une application web sans JEE, j'utilise pour cela le serveur web tomcat

quant à la création de la table, elle n'est pas crée:
je vais dans la console de mysql et je fais par exemple:
mysql> select * from person;
et le résultat:
ERROR 1146 (42S02): Table 'planning.person' doesn't exist

donc je ne sais pas, merci si vous pouvez me donner d'autres infos
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 déc. 2009 à 11:32
Salut,

Je vois pas trop ce que tu veux faire : tu veux faire tourner une application web sans J2EE, mais tu développe des JSP et des servlets... et surtout, tu utilise JPA, qui est une partie non négligente de J2EE ! Donc, tu fais déjà du J2EE, même si tu n'as pas l'air de t'en rendre compte. Il te faut donc un serveur J2EE pour pouvoir interprêter ton code.

Attention, Tomcat n'est pas un serveur J2EE, ce n'est qu'un conteneur de servlet ! Il n'est pas capable d'utiliser des EJB ! et donc, incapable d'accèder à une base de données par JPA... et il ne peut pas créer les tables dans la base de données...

Donc à toi de voir : soit tu utilise un serveur d'appliation J2EE (tel que JBoss, Jonas, Glassfish, etc.), soit tu n'utilise pas les EJB pour te connecter à ta base de données, et utilise ce bon vieux Hibernate par exemple pour garder une abstraction pour l'accès à ta base de données, soit tu passes à un langage plus approprié pour faire des sites web sans utiliser J2EE, tel que PHP par exemple.
______________________________________
DarK Sidious
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 12:09
Bonjour,
je n'ai pas utilisé EJB dans mon application,
la classe Person est juste une classe qui doit être persistée dans la base en utlisant les annotations Entity..., quant l'utilisation de JPA on peut l'utilisé hors le contexte JEE dans le J2SE

merci
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 12:14
bonjour, en fait ici j'ai utilisé hibernate,
JPA est juste une façade et cache l'ORM hibernate, regardez, c'est configuré dans le ficher de persistance que voici:




<!-- pour voir les requetes SQL -->



<!-- parametres de connection JDBC -->
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 déc. 2009 à 12:57
Salut,

Y n'empêche que tomcat ne permet pas d'utiliser directement JPA. Il te faut un minimum de bibliothèques pour pouvoir l'utiliser avec tomcat, d'où l'exception que tu obtiens de classe non trouvée : il ne trouve pas le package javax.persistence, qui est le package de JPA.

Je peux te conseiller d'aller lire ceci :
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Tomcat_configuration_Changes

______________________________________
DarK Sidious
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 13:10
Bonjour,
et si j'ajoutais au classPath le chemein vers JPA?, tomcat trouvera alors le package en question?, je vais essayer maintenant

Merci
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 déc. 2009 à 13:25
Salut,

Il faut surtout l'indiquer comme devant être déployé avec ton war.
______________________________________
DarK Sidious
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
24 déc. 2009 à 13:29
j'ai ajouté le chemein vers JPA dans la path, mais sans succès!:

quant au war, je ne sais pas vraiment ce que c'est, j'en ai déja entendu parlé, mais sans plus, je vais regarder ce que c'est sur le net

Merci encore
0
sabrineisimm Messages postés 9 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 11 avril 2013
9 avril 2010 à 13:31
Bonjour à tous
je suis débutante en JEE j'utilise netbeans 6.8 et oracle 10g v1

aprés avoir créer mon projet entreprise Edition (3 module : ear, ejb et war) je voudrai bien utiliser la notion de persistence alor j'ai crée mon fichier persistence.xml ainsi mes entity bean from data base.
voici mon fichier persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>


org.hibernate.ejb.HibernatePersistence
















ensuite je voudrai bien creer une simple page JSF pour toutes mes table afin de faciliter la manipulation des données dans ma base oracle. pr cela j'ai fé ds le prjet war new jsf page from entity class
lorsque je fé build and clean (prj war) => build succesful
mé lorsq je fé deploy ( une exception m'apparait et je ne sé pa la cause ?!! )
voici l'exception C:\Documents and Settings\safaa\Mes documents\NetBeansProjects\PfeDmp\PfeDmp-war\nbproject\build-impl.xml:588: The module has not been deployed.
BUILD FAILED (total time: 24 seconds)
svp qlq peut m'expliquer les notion de base d'un Pjr JEE et les différentes etapes à suivre et comment rectifier ce PB
merci bcp
0
Rejoignez-nous