[JAVA] Persistance d'objet

Pour sauvegarder des données en Java, il y a pleins de méthodes plus ou moins complexe. A vrai dire, moi je n’ai jamais eu l’occasion de voir autre chose que la méthode JDBC et SQL et je n’ai jamais mis les pieds dans les solutions J2EE (il faudra que je mis mette un jour).

Donc ma première question, vous qu’utilisez-vous, JDBC, Hibernate, EJB, JDO, … ?

Une deuxième question, sachant que j’ai à faire une PETITE (oui j’insiste) application utilisée que par une personne que je n’ai pas envie de me prendre la tête avec le coté gestion, je préfère tout ce qui touche à l’UI mais malheureusement je vais être tout seul à la faire donc faut que je me tappe tout le TAF, que me conseiller vous ?

J’ai déjà essayé Hibernate, ais par manque de doc, j’ai laissé tomber, il faudrai que j’aille m’acheter un bouquin.

En ce moment je regarde la bibliothèque XStream qui permet de sérialisé des objets en XML mais je ne vois pas trop non plus comment mettre ça en place.

Là il faudrait un peu plus de détails sur ce que l’appli est censée faire et les objets qui doivent être sauvegardée pour pouvoir donner des idées.

[quote name=‘Twin’ date=’ 10 Jun 2005, 09:56’]Là il faudrait un peu plus de détails sur ce que l’appli est censée faire et les objets qui doivent être sauvegardée pour pouvoir donner des idées.
[right][post=“366863”]<{POST_SNAPBACK}>[/post][/right][/quote]

Pas de soucis, c’est une application de gestion de salle des fêtes, deux salles à gerer, une gestion des clients et des locations. Une utilisation monoposte toute bête, une personne qui s’en sert de temps en temps.

Un fichier de sauvegarde tout bête ferait l’affaire ?

Si oui rien ne vaut la sérialisation “normale” à savoir un objet qui implemente java.io.Serializable et écriture/lecture de fichiers en passant par les ObjectInputStream et ObjectOutputStream. Si ça répond à ton problème j’ai le code sous la main :

//Classe à sauver public class Save implements java.io.Serializable { ... }

[code]//Classe qui ouvre/écrit une sauvegarde
public class Saver
{

 public static Save open( String file_name) throws IOException,
   java.lang.ClassNotFoundException
   {
ObjectInputStream ois = new ObjectInputStream( new FileInputStream( new File( file_name)));
Save save = (Save) ois.readObject();

return save;

   }

   public static void write( Save save, String file_name) throws IOException
   {
ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream( new File(file_name) ));
oos.writeObject(save);
oos.flush();
oos.close();
   }

}[/code]

Si c’est pour une appli mono utilisateur en local, tu pourrais peut-être créer un objet qui agirait un peu comme une mini base de données et qui stockerait toutes tes infos dans des tableaux, hashmap etc. (attention à n’utiliser que des types sérialisables)

Tu sérialise ton objet quand tu veux sauvegarder et tu le désérialises quand tu veux recharger les infos. Tu n’as même pas besoin de bibiliothèque annexe.

Ce n’est ni propre ni optimal mais ça devrait marcher assez vite.

[edit] grilled

J’y avais penssé, j’ai regardé du coté de Xstream pour faire ça en XML, mais bon, c’est pas propre, imaginez que l’application plante avant de sauvegarder.

Je vais utiliser DBUtils, qui me parrait intéressant.

Mais ça m’interesse quand même d’avoir vos opinions sur les différentes solutions, il y a ausse iBatis que je n’ai pas cité plus haut.

+1 pour la serialization

Si j’ai bien compris à quoi sert DButils, tu vas devoir installer une base de données conjointement à ton application, non ? C’est un peu lourd pour une petite appli.

Et puis avec un DB si l’appli plante avant que tu ais stocké tes modifs en base, ce sera le même problème qu’avec un fichier sérialisé. C’est toi qui décide quand tu updates ton fichier donc si tu le fait assez souvent çe ne devrait pas poser de problème.

Le seul danger que je voie a priori, c’est une coupure de courant lors de la sauvegarde du fichier sérialisé, ce qui pourrait corrompre le dit fichier (quoique certains file systems puisse empêcher la chose je crois). Pour éviter ça il te suffit d’écrire alternativement dans deux fichiers de sauvegarde et de lire l’un quand l’autre est corrompu, ce qui te permet de revenir à l’état n-1, n étant l’état au moment de la coupure de courant.

Bon alors un conseil: OUBLIE les ejb. C’est une vraie usine à gaz, et pour une petite appli le jeu n’en vaut clairement pas la chandelle. Hibernate, j’ai jamais pratiqué, mais je pense que c’est le même topo.

A ta place je choisirais JDBC: c’est peut-être un peu “too much” pour ton appli, mais c’est (très) facile à utiliser pour peu que le sql ne te rebute pas; et puis au moins tu auras quelque chose de propre (la sérialisation, bof bof).

Tu peux trouver un chouette tutorial sur dbutils ici:
http://christophej.developpez.com/tutoriel/api/dbutils/

Pour le problème de la db, je te conseille d’utiliser hsqldb :
http://hsqldb.sourceforge.net/
C’est une base de données relationnelle écrite en java. Très pratique pour les petites applications standalone.

[quote name=‹ coati › date=’ 10 Jun 2005, 13:08’]Pour le problème de la db, je te conseille d’utiliser hsqldb :
http://hsqldb.sourceforge.net/
C’est une base de données relationnelle écrite en java. Très pratique pour les petites applications standalone.
[right][post=« 366957 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Ça a l’air pratique ça. J’essaierai de m’en souvenir pour plus tard :stuck_out_tongue:

[quote name=‹ coati › date=’ 10 Jun 2005, 14:08’]Tu peux trouver un chouette tutorial sur dbutils ici:
http://christophej.developpez.com/tutoriel/api/dbutils/

Pour le problème de la db, je te conseille d’utiliser hsqldb :
http://hsqldb.sourceforge.net/
C’est une base de données relationnelle écrite en java. Très pratique pour les petites applications standalone.
[right][post=« 366957 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Merci pour le tuto, je penssai aussi utiliser ce sgbdr qui me semble parfait pour le genre d’application que je veux faire.

Pour maintenant, j’étudirai tout ça la semaine prochaine, vive le week end. :stuck_out_tongue:

[quote name=‹ ZGoblin › date=’ 10 Jun 2005, 13:59’]Merci pour le tuto, je penssai aussi utiliser ce sgbdr qui me semble parfait pour le genre d’application que je veux faire.

Pour maintenant, j’étudirai tout ça la semaine prochaine, vive le week end.  :stuck_out_tongue:
[right][post=« 366970 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Hsqldb est vraiment super, ceci di c’est juste une base de donnée ! Ce que je veux dire c’est que tu n’as fait là que la moitié du chemin, il te faut encore choisir comment écrire dans ta base de données !
Il y a grosso modo 3 solutions : JDBC à la main, EJB ou mapping O/R (hibernate, ojb, ibatis …). Les EJB c’est poubelle directe, après il y a soit JDBC si tu sais faire du sql, soit hibernate (meilleur que les autres outils de mapping). Franchement, je t’encourage à insister du côté de hibernate : ça va surement te prendre plus de tps que du JDBC pour une première appli, mais tu en gagneras énormément les fois suivantes.

JDBC + HSQLDB en mode server dans application/fichier. C’est un bete .jar et JDBC est vraiment enfantin à utiliser.

Sinon tu peux aussi utiliser le combo JBoss+J2EE+topics dynamiques et durables avec Xdoclet et Weblang.

Ca fait un peu usine à gaz pour l’application standalone qu’il veut faire :stuck_out_tongue:

Sinon Hibernate est tres sympa et merite qu’on s’y attarde car il rend les manipulations de bases de données tres aisées. On definit un schema definissant sa db puis les objets representant les tables et c’est tout. Il s’occupe lui meme de creer les tables sur le SGBD et les mises a jour de celle-ci.

Et pour manipuler les infos, il suffit de creer une instance de l’objet, de modifier les données puis de sauver la session et lui s’occupe comme un grand de faire les ajouts / modifs / suppressions de données dans la DB :stuck_out_tongue:

Et quel bonheur de pouvoir faire ca : monobjet.monfils.monpetitfils.mavaleur = 10
à la place de requetes SQL :P)

Quelqu’un a un bon tutorial pas à pas pour hibernacle ?

Si tu utilise Eclipse (IDE que je conseille vivement), il y a ce tutorial sur developpez.com.

[quote name=‹ Twin › date=’ 12 Jun 2005, 14:02’]Si tu utilise Eclipse (IDE que je conseille vivement), il y a ce tutorial sur developpez.com.
[right][post=« 367489 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Que demander de plus :stuck_out_tongue: