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