Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
4.7.2
-
None
-
None
-
TomEE 1.7.2
Description
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:
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)
Therefore I think that offering the option AsynchronousPool.QueueType=PRIORITY does not make any sense at all and could be completely removed.