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

Persistance des données Java Discussion :

Infos Annotations Stateless


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut Infos Annotations Stateless
    Bonjour,
    Je voulais avoir des précisions sur les annotations de Stateless..
    Après tests et réflexions, j'en viens à la conclusion que c'est parce que je ne mets pas les annotations qui conviennent que j'ai un nullpointerexception au moment où j'essaye de récupérer des objets dans ma base.
    ( C'est d'ailleurs ce post du 5/11/2008 12:11 qui confirme mon idée : http://www.coderanch.com/t/414899/EJ...web-client-EJB )
    Pour info, j'ai utilisé ce tuto pour faire mon appli : http://www.isima.fr/~lacomme/JEE/part1/cours_JEE_1.pdf (Contexte EJB / JPA / DAO)
    Et dans le tuto, dans la classe DaoJpa on a : @Stateless(mappedName = "Interface")
    Sauf que " interface " ne correspond absolument à rien dans le contexte de son application...
    J'ai essayé de faire rentrer un peu tout et n'importe quoi dans cette case ("Idao","PiecesFacade","EJB_Tri_Hors_FluxPU" - ce dernier étant le PU name de mon persistance.xml). Mais finalement, je pense que c'est plus simple de poser la question et surtout de comprendre ce qu'on fait, et pour quelle raison.
    J'espère que vous pourrez m'aider,
    Merci,
    Marie

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Salut,

    Sache juste que pour appeler l'annotation @Stateless dans ton EJB, tu dois préciser dans les interfaces la portée (Remote, Local) et ensuite, dans la (les ?) classes qui implémente ces interfaces, l'annotation @Stateless. Dans le cas du PDF que tu as mentionné, je pense que "Interface" doit être interpréter comme valeur où l'on doit indiquer soit l'interface Local, soit l'interface distante (Remote), comme il ne pouvais pas mettre les deux noms, il a laisser le mot "Interface".

    Pourrait-on avoir un morceau de code s'il te plait ?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut
    Salut et merci pour ta réponse,

    Ce que tu me disais me semblait logique, c'est pourquoi j'ai suivi ton conseil, j'ai mis dans mon DaoJpa.java :
    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
    @Stateless(mappedName = "IdaoLocal")
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public class DaoJpa implements IdaoLocal, IdaoRemote {
        @PersistenceContext
        private EntityManager em;
        
         // liste des pieces
        @Override
        public List<Pieces> getAllPieces() {
        [...]
        }
    
        // ajouter une piece
        @Override
        public Pieces ajouterPiece(Pieces piece) {
        [...]
        }
        
    }
    Je me suis aussi aperçue que mon code de test était sans doute incorrect et je l'ai remplacé par :

    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
    public class test2 {
     
        @EJB
        private static PiecesFacadeLocal pf;
     
        public static void main(String[] args) {      
     
            Context initialContext;
            try {
                PiecesPK pk=new PiecesPK("hhh","445");
                Pieces p=new Pieces(pk,"hhh", "jjk", "4555", "hhgf", "478522", "45855", 0);
     
                initialContext = new InitialContext();
                pf = (PiecesFacadeLocal) initialContext.lookup("ejb.PiecesFacadeLocal");
                pf.create(p);
            } catch (NamingException ex) {
                Logger.getLogger(test2.class.getName()).log(Level.SEVERE, null, ex);
            }
     
        }
    }
    Mais ce code ne fonctionne pas non plus...
    Je peux déployer mon projet sans problème, par contre quand je fais run file sur ma classe test2, j'ai ces messages :

    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
    run:
    juil. 31, 2014 11:43:35 AM test.test2 main
    SEVERE: null
    javax.naming.NamingException: Lookup failed for 'ejb.PiecesFacadeLocal' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: ejb.PiecesFacadeLocal not found]
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
        at javax.naming.InitialContext.lookup(InitialContext.java:411)
        at test.test2.main(test2.java:57)
    Caused by: javax.naming.NameNotFoundException: ejb.PiecesFacadeLocal not found
        at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:237)
        at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:204)
        at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
        at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:143)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:173)
        at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
        at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496)
        at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222)
        at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
        at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
    
    BUILD SUCCESSFUL (total time: 4 seconds)
    Ah et voilà mon jndi.properties
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.naming;factory.initial = com.sun.enterprise.naming.SerialInitContextFactory
    java.naming.factory.url.pkgs = com.sun.enterprise.naming
    java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
    J'ai copié-collé le même que celui du tuto, je ne sais pas trop si c'était la meilleurs chose à faire..

    Bonne journée,

    Marie

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    ou est ce que tu as declaré PiecesFacadeLocal?
    Eric

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut
    Salut,

    Voilà mon arborescence :

    Nom : arbo.PNG
Affichages : 226
Taille : 16,5 Ko

    Et voilà le contenu de mon fichier PiecesFacadeLocal.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Local
    public interface PiecesFacadeLocal {
     
        void create(Pieces pieces);
        void edit(Pieces pieces);
        void remove(Pieces pieces);
        Pieces find(Object id);
        List<Pieces> findAll();
        List<Pieces> findRange(int[] range);
        int count();  
    }
    PiecesFacade.java :
    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
    @Stateless
    public class PiecesFacade extends AbstractFacade<Pieces> implements PiecesFacadeLocal, PiecesFacadeRemote {
        @PersistenceContext(unitName = "EJB_Tri_Hors_FluxPU")
        private EntityManager em;
     
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
     
        public PiecesFacade() {
            super(Pieces.class);
        }
     
    }
    AbstractFacade.java :
    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
     
    public abstract class AbstractFacade<T> {
        private Class<T> entityClass;
        protected abstract EntityManager getEntityManager();
     
        public AbstractFacade(Class<T> entityClass) {
            this.entityClass = entityClass;
        }
     
        public void create(T entity) {
            getEntityManager().persist(entity);
        }
     
        public void edit(T entity) {
            getEntityManager().merge(entity);
        }
     
        public void remove(T entity) {
            getEntityManager().remove(getEntityManager().merge(entity));
        }
     
        public T find(Object id) {
            return getEntityManager().find(entityClass, id);
        }
     
        public List<T> findAll() {
            javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
            cq.select(cq.from(entityClass));
            return getEntityManager().createQuery(cq).getResultList();
        }
     
        public List<T> findRange(int[] range) {
            javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
            cq.select(cq.from(entityClass));
            javax.persistence.Query q = getEntityManager().createQuery(cq);
            q.setMaxResults(range[1] - range[0]);
            q.setFirstResult(range[0]);
            return q.getResultList();
        }
     
        public int count() {
            javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
            javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
            cq.select(getEntityManager().getCriteriaBuilder().count(rt));
            javax.persistence.Query q = getEntityManager().createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        }
     
    }
    Et dans mon programme de test, je déclare un objet PiecesFacadeLocal au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class test2 {       @EJB     private static PiecesFacadeLocal pf;       public static void main(String[] args) { [...] } }
    Désolée de mettre autant de code mais ça pourra peut-être vous permettre de vérifier/corriger mes annotations.
    Je ne suis pas encore très à l'aise avec tout ça, l'erreur vient forcément de moi.

    Merci pour votre aide,

    Marie

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    ajoute comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Stateless
    @LocalBean
    public class PiecesFacade extends AbstractFacade<Pieces> implements PiecesFacadeLocal, PiecesFacadeRemote {
    eric

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/06/2010, 10h10
  2. Réponses: 2
    Dernier message: 31/03/2010, 11h31
  3. Réponses: 3
    Dernier message: 25/07/2002, 10h42
  4. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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