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:
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:
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:
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:
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