[ 
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)

Reply via email to