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

Java EE Discussion :

Retour null sur tous mes EJB Stateless. [EJB3]


Sujet :

Java EE

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Retour null sur tous mes EJB Stateless.
    Bonjour,

    Je suis en train de développer un service (sous forme d'EJB3 sous SJSAS 9) qui me permet de travailler sur un repository (JSR 170 - Jackrabbit).
    Les méthodes de cet EJB (ServiceRepositoryBean ) me permettent de créer des noeuds simples et complexes, et de lire leurs propriétés.

    Depuis un autre EJB (en local), je n'ai aucun proplème en écriture.
    En revanche dès que j'invoque une méthode censée me renvoyer une valeur (ex. la méthode getNameByUUID qui doit me renvoyer une String) celle-ci est null dans l'EJB appelant alors que je peux la logguée dans l'EJB d'accès ServiceRepository.

    Je sait que le type de retour des méthodes EJB doivent être ceux de RMI (donc serializable ?). Je vois partout des exemples avec des retours de méthodes plus complexes qu'une simple String (ex : List<String>).

    Comment se fait-il qu'aucun des mes retours de méthodes ne passent ?

    Nota : Cet EJB est accessible en local et en remote.

    L'EJB d'accès au repository :
    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
     
    package ...
     
    import ...
     
    @Interceptors (com.common.interceptor.LogInterceptor.class)
    @Stateless (name="ServiceRepository")
    public class ServiceRepositoryBean implements ServiceRepositoryLocal, ServiceRepositoryRemote
    {
        @Resource (name="jcr/Repository")
        private  Repository repository;
     
        private Logger log = Logger.getLogger ( this.getClass ().getName () );
     
        private Session session;
        private Workspace workspace;
        private Node rootNode;
        private Node headNode;
     
    	...
     
        /** Creates a new instance of ServiceRepositoryBean */
        public ServiceRepositoryBean ()
        {}
     
     
        @PostConstruct
        public void postConstruct () throws Exception
        {
            Credentials credentials = new SimpleCredentials (login, password.toCharArray ());
            session = repository.login (credentials);
            workspace = session.getWorkspace ();
            rootNode = session.getRootNode ();
     
            registerNameSpace (prefix, uri);
            headNode = addHeadNode (rootNodeName);
        }
     
        @PreDestroy
        public void logout ()
        {
            session.logout ();
        }    
     
        /* Si je log le getName ici, c'est bon, mais la valeur récupérée dans l'autre EJB est toujours null */
        public String getNameByUUID (String targetUUID) throws Exception
        { return session.getNodeByUUID (targetUUID).getName (); }
     
        /*Pas de problème ici car pas de retour*/    
        public void setPropertyByUUID (String targetUUID, String propertyName, String propertyValue) throws Exception
        { session.getNodeByUUID (targetUUID).setProperty (propertyName, propertyValue); session.save (); }
     
    }

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    En fait il semble que l'interceptor (se chargeant des logs) lié à l'EJB d'accès au repository bloque les retours de méthodes.

    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
     
    /*
     * CommonInterceptor.java
     *
     * Created on 3 janvier 2007, 16:49
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    import java.util.logging.Logger;
    import javax.interceptor.AroundInvoke;
    import javax.interceptor.InvocationContext;
     
    public class LogInterceptor
    {
     
        // ----- Variables --------------------------------------------------
        private Logger log = Logger.getLogger ( this.getClass ().getName () );
     
        /** Creates a new instance of CommonInterceptor */
        public LogInterceptor ()
        {}
     
        @AroundInvoke
        public void log ( InvocationContext invocation ) throws Exception
        {
            String className = invocation.getTarget ().getClass ().getName ();
            String methodName = invocation.getMethod ().getName ();
     
            log.info (">> BEFORE");
            log.info (">> [ " + className + " ]");
            log.info (">> [ " + methodName + " ]");
            try
            {
                invocation.proceed ();
            }
            finally
            {
                log.info (">> AFTER");
                log.info (">> [ " + className + " ]");
                log.info (">> [ " + methodName + " ]");
            }
        }
    }
    Du coup, j'ai du mal à comprendre le "proceed"...

  3. #3
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Un stateless session bean avec des attributs dépendant du client ? (login et password par exemple, si j'ai bien tout compris...)

    Tu devrais plus te tourner vers un stateful session bean qui te permet d'associer un bean à chaque client, et chaques clients ayant leur propre et unique bean...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Euh... votre réponse ne serait pas celle de mon autre poste : "[Débutant] : Comment conserver une session avec des EJB ?".

    Ce stateless à des attributs qui lui sont propres, sans être dépendant d'un client en particulier... mais sont-ils partagés ?
    Si j'ai attribut référencant un objet (avec, pour expliciter mon propos un getter sur cet attribut), les différents clients obtiendront-ils tous le même objet ?
    Ou bien, du fait du caractère sans du stateless, y a t-il une perte de cette référence ?

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

Discussions similaires

  1. [AC-2007] Champ d'un formulaire grisé sur tous mes enregistrements
    Par marionneau dans le forum IHM
    Réponses: 5
    Dernier message: 31/07/2011, 21h09
  2. Probleme d'affichage sur tous mes sites
    Par PunkMetal dans le forum Langage
    Réponses: 7
    Dernier message: 29/04/2011, 19h24
  3. Execution macro sur tous mes documents words
    Par Balbo dans le forum VBA Word
    Réponses: 1
    Dernier message: 11/07/2008, 11h21
  4. [AJAX] gestionnaire sur tous mes anchors
    Par sorenson2 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/07/2007, 09h45
  5. Répeter les modifications sur tous mes pages web?
    Par mamiberkof dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 19/04/2006, 09h59

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