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 :
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
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); } } } }
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 :
D'avance merci pour votre aide..
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]
Alex
Partager