Jump to content
zaster

Java persistance ? c'est quoi

Recommended Posts

Bonjour a tous ,

 

je reviens sur ce forum pour echanger autour dre la technologie java,

 

je veux que qq un me parle de la persistance sous java , ce mecanisme qui est un

peu compliqué avec lequel j'ai passé plusieurs heures,

 

quelle difference entre JPA, hibernate , toplink, ..

 

de ma part , je pense:confused: que jpa est une specif et hibernate, toplink, ...son des implementations ?? c'est vrai ou non .

 

mais quelle utilité de ce mecanisme ds une application du bureau.

 

on peut ollaborer pour apprendre diff packages ? ou specif java ....

Share this post


Link to post
Share on other sites

Bonjour,

C'est exactement ça, JPA est un ensemble de spécifications destinées à standardiser la persistance dans le monde Java. Hibernate (qui existe bien avant JPA) et Toplink implémentent cette dernière. A noter qu'Hibernate proposent d'autres fonctionnalités en plus non présentes dans la spec JPA.

 

Le but de la persistance (ou mapping Objet/Relationnel) est de s'affranchir du monde Relationnel/SQL pour ne se concentrer que sur le monde Objet. Avec JPA tu vas pouvoir récupérer tes données SQL sous forme d'objets.

 

Genre tu as une table Etudiant dans ta BDD. avec JPA (bien implémenté), tu récupéreras depuis ta BDD directement l'objet de classe Etudiant (différent de la table, donc avec ses différents attributs ). Tu vas aussi pouvoir faire des requêtes de type Objet en langage JPQL.

Le moteur JPA va se charger de transformer tes requêtes JPQL en requêtes SQL.

La persistance est une solution à mi chemin entre le Relationnel et l'Objet.

Par ailleurs, il existe des solutions purement Objet où tu ne passes par aucune transformation. Tout est objet même la BDD.

  • Like 1

Share this post


Link to post
Share on other sites

Merci bien "BASSIM" pour ton aide ,

 

j'ai fait des recherches autour de ce langage proche du sql , et je suis sur le point

de tester une petite application desktopapp avec netbeans , pour voir ce que je peux conclure.

 

un point important (selon les tutos et que je comprend ) est que avec cette technique , on a totalement separé

la couche metier de la couche acces aux donnees , donc si on veut changer la source de donnees ,

(changement moteur bd, type, ...) on n' a qu' a modifier les fichiers de config (xml) de JPA??

 

c'est un point important . que pensez vous??

 

merci encore bassim

Share this post


Link to post
Share on other sites

Non, c'e n'est pas grâce à cette "technique". La séparation des couches existe indépendamment des solutions BDD implémentées, même si JPA te permet de t'affranchir d'une BDD particulière.

Dans la couche DAO, tu vas mettre tes requêtes JPQL ou SQL. Tout dépendra du choix de ton implémentation future.

Share this post


Link to post
Share on other sites

bonjour a tous,

 

Merci bassim pour vos remarques, je cherche un tres simple exemple avec hibernate (desktop app) , pour comprendre

 

le principe,

 

j'ai essaye de cree une jframe avec des textfields pour saisir , consulter , modifier les elements d'une simple table

 

de personnes, mais elle ne marche pas,

 

bassim dit que à la coushe dao qu' on met les requette , pour moi je code directement sur les evenements

 

des JBUTTONs,

 

(je sais que c'est pas pro, mais je cherche a trouver une architecture bien precise pour mes dev futures)

 

si vous avez des shemas pour une organisation ou les etapes à suivre pour developper une app du bureau:

 

j'utilise netbeans et j'ai pu faire :

 

 

1- creation unite de persistance

2- creation entity classes a partir des db

3- ???

Share this post


Link to post
Share on other sites

Salut zaster et Merci à toi bassim pour ces ces informations en Or et tes efforts sur le forum :)

 

@zaster, je te conseille vivement de commencer avec une application sur console, ni interface ni walou pour commencer avec hibernate, et je te conseille aussi vivement de passer par la framework Spring, car tu seras amené top ou tard et je dirais plutôt tôt que tard à l'utiliser pour intégrer les différentes technos Java.

Share this post


Link to post
Share on other sites
Guest java

Un exemple :

 

supposes que tu veux faire ça : http://yuml.me/diagram/scruffy/class/%23%20Cool%20UML%20Diagram,%20%5BOrder%5D-0..1%3E%5BTodo%5D%20%20.pdf

 

pré requis : jdk 5 ou plus, api hibernate

 

crées un projet java sous Eclipse ou autre, ajoutes la librairie hibernate (je te conseils fortement d'utiliser maven, ant ou ivy si tu veux gérer efficacement les dépendances des JAR)

 

pour faire plus simple, utilises une base de données embarquée (H2 ou HSQLDB ou derby)

 

pour le code,

 

voici les classes indiquées dans le schéma yUML

 

Classe Todo

package com.abo.todo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Todo {

   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private Long id;

   private String title;
   private String description;
   /**
    * @return the id
    */
   public final Long getId() {
       return id;
   }
   /**
    * @param id the id to set
    */
   public final void setId(Long id) {
       this.id = id;
   }
   /**
    * @return the title
    */
   public final String getTitle() {
       return title;
   }
   /**
    * @param title the title to set
    */
   public final void setTitle(String title) {
       this.title = title;
   }
   /**
    * @return the description
    */
   public final String getDescription() {
       return description;
   }
   /**
    * @param description the description to set
    */
   public final void setDescription(String description) {
       this.description = description;
   }
}

 

Classe Groupe

package com.abo.todo.entity;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Groupe {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   @OneToMany(fetch = FetchType.EAGER, mappedBy = "Group")
   private List todos;

   /**
    * @return the id
    */
   public final Long getId() {
       return id;
   }

   /**
    * @param id the id to set
    */
   public final void setId(Long id) {
       this.id = id;
   }

   /**
    * @return the todos
    */
   public final List getTodos() {
       return todos;
   }

   /**
    * @param todos the todos to set
    */
   public final void setTodos(List todos) {
       this.todos = todos;
   }

}

 

ça c'été pour les entités, pour l'accès aux données (Data Access Object ou DAO)

 

voici le code pour les actions de bases concernant Todo, je te laisserais joué avec Groupe plus tard

 

Todo DAO

package com.abo.todo.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
* @author a000egs
*
*/
public class TodoDao extends HibernateDaoSupport {

   /**
    * @param id
    * @return
    */
   @SuppressWarnings("unchecked")
   public Todo findById(Long id) {
       List find = getHibernateTemplate().find("from Todo t where t.id = ");
       return (Todo ) ((find.size() == 1) ? (Todo ) find.get(0) : null);
   }

   /**
    * @return
    */
   @SuppressWarnings("unchecked")
   public List findAll() {
       return getHibernateTemplate().find("from Todo");
   }

   /**
    * @param todo
    * @return
    */
   public Long save(Todo todo) {
       return (Long ) getHibernateTemplate().save(todo);
   }

   /**
    * @param todo
    */
   public void delete(Todo todo) {
       getHibernateTemplate().delete(todo);
   }

   /**
    * @param id
    */
   public void delete(Long id) {
       Todo todoDelete = findById(id);
       if (todoDelete != null)
           delete(todoDelete);
   }
}

 

test :

 

crées le fichier ibernate.cfg.xml comme ci-dessous


br />"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">




org.h2.Driver
jdbc:h2:path\databaseName
sa

PUBLIC
org.hibernate.dialect.H2Dialect


 

le teste unitaire :

package fr.generali.nova.atp.persistence;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class UseCaseTest {

   private Session session;

   public UseCaseTest() {
       // configuration of hibernate
       SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
       session = sessionFactory.openSession();
   }

   @Test
   public void testInsert() {

       TodoDao dao = new TodoDao();
       dao.save(new Todo("my todo","this is a description of a todo"));
   }
}

 

 

pour résumé :

 

1. les snippets tels qu'ils sont ne vont pas fonctionés correctement, c'est des bribes pour que tu puisses avoir des pointeurs

2. pour que tu puisses interagir avec la couche DAO, il faudra que tu instancies la DAO dans la couche de présentation.

3. c'est clair que ce n'est pas comme ça qu'il faut faire si on veut utilisé Hibernate, l'idéal est de passer par Spring ou un conteneur EJB pour pouvoir utiliser les pattern d'injections et de dépendances qui facilitent le travail, ces bouts de codes ne sont ici que pour un objectif pédagogique.

 

si tu veux avoir plus d'information je pourrais partager avec toi un projet sur google Code qui indique une façon de faire plus élégante et plus usuelle.

 

Salam

Edited by java
yUML updated bacause was not responding

Share this post


Link to post
Share on other sites

bonjour a tous,

 

et metrci mes pour tous qui ont ecrit sur ce forum ,

 

j'essaye de comprendre toute ce que vousavez ecrit et essayer d'executer les prog

 

mes salutations

Share this post


Link to post
Share on other sites

bonjour,

 

Merci a tous pour l'aide ,

 

j'ai fait marcher le premier exemple de BASSIM , c'etait un peu simple mais bien pour avancer,

 

deux entites "ORDERS" et "CUSTOMER" liés a deux tables "customer" et "order_table"

 

j'ai utiliser JPA , sous Netbeans et MySql,

 

Le programme, fait les operations d'insertion de verification et de supprission.

 

La deuxiemme partie de cet exemple c'etait ds un envirenemet purement J2EE en utilisant les EJB,

 

j'ai pas pu la faire (pour le moment ) , ds la prochaine fois quand j'arrive à l'etude des EJB , je serai obligé ...

 

Concernat ces dernier codes edité par "JAVA" , j'ai eu des diffeculté pour comprendre la relation

 

Mon Programme ----ENTITY ----DAO---- DB

 

elle est juste ou cette presentation est mieux

 

MON PROG --------------DAO---------------BD

|

|

entity

 

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

 

Autre remarque , vous m'avez oreinté vers l'utilisation de SPRING , mais j'ai en tete d'utiliser struts avant ,

 

que pensez vous??? , est ce que struts n'est pas une etape necesaire pour les application web.

 

Merci pour votre sugestions et remarques.

Share this post


Link to post
Share on other sites

"JAVA"

 

Toujours en attente de votre prjet sur google code , je suis vraiment motivé surtout avec l'aide de ce forum

Share this post


Link to post
Share on other sites

"JAVA"

 

Toujours en attente de votre prjet sur google code , je suis vraiment motivé surtout avec l'aide de ce forum:)

Share this post


Link to post
Share on other sites
Guest java

pour la relation (les couches dans une application) le schéma le plus usuel dans une application d'entreprise est le suivant (de bas vers le haut)

 

A couches technique :

1 Data Base (Embarquée, Oracle, ...)

2 Connecteur JDBC type 3

3 ORM (Hibernate, JPA)

 

B couches logiques (le code que tu devra développer)

 

1 couche de persistance (les entités Pojo ou EJB qui sont aussi des Pojo depuis JEE 5)

2 couche accès aux données (DAO Data Access Object) : une DAO par entité qui permet d'effectuer les opération CRUD sur cette même entité via des requetes (HQL, SQL, JPQL, Criteria)

3 couche service : c'est ici que tu integrera le code metier (business logic), en général elle interagie avec la couche DAO pour l'accès aux données

4 eventuellement une couche de transmission (Remote) : soit par exposition de la couche service en web service (REST, SOAP, JMS, ...) ou par l'intégration dans un autre mechanisme permettant la sérialisation des données (pour flex GranitDS ou BlazeDS, pour GWT c'est RPC, pour les EJB CORBA ou autre)

5 couche de présentation : c'est la couche qui fait appel aux services ou aux web services et est responsable de la gestion des ecrans (Struts, Spring MVC, Flex, GWT) et la liste est longue

 

Il faut savoir que ce schema ou architecture est se que l'on trouve dans des applications de gestion classiques, il n'est pas interdit par exemple que la couche de présentation utilise directement la couche DAO s'il n'y a pas besoin d'une couche de service, tout dépend du besoin métier.

 

Dans des applications WEB par exemple et sur la base de l'utilisation de plateformes Cloud (Google AppEngine, Amazon EC2, CouldBees, Spring Cloud Foundry) il n'est pas nécessaire de suivre l'architecture citée ci-dessus, le besoin étant différent (volumétrie plus importante, timeout réduit, accès concurentiel plus dense)

 

Pour mes développements rapide j'utilise des outils qui me permettent de me générer le code usuel (Entité, DAO, Controller) afin que je puisse aller vite, les outils que j'utilise le plus c'est spring roo et playframe work pour java et Griffon pour groovy.

 

a+

Edited by java

Share this post


Link to post
Share on other sites

Bonjour,

 

 

La deuxiemme partie de cet exemple c'etait ds un envirenemet purement J2EE en utilisant les EJB,

 

j'ai pas pu la faire (pour le moment ) , ds la prochaine fois quand j'arrive à l'etude des EJB , je serai obligé ...

 

Je te conseille de ne pas t'interesser à J2EE ni à Spring pour l'instant. Ils se basent sur des concepts qui risquent de t’emmêler les pinceaux, à vouloir tout apprendre d'un seul coup.

 

 

Concernat ces dernier codes edité par "JAVA" , j'ai eu des diffeculté pour comprendre la relation

 

Mon Programme ----ENTITY ----DAO---- DB

 

elle est juste ou cette presentation est mieux

 

MON PROG --------------DAO---------------BD

|

|

entity

 

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

 

La couche entity (ou métier) est transverse à toutes les autres couches. ça représente les données utiles et le coeur de ton application. Ces objets métiers seront manipulés et utilisés par toutes les autres couches.

L'architecture que t'as employé me semble tout à fait adéquate pour ce que tu veux faire.

Ce que propose "java" est idéal pour une application professionnelle mais pas pour un apprentissage pédagogique.

 

 

Autre remarque , vous m'avez oreinté vers l'utilisation de SPRING , mais j'ai en tete d'utiliser struts avant ,

 

que pensez vous??? , est ce que struts n'est pas une etape necesaire pour les application web.

 

Merci pour votre sugestions et remarques.

 

Pour Spring, vaut mieux éviter pour l'instant. T'auras tout le temps aprés d'apprendre la programmation par aspects (AOP).

 

Struts est un framework de présentation web qui n'a rien à voir avec Spring.

Share this post


Link to post
Share on other sites

bonjour,

 

concernat l'architecture proposé par JAVA, elle était trés claire ,malgré que je comprend pas les mecanismes des EJB , WEBSERVICES et CLOUD:confused: . ele etait bien structuré et surment elle m'aide boucoup durant mon apprentissage de J2EE.

 

Merci java pour ces effort,

 

pour continuer ds l'apprentissage de Persistance , je doit implementes les DAO pour mon premeir exemple

 

(customer et orders ). je vais utiliser un client pour invoker des methodes d'insertion , modification et suppression

 

sur les entity que j'ai deja crée. pour plus tard passer à une petite app web (servlet + jsp simples ).

 

je sereai à l'ecoute de toutes vos remarques et orientation , :)

 

 

Bonne journée.

Share this post


Link to post
Share on other sites
Guest java

Bonjour,

 

commit ton code sur un repository public (gitHub, Google code, codhaus, ...) puis partage l'url , je pourrai jeter un coup d'oeil pour t'orienté plus.

d'après mon experience un développeur doit faire ce qui suit :

 

1. lire la Java doc (c'est le meilleur moyen de connaitre le fonctionnement d'une API)

2. avoir sous la main des livres comme Effective Java, Java Concurrency) ou autres selon le domaine

3. suivre et surtout lire les blogs spécialisés (ça vaux mieux que 10 ans à l'unversité) , celui que je te conseil pour le JEE c'est celui d'Adam Bien, il est très fort http://www.adam-bien.com/roller/abien/

4. coder, coder, coder et toujours coder, Un comédien ne s'est jamais comment va-t-il faire pour interpréter son role dans une pièce de théâtre, un développeur ne sais pas à l'avance comment doit-il s'y prendre avec un problème pour le résoudre, tout est dans l'entrainement, plus on code et plus "on code mieux"

 

Il y'a pleins de site spécialisé pour l'entre aide dans le monde java, le plus connu c'est sans nulle doute Stackoverflow.com, c'est une référence, c'est là ou je trouve 99% des mes réponses.

 

Un autre moyen important pour apprendre (c'est un conseil que je me donne à moi même aussi) c'est de blogger, il n'y pas plus instructif que d'essayer d'expliquer une idée, Einstein à dit une fois : Si tu peux expliquer ton idée à ta grand mère, tu as bien compris (ou quelque chose dans le même genre)

 

aller, bon vent

Share this post


Link to post
Share on other sites

merci pour les reponses rapide java,

 

je suis entraine de preparer une petite application pour l'heberger sur google code:confused:

 

(esperant que les responsables de google ne jetent pas mon projet;) )

 

 

 

comme vous avez dit, je suis vraiment besoin de vos orientation 'java' et

 

les des remarques provenant des utilisateur de ce forum.

 

mes salutation

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...