IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Persistance à partir d'une Servlet


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut Persistance à partir d'une Servlet
    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

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Salut,

    Qu'est-ce que ça donne si tu crées une datasource sur GlassFish ou JBoss et tu configures ton persistence.xml pour y pointer ? Tu configures donc les paramètres (url, username, password, driver) pour l'accès à ta base de données et tu donnes un nom JNDI à la datasource (exemple jdbc/CustomerDS).

    Pour GlassFish 3.1 par exemple, dans la console d'admin, je l'ai fait en deux étapes. Je crée un "Pool de connexions JDBC" où je configure tous les paramètres d'accès à la base et même la taille du pool. Ensuite je crée ce qu'ils appellent une "Ressource JDBC" en renseignant un nom JNDI et la faisant pointer vers le pool créé précédemment.

    Chaque serveur d'applications a sa façon particulière pou créer des ressources externes, mais l'important c'est que dans ton code tu n'utilises que le nom jndi.

    Du coup, le fichier persistence.xml pourrait se résumer à:

    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
    <?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">
          <jta-data-source>jdbc/CustomerDS<jta-data-source>
          <properties>
             <property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/>
             <property name="javax.persistence.logging.level" value="INFO"/>
         </properties>
       </persistence-unit>
    
    </persistence>

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci beaucoup, svp il n'y a pas moyen de faire ça à l'aide d'un fichier XML modifiable selon qu'on passe d'un serveur d'application à un autre ou d'une base de d'autre à une autre ?

    En passant dans quel répertoire de glassfish se met le connecteur (MySQL) ?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pour glassfish, tu peux placer le driver JDBC dans :

    ... glassfish3/glassfish/domains/domain1/lib

    il sera vu lorsque tu créeras le pool de connexions dans la console d'administration.

    Pour JBoss, le plus simple est de créer un fichier xml dans ce genre
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <datasources>
       <local-tx-datasource>
     
          <!-- The jndi name of the DataSource, it is prefixed with java:/ -->
          <!-- Datasources are not available outside the virtual machine -->
          <jndi-name>BikeDS</jndi-name>
     
          <connection-url>jdbc:mysql:///bike</connection-url>
          <driver-class>com.mysql.jdbc.Driver</driver-class>
          <user-name>user</user-name>
          <password>password</password>
     
       </local-tx-datasource>
     
    </datasources>
    et de le placer dans le répertoire "deploy" que tu références
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Citation Envoyé par mesken Voir le message
    svp il n'y a pas moyen de faire ça à l'aide d'un fichier XML modifiable selon qu'on passe d'un serveur d'application à un autre ou d'une base de d'autre à une autre ?
    Oui, il y a moyen de le faire si tu configures par exemple des Profils Maven2 pour chaque environnement sur lequel tu déploies.

    Mais je crois que c'est inutile de te compliquer les choses pour le moment. Il vaut mieux configurer les datasources chaque fois que tu change de serveur d'applications; ça fait partie des tâches de déploiement.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci beaucoup, ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java/XML generer un fichier XML a partir d'une Servlet
    Par fabricew59 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 03/04/2007, 11h43
  2. Arrêter à la Webapp à partir d'une servlet
    Par Coulon Arnaud dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 30/06/2006, 09h45
  3. Réponses: 2
    Dernier message: 12/05/2006, 18h49
  4. [SERVLET]Appel d'un fichier à partir d'une servlet
    Par fchafia dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 17/03/2005, 12h21
  5. [POI] Usage à partir d'une Servlet
    Par fredmorvant29 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 19/07/2004, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo