Java 关闭Wildfly/Jboss AS:阻止org.Jboss.AS.ejb3.component.EJBComponentUnavailableException

Java 关闭Wildfly/Jboss AS:阻止org.Jboss.AS.ejb3.component.EJBComponentUnavailableException,java,jboss,wildfly,Java,Jboss,Wildfly,我有一个项目,它读取SQS队列并处理它们 其中之一是,在所有工作完成后,将信息持久化到数据库中 问题:当我要求应用程序服务器关闭时,当前的工作将丢失,因为当它尝试提交事务时,我得到了如下错误: org.jboss.as.ejb3.component.EJBComponentUnavailableException:JBAS014559:调用无法继续,因为组件正在关闭 在org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFact

我有一个项目,它读取SQS队列并处理它们

其中之一是,在所有工作完成后,将信息持久化到数据库中

问题:当我要求应用程序服务器关闭时,当前的工作将丢失,因为当它尝试提交事务时,我得到了如下错误:

org.jboss.as.ejb3.component.EJBComponentUnavailableException:JBAS014559:调用无法继续,因为组件正在关闭
在org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:59)[wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)[wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55)[wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
位于org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:439)
位于org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
在org.jboss.invocation.privilegedwithcombineterceptor.processInvocation(privilegedwithcombineterceptor.java:80)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
位于org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
位于org.jboss.as.ee.component.ViewDescription$1.processInvocation(viewsDescription.java:182)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
位于org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
在com.contaazul.invoiceissuer.repository.eventResultPostory$$$$view8.create(未知源)[invoice-issuer-persistence-1.2-SNAPSHOT.jar:]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)[rt.jar:1.8.0_20]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[rt.jar:1.8.0\u 20]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[rt.jar:1.8.020]
在java.lang.reflect.Method.invoke(Method.java:483)[rt.jar:1.8.0\u 20]
在org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:401)[weld-core-impl-2.1.2.Final.jar:2014-01-09:23]
在org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:99)[weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
在org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)[weld-core-impl-2.1.2.Final.jar:2014-01-09:23]
在org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:65)[weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
在org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)[weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
不能再次处理同一消息。我正在与不支持该功能的外部系统集成

因此,基本上,我无法从错误中恢复,因为没有持久化的信息,我无法再次处理它


我怎样才能很好地控制这一点,以便在关闭之前保持当前的工作?

要解决这个问题,您必须向EJB的调用者添加@DependsOn(ejbName)注释。

代码是什么样子的?使用单例?