Lors de la persistence des objets dans un context du LOCAL, en dehors du serveur d'application, tout ce dont ont a besoin c'est :
1) L'entity à persister
2) Le fichier de persistance
3) Intégrer le JAR du connecteur du SGBD sollicité (MySQL dans ce cadre)
4) Le méthode qui gère la persistence avec les déclarations des variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
EntityManagerFactory emf = Persistence.createEntityManagerFactory("WebProjet");
EntityManager em = emf.createEntityManager();
Là ça marche sans problème dans un simple Main Java Pur.

Mais, il me semble que Persistance à du Serveur d'application notamment à partir d'une Servlet est particulière et nécessite des configurations supplémentaire puisque je fais la même chose et ça ne marche pas.

Glassfish pointe par défaut défaut sur la Base de Données DERBY et me renvoi l'erreur 1527 disant qu'il ne trouve pas de Data Source, pourtant je travail avec MySQL. Jboss aussi me dit qu'il ne retouve pas de Data Source. Quelqu'un a-t-il une idée ? Ou alors un Tutorial / livre qui détails cet aspect ?

J'ai besoin de quelque chose qui pourra être déployé aussi bien sous Glassfish et que sous JBoss et qui marchera sans problème, je ne veux pas être lié à un Serveur d'application. Je veux travailler avec les config xml et annotations.

Quand vous faites des applications Web J2EE comment gérer vous la persistance, si par exemple vous récupérer des données d'un formulaire et que vous vouliez les passer à un EJB qui les persiste, comment ça se passe généralement ?

EJB DE PERSISTANCE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package ejbPack;
import javax.ejb.*;
import jpaPack.*;
import javax.persistence.*;
 
@Stateless
public class BeanService {
 
	@PersistenceContext
	private EntityManager em;
 
	public void createCustomer(Customer cust){
		em.persist(cust);
 
	}
 
	public Customer findCustomer(int id){
		return em.find(Customer.class,id);
	}
 
}
EJB ENTITY

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package entites;
 
import java.io.Serializable;
import javax.persistence.*;
 
 
@Entity
@Table(name="customer")
public class Customer implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@Id
	@Column(name="Num")
	private int num;
 
	@Column(name="Nom")
	private String nom;
 
	@Column(name="Prenom")
	private String prenom;
 
    public Customer() {
    }
 
	public int getNum() {
		return this.num;
	}
 
	public void setNum(int num) {
		this.num = num;
	}
 
	public String getNom() {
		return this.nom;
	}
 
	public void setNom(String nom) {
		this.nom = nom;
	}
 
	public String getPrenom() {
		return this.prenom;
	}
 
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}
}
SERVLET DE CONROLE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package webPack;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ejb.*;
import ejbPack.*;
import jpaPack.*;
 
 
@WebServlet("/ControlServlet")
public class ControlServlet extends HttpServlet {
 
	private static final long serialVersionUID = 1L;
 
	@EJB
	private BeanService ser;
	private Customer c=new Customer();
 
    public ControlServlet() {
        super();
 
    }
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
		//OUVERTURE SIMPLEMENT DE LA PAGE INDEX
		request.getRequestDispatcher("index.jsp").forward(request, response);
 
		//AFFICHAGE DES DONNEES LIEES A LA CLE = 10
		Customer cus = ser.findCustomer(10);
		System.out.println(cus.getNom());
 
		//PERSISTENCE DE CES DONNES, PAS BESOIN DE SPECIFIER LE NUMERO CAR C'EST UN CHAMPS AUTO
		c.setNom("EKONO NLEME"); c.setPrenom("Aristide");
		ser.createCustomer(c);
	}
 
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}
 
}
FICHIER DE PERSISTENCE (META-INF/persistence.xml)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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="WebProjet" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>jpaPack.Customer</class>
<properties>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/scolarite"/>
<property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/>
<property name="javax.persistence.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Merci pour votre attention