[
https://issues.apache.org/jira/browse/TOMEE-2653?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jean-Louis MONTEIRO updated TOMEE-2653:
---------------------------------------
Fix Version/s: (was: 8.0.0-M4)
(was: 1.7.6)
> TomEE throws a JMS2 exception when the request CDI Scope closes down, if you
> thread is in an interrupted state
> --------------------------------------------------------------------------------------------------------------
>
> Key: TOMEE-2653
> URL: https://issues.apache.org/jira/browse/TOMEE-2653
> Project: TomEE
> Issue Type: Bug
> Affects Versions: 7.0.6, 7.1.1, 8.0.0-M3
> Reporter: Jonathan S Fisher
> Assignee: Jonathan S Fisher
> Priority: Major
> Fix For: 8.0.0-Final
>
>
> TomEE throws a JMS2 exception when the request CDI Scope closes down, if you
> thread is in an interrupted state.
> Let's say you start a message consumer in a request scoped context. If you
> interrupt the thread (stopping the consumer) and close the consumer properly,
> TomEE will throw an exception when it cleans up the request scope (the point
> at which closes the JMS Context, per the JMS 2.0 spec).
>
> {code:java}
> SEVERE: Exception thrown while destroying bean instance :
> [RequestAutoContextDestruction, WebBeansType:MANAGED, Name:null, API
> Types:[org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$RequestAutoContextDestruction,java.lang.Object,org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$AutoContextDestruction,java.io.Serializable],
> Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]]
> javax.jms.JMSRuntimeException: java.io.InterruptedIOException
> at
> org.apache.openejb.resource.activemq.jms2.JMS2.toRuntimeException(JMS2.java:86)
> at
> org.apache.openejb.resource.activemq.jms2.JMSContextImpl.close(JMSContextImpl.java:155)
> at
> org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$AutoContextDestruction.destroy(JMS2CDIExtension.java:158)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at
> org.apache.webbeans.intercept.LifecycleInterceptorInvocationContext.proceed(LifecycleInterceptorInvocationContext.java:103)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.preDestroy(InjectionTargetImpl.java:352)
> at
> org.apache.webbeans.component.AbstractOwbBean.destroy(AbstractOwbBean.java:179)
> at
> org.apache.webbeans.context.AbstractContext.destroyInstance(AbstractContext.java:206)
> at
> org.apache.webbeans.context.AbstractContext.destroyInstance(AbstractContext.java:192)
> at
> org.apache.webbeans.context.AbstractContext.destroy(AbstractContext.java:218)
> at
> org.apache.webbeans.web.context.ServletRequestContext.destroy(ServletRequestContext.java:69)
> at
> org.apache.webbeans.web.context.WebContextsService.destroyRequestContext(WebContextsService.java:426)
> at
> org.apache.openejb.cdi.CdiAppContextsService.destroyRequestContext(CdiAppContextsService.java:113)
> at
> org.apache.webbeans.web.context.WebContextsService.endContext(WebContextsService.java:223)
> at
> org.apache.deltaspike.cdise.owb.OpenWebBeansContextControl.stopRequestScope(OpenWebBeansContextControl.java:230)
> at
> org.apache.deltaspike.cdise.owb.OpenWebBeansContextControl.stopContext(OpenWebBeansContextControl.java:104)
> at com.xxx.ContactActivityMonitor.run(ContactActivityMonitor.java:94)
> at org.apache.openejb.threads.task.CURunnable$1.call(CURunnable.java:35)
> at org.apache.openejb.threads.task.CURunnable$1.call(CURunnable.java:32)
> at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100)
> at org.apache.openejb.threads.task.CURunnable.run(CURunnable.java:32)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: javax.jms.JMSException: java.io.InterruptedIOException
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
> at
> org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1310)
> at
> org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1302)
> at org.apache.activemq.ActiveMQSession.doClose(ActiveMQSession.java:666)
> at org.apache.activemq.ActiveMQSession.close(ActiveMQSession.java:657)
> at
> org.apache.openejb.resource.activemq.jms2.JMSContextImpl.close(JMSContextImpl.java:147)
> ... 29 more
> Caused by: java.io.InterruptedIOException
> at
> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:128)
> at
> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
> at
> org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
> at
> org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1308)
> ... 33 more
> Caused by: java.lang.InterruptedException
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
> at
> java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
> at
> java.util.concurrent.LinkedBlockingQueue.put(LinkedBlockingQueue.java:339)
> at
> org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:97)
> ... 36 more
> {code}
> This appears to be a result JMSContextImpl attempting to close both the
> session and the connection:
> {code}
> @Override
> public void close() {
> try {
> synchronized (this) {
> if (session != null) {
> session.close();
> }
> if (connection != null) {
> connection.close();
> }
> closed = true;
> }
> } catch (final JMSException e) {
> throw toRuntimeException(e);
> }
> }
> {code}
> Per the JMS Connection spec, closing the connection should be more than
> sufficient to cleanup.
--
This message was sent by Atlassian Jira
(v8.3.2#803003)