J2EE EJB3 JBOSS Ejb entity

J2EE EJB3 JBOSS Ejb entity - Java - Programmation

Marsh Posté le 05-11-2007 à 23:12:05    

Salut j'ai une ptite question par rapport à la persistance en ejb3  
 
Alors j'aimerai persister différents objets. J'ai suivi un très bon tuto sur eclipse totale qui me permet de persister des objets de type produis définis de cette façon :  
 

Code :
  1. package fr.unantes.metier;
  2. import java.io.Serializable;
  3. import javax.persistence.Entity;
  4. import javax.persistence.Id;
  5. @Entity
  6. public class Produit implements Serializable {
  7.    @Id
  8.    private String id;
  9.    private String libelle;
  10.    private int quantiteEnStock;
  11. ...


 
Donc je suis parti de ce principe pour faire persister d'autre objet par exemple :  
 

Code :
  1. package fr.unantes.metier;
  2. import java.io.Serializable;
  3. import javax.persistence.Entity;
  4. import javax.persistence.Id;
  5. @Entity
  6. public class Document implements Serializable {
  7. @Id
  8. private int id;
  9. private FacadeM myFacadeM;
  10. private Membre transmet;


 
Avouez que y'a pas grand chose qui change ?  
 
Et bien il me trouve cette erreur lors du déploiement du serveur jboss :  
 
javax.persistence.PersistenceException: org.hibernate.MappingException: Could not determine type for: fr.unantes.metier.FacadeM, for columns: org.hibernate.mapping.Column(myFacadeM)]
 
Est ce que quelqu'un sait pourquoi ?  
 
Mes jars sont bien inclus j'ai aucune erreur dans mon projet, juste celle là lors du déploiement  :kaola:  
 
Merci ;)


---------------
http://plainedemazerolles.free.fr
Reply

Marsh Posté le 05-11-2007 à 23:12:05   

Reply

Marsh Posté le 05-11-2007 à 23:30:58    

Bon et bien aussitot poster aussitot trouvé la réponse ! (et pourtant ça faisait des heures que je cherchais)
 
Donc si ça peut aider, il faut rajouter implement Serializable dans FacadeM et Membre dans mon cas.
 
Par contre je veux bien qu'on m'explique pourquoi ???
 
Et tant que j'y suis pour rester dans le même sujet. Pour faire persister mes objet je me sert de :  
 

Code :
  1. @PersistenceContext
  2. EntityManager em;
  3. public void ajouter(Produit produit) {
  4. em.persist(produit);


 
ça pose un problème si le produit existe deja dans la bd. Est ce qu'il y a un moyen pour contourner le pb ? par exemple à la place de persist une méthode qui met à jour ou qui ajoute uniquement si l'objet n'existe pas déjà ?  
 
Merci :)

Reply

Marsh Posté le 06-11-2007 à 02:24:55    

salut,
alors le serializable, c'est parce que tes données vont être transmises à la base de données par le éréseau", donc il faut qu'elles puissent être encryptée/décryptée, d'où le serializable.
Ensuite, ce que tu peux faire pour le persist c'est :  
 
Entity e = em.find(maclass.class,id);
if (e!=null) persist(e);
 
Sinon il y a la methode la methode flush()
Corrigez moi si il y a des erreurs.  
 Bon courage

Reply

Marsh Posté le 06-11-2007 à 07:43:07    

Merci beaucoup j'essaierai ça :)


---------------
http://plainedemazerolles.free.fr
Reply

Marsh Posté le 06-11-2007 à 10:09:15    

C'est bon ça a marché en modifiant un ou deux trucs merci ;)

Reply

Marsh Posté le 10-11-2007 à 14:46:56    

Salut j'ai une ou deux questions à propos de jboss.  
 
Comment faire pour instancier des objets lors du lancement du serveur jboss ou lancer plusieurs threads par exemple ?  
 
Par exemple je veux que l'appli qui tourne sur mon serveur d'application aie lors de son lancement une référence vers un objet EntityManager, comment faire ?


---------------
http://plainedemazerolles.free.fr
Reply

Marsh Posté le 11-11-2007 à 12:00:22    

Reply

Marsh Posté le 11-11-2007 à 14:10:04    

Allez tant que j'y suis je voudrai savoir si c'est ce que je fais c'est pas trop crade ou pas ?  
 
J'ai une application serveur qui tourne avec jboss et une application cliente. Dans mon application Serveur j'ai une package chargé des communication et un pour le code Metier.  
 
Dans mon package Metier, j'ai une interface permettant d'acceder au reste du package et c'est dans cette classe que j'ai mis mon EntityManager pour gérer la persistance. Déjà j'ai aucune idée si c'est une bonne idée de le mettre la ou pas ?  
 
Ensuite le principe c'est que mon client se connecte sur le serveur grâce à cette méthode :  
 

Code :
  1. IFacadeSC FacadeServeurClient = (IFacadeSC) context.lookup("FacadeSC/remote" );


 
Et grâce à cette facade il peut utiliser les méthodes du serveur.  
 
Donc autre question afin d'instancier la facade de mon package métier j'ai mis dans le constructeur de ma facade serveurclient (qui est sur le serveur) ceci :
 

Code :
  1. public FacadeSC() throws NamingException
  2. {
  3. Context context = new InitialContext();
  4. FacadeMetier = (IFacadeM) context.lookup("FacadeM/remote" );
  5. }


 
La encore j'ai vraiment fait ça à tatons, ça fonctionne bien mais j'aimerai savoir si c'est réelement comme ça qu'il faut faire ?
 
merci :)


Message édité par guiguivts le 11-11-2007 à 14:10:43

---------------
http://plainedemazerolles.free.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed