You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Romain Manni-Bucau (JIRA)" <ji...@apache.org> on 2015/05/25 17:53:17 UTC

[jira] [Commented] (OPENEJB-2115) Asynchronous EJB method invocation fails with Asynchronous.QueueType=PRIORITY

    [ https://issues.apache.org/jira/browse/OPENEJB-2115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14558348#comment-14558348 ] 

Romain Manni-Bucau commented on OPENEJB-2115:
---------------------------------------------

agree it doesnt makes any sense while there isno API to control it that said the executor factory is used in other places (why this option exists)

we can just make it fail if set for@async

> Asynchronous EJB method invocation fails with Asynchronous.QueueType=PRIORITY
> -----------------------------------------------------------------------------
>
>                 Key: OPENEJB-2115
>                 URL: https://issues.apache.org/jira/browse/OPENEJB-2115
>             Project: OpenEJB
>          Issue Type: Bug
>          Components: ejb31
>    Affects Versions: 4.7.2
>         Environment: TomEE 1.7.2
>            Reporter: Robert Panzer
>            Priority: Minor
>
> When setting the option {{Asynchronous.QueueType=PRIORITY}} TomEE will set a {{java.util.concurrent.PriorityQueue}} as work queue on the ThreadPoolExecutor.
> A PriorityQueue expects that objects added to it are {{java.lang.Comparable}}.
> As {{ThreadPoolExecutor}} adds a {{java.util.concurrent.RunnableFuture}} that wraps the {{Callable}} created by TomEE the invocation fails with a ClassCastException:
> {quote}
> java.lang.ClassCastException: java.util.concurrent.FutureTask cannot be cast to java.lang.Comparable
> 	at java.util.concurrent.PriorityBlockingQueue.siftUpComparable(PriorityBlockingQueue.java:357)
> 	at java.util.concurrent.PriorityBlockingQueue.offer(PriorityBlockingQueue.java:489)
> 	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1361)
> 	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
> 	at org.apache.openejb.async.AsynchronousPool.invoke(AsynchronousPool.java:76)
> 	at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:263)
> 	at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
> 	at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:322)
> 	at foo.bar.asyncejb.AsyncEJB1$$LocalBeanProxy.simpleCall(foo/bar/asyncejb/AsyncEJB1.java)
> 	at foo.bar.AsyncTest.test(AsyncTest.java:39)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> {quote}
> Therefore I think that offering the option {{AsynchronousPool.QueueType=PRIORITY}} does not make any sense at all and could be completely removed.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)