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 :

EJBComponentUnavailableException aléatoire lors de l'appel d'une méthode de l'EJB


Sujet :

Java EE

  1. #1
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut EJBComponentUnavailableException aléatoire lors de l'appel d'une méthode de l'EJB
    Bonjour à tous,

    J'ai développé un application Java EE sur WildFly 8.2.1 (Jboss).
    L'application utilise :
    - Hibernate avec une base de donnée Oracle
    - Primefaces

    J'ai créé un Service @Stateless dans mon projet EJB, et je l'injecte dans mon @ApplicationScoped via l'annotation @EJB.
    Dans mon ApplicationScoped j'ai créé un ScheduledExecutorService afin d’exécuter une méthode de mon ejb toutes les 2 minutes.
    Le problème est qu'aléatoirement j'ai une exception "EJBComponentUnavailableException : JBAS014559: Invocation cannot proceed as component is shutting down" lors de l'appel de la méthode de l'ejb.
    Je n'arrive pas a comprendre cette erreur car mon application n'est pas en train de s’arrêter, et ce message est loggé très souvent..
    Ce que je comprend, et ca vaut ce que ca vaut, c'est que l'EJB Dao est en train de s’arrêter ("component is shutting down") alors que j’essaye d'y accéder...

    Voici des extraits du code :

    ApplicationScoped :
    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
     
    @ManagedBean(eager = true)
    @ApplicationScoped
    public class ApplicationBean implements Serializable {
     
        @EJB
        EqpDetailsService eqpDetailsService;
        private Log log = LogFactory.getLog(this.getClass().getName());
        private Date lastUpdate;
        private List<EqpDetails> eqpDetails;
        private ScheduledExecutorService scheduler;
     
        @PostConstruct
        public void init() {
            scheduler = Executors.newSingleThreadScheduledExecutor();
            scheduler.scheduleWithFixedDelay(new Updater(), 0, 120, TimeUnit.SECONDS);
        }
     
        public void updateDatas() {
            try {
                if (eqpDetailsService != null) {
                    eqpDetails = eqpDetailsService.getEqpDetails();  // L'exception est remontée de ma Dao - (voir plus bas)
                    lastUpdate = new Date();
                }
            } catch (Exception ex) {
                log.info("Error in updateDatas", ex);    // L'exception est loggée ici (en 2eme)
            }
        }
     
        protected class Updater implements Runnable {
            @Override
            public void run() {
                try {
                    updateDatas();
                } catch (Exception e) {
                    log.error("Updater can't call updateData() : ", e);
                }
            }
        }
    }
    Mon service :
    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
     
    @Stateless
    public class EqpDetailsService implements Serializable {
        @EJB
        EqpDetailsDao eqpDetailsDao;
        private final Log log = LogFactory.getLog(this.getClass().getName());
     
        public List<EqpDetails> getEqpDetails() {
            List<EqpDetails> listToReturn = new ArrayList<>();
            List<Object[]> datas = eqpDetailsDao.getEqpDetails();
            if (datas != null) {
                 try {
                      for (Object[] data : datas) {
                           // Fill listToReturn list
                      }
                } catch (Exception e) {
                      log.error(e); // L'exception est loggée également ici (en 1er)
                }
            }
            return listToReturn;
    }

    La DAO appelée par le service :
    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
     
    @Stateless
    public class JpaEqpDetailsDao implements EqpDetailsDao {
        @PersistenceContext(unitName = "EWaceLiveV2-ejbPU")
        private EntityManager em;
        private final Log log = LogFactory.getLog(this.getClass().getName());
     
        @Override
        public List<Object[]> getEqpDetails() {
            try {
                String query = "MA REQUETTE SQL";
                return em.createNativeQuery(query).getResultList();
            } catch (Exception e) {
                log.error("JpaEqpDetailsDao : getEqpDetails() : ", e);
            }
            return null;
        }
    }

    Full stacktrace :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    15:08:04,457 ERROR [org.jboss.as.ejb3.invocation] (pool-6-thread-1) JBAS014134: EJB Invocation failed on component EqpDetailsService for method public java.util.List com.st.rou.ews.EWaceLive.Services.EqpDetailsService.getEqpDetails(): org.jboss.as.ejb3.component.EJBComponentUnavailableException: JBAS014559: Invocation cannot proceed as component is shutting down
    	at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:59) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    	at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:448)
    	at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    	at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
    	at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    	at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
    	at com.st.rou.ews.EWaceLive.Services.EqpDetailsService$$$view18.getEqpDetails(Unknown Source) [EWaceLiveV2-ejb.jar:]
    	at com.st.rou.ews.EWaceLive.Controllers.ApplicationBean.updateDatas(ApplicationBean.java:137)
    	at com.st.rou.ews.EWaceLive.Controllers.ApplicationBean$Updater.run(ApplicationBean.java:413)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_67]
    	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_67]
    	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_67]
     
    15:08:04,648 INFO  [com.st.rou.ews.EWaceLive.Controllers.ApplicationBean] (pool-6-thread-1) Error in updateDatas: org.jboss.as.ejb3.component.EJBComponentUnavailableException: JBAS014559: Invocation cannot proceed as component is shutting down
    	at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:59) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    	at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:448)
    	at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    	at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
    	at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182)
    	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    	at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
    	at com.st.rou.ews.EWaceLive.Services.EqpDetailsService$$$view18.getEqpDetails(Unknown Source) [EWaceLiveV2-ejb.jar:]
    	at com.st.rou.ews.EWaceLive.Controllers.ApplicationBean.updateDatas(ApplicationBean.java:137) [classes:]
    	at com.st.rou.ews.EWaceLive.Controllers.ApplicationBean$Updater.run(ApplicationBean.java:413) [classes:]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_67]
    	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_67]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_67]
    	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_67]
    D'avance merci pour votre aide..

    Alex
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  2. #2
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut Up ? :(
    Up ! :'(
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  3. #3
    Membre du Club
    Homme Profil pro
    Software engineer
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Essaie d'ajouter l'annotation @DpendesOn à ta classe qui fait appel à l'EJB; ou encore ton objet est déjà marqué comme devant être supprimé à cause tu timeout de ton scheduler.
    "L'homme ne devient Homme que par éducation."
    "Des pensées sans contenu sont vides, des intuitions sans concepts, aveugles."
    "Une proposition incorrecte est forcément fausse, mais une proposition correcte n'est pas forcément vraie."

    Emmanuel Kant

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. problème lors de l'appel d'une méthode
    Par sfaxian dans le forum VB.NET
    Réponses: 9
    Dernier message: 10/07/2009, 14h39
  2. Erreur lors de l'appel d'une méthode Zend Helper
    Par donbrico dans le forum Zend Framework
    Réponses: 4
    Dernier message: 16/04/2008, 15h52
  3. Réponses: 5
    Dernier message: 05/09/2007, 16h23
  4. [forward] Erreur lors de l'appel d'une méthode
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/07/2007, 17h10
  5. POO Trap lors de l'appel d'une méthode
    Par QAYS dans le forum Delphi
    Réponses: 3
    Dernier message: 05/06/2007, 21h22

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