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

JPA Java Discussion :

Problème à la compilation du module EJB


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Par défaut Problème à la compilation du module EJB
    Bonjour à tous,

    Ca fait un moment que je tourne en rond. Je n'arrive pas à m'en sortir.

    • J'ai créé une Appli Entreprise + EJBModule + WARModule (avec framework struts)
    • J'ai créé un simple projet java qui contient les entités générées à partir d'entité de base de données + ajout de librairie Persistence
    • J'ai ajouté le jar du projet aux 2 modules dans leurs librairies respectives
    • J'ai généré automatiquement les JPAController à partir des entites
    • J'ai rajouté des ejb
    • J'ai créé les action/forms struts puis les jsp

    Ca marche j'ai accès à mes JSP les données affichées viennent de la BDD

    Mais j'ai 2 soucis

    1- Je ne peux pas clean&build les EntiteJPAController généré auto car il ya une erreur

    error: cannot find symbol CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
    symbol: method getCriteriaBuilder()
    location: variable em of type EntityManager

    2- Je n'arrive pas à faire de requete d'insertion dans la BDD voici l'erreur :

    java.lang.IllegalStateException: ERROR: only SessionBeans with bean-managed transactionscan obtain UserTransaction


    Je suis désolé j'ai trop la sensation d'être un newbie sur les 2erreurs mais j'y arrive pas :'(


    IDE :Netbeans 7.0.1
    JDK : 1.7
    JEE version : JEE6
    JPA lib : Persistence -ejb3-persistence.jar
    Persistence Unit : EclipseLink (JPA2.0)
    OS : Windows Seven

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Salut

    Pour le 1), j'ai pas d'idée me faudrait un schéma de l'archi des projets, de tête ca marche pas :p.
    Pour le 2) on dirait un problème de transaction récupérer à la main alors que seul les EJB BMT peuvent le récupérer et je supposerai que ton EJB est en CMT.

    Est-ce que dans le code il y a un "UserTransaction" ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Par défaut
    Pour le 1) c'est ça que tu me demandes ?



    voici un log de l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Compiling 13 source files to path\venteNew2-ejb\build\classes
    path\ArticleJpaController.java:211: error: cannot find symbol
                CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
      symbol:   method getCriteriaBuilder()
      location: variable em of type EntityManager
    path\ArticleJpaController.java:213: error: method createQuery in interface EntityManager cannot be applied to given types;
                Query q = em.createQuery(cq);
      required: String
      found: CriteriaQuery
    Pour le 2) voici le code qui produit l'erreur : insertArticle(Article a)
    effectivement j'essaie de faire un injection de dépendance avec annotation @Resource pour récupérer le context du serveur

    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
    49
    50
    51
    52
    53
    54
    55
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package fr.ipst.vente.metier.ejbs;
     
    import fr.ipst.vente.metier.daos.ArticleJpaController;
    import fr.ipst.vente.metier.entites.Article;
    import java.util.List;
    import javax.annotation.Resource;
    import javax.ejb.EJBContext;
    import javax.ejb.Stateful;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import javax.transaction.UserTransaction;
     
    /**
     *
     * @author Denis
     */
    @Stateful
    public class EJBCatalogue implements EJBCatalogueLocal {
     
        @Resource
        private EJBContext context;
     
        @Override
        public List<Article> getCatalogue() throws Throwable {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("venteNew2-ejbPU");
            ArticleJpaController daoa = new ArticleJpaController(null, emf);
            List<Article> liste = daoa.findArticleEntities();
            return liste;
        }
     
        // Add business logic below. (Right-click in editor and choose
        // "Insert Code > Add Business Method")
        @Override
        public Article getArticle(String ref) throws Throwable {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("venteNew2-ejbPU");
            ArticleJpaController daoa = new ArticleJpaController(null, emf);
            Article a = daoa.findArticle(ref);
            return a;
        }
     
        @Override
        public void insertArticle(Article a) throws Throwable {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("venteNew2-ejbPU");
            UserTransaction utx = context.getUserTransaction();
            ArticleJpaController daoa = new ArticleJpaController(utx, emf);
            daoa.create(a);
        }
     
     
    }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Pour le 1), exactement , il me faudait aussi le projet ear
    Pour le 2) Les EJBs sont transactionnels par nature, ce qui signifie qu'il n'y a pas besoin de gérer les transactions, et qu'il est même interdit de le faire (comme le dit ton erreur)

    il existe cependant deux type d'EJB :
    - CMT : Les transactions sont faite toutes seul et interdiction de les gérer seul.
    - BMT : Où il faut gérer soit même les transactions à la main (ce qui est fait dans le cas présent)

    Donc si il faut gérer les transactions à la main, alors il faut ajouter l'annotation suivante a ton EJB :@TransactionManagement(value= TransactionManagementType.BEAN)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Par défaut
    Voilà avec le ear c'est bien ça ?


    pour le 2)
    Je comprend pas CMT ce que cela veut dire
    Et dans le cas de CMT comment faire une transaction d'insertion dans la BDD ?

    En tout cas merci beaucoup pour ton aide et ton temps

    EDIT : j'ai testé l'annotation @TransactionManagement(value= TransactionManagementType.BEAN) => plus d'erreur meme si l'insertion n'est pas faites héhé !!! je peux enfin bosser >.<

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Je pense que la transaction que tu récupères n'est pas lié à l'entityManagerFactory que tu crées.
    Pour récupérer un EntityManagerFactory dans un EJB sans le créer (pas injection donc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@PersistenceUnit(unitName="venteNew2-ejbPU")
    	private EntityManagerFactory emf;
    Et pour la transaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@Resource
    	private UserTransaction userTransaction;
    Tu peux aussi récupérer directement un EntityManager via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@PersistenceContext(unitName="venteNew2-ejbPU")
    	private EntityManager em;
    Je n'ai testé les BMT qu'avec un EntityManager par contre, je sais pas ce que cela va donner avec un EntityManagerFactory

    Pour le 1) je sèche complétement, j'ai pas assez d'information comme ca

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

Discussions similaires

  1. [JAXB] Problème de compilation Module Jaxb sur eclipse
    Par McCrazy dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 22/07/2010, 14h43
  2. EJB Session et Annotations - problèmes de compilation
    Par Jonathan13 dans le forum Java EE
    Réponses: 8
    Dernier message: 27/08/2008, 20h43
  3. problème de compilation avec module Unix
    Par gorgonite dans le forum Caml
    Réponses: 3
    Dernier message: 14/09/2007, 18h57
  4. Réponses: 5
    Dernier message: 04/07/2006, 00h11
  5. [EJB][Jonas]Problème de compilation
    Par jool dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 06/02/2005, 17h34

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