[
https://issues.apache.org/jira/browse/SHIRO-315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13178716#comment-13178716
]
Maria Jurcovicova commented on SHIRO-315:
-----------------------------------------
Hi Les,
I experimented with SubjectAwareExecutorService again. Turns out, that the
problem is in the used java library. I compiled Shiro in both Java 1.5 and 1.6
used default java library and JRE in each case.
Compile Shiro in 1.5:
>From trunk: does not compile
My patch: compile
Compile Shiro in 1.6 with backward compatibility set to 1.5:
>From trunk: compile
My patch: does not compile
The problem is that the class SubjectAwareExecutorService implements
java.util.concurrent.ExecutorService which changed in between JDK 1.5 and JDK
1.6.
JDK 1.5 version: <T> T invokeAny(Collection<Callable<T>> tasks)
JDK 1.6 version: <T> T invokeAny(Collection<? extends Callable<T>> tasks)
It is not possible to write an implementation that satisfy both interfaces.
ExecutorService in JDK 1.6 is not backward compatible with JDK 1.5 see [1].
They are binary compatible, but not source code compatible.
There is no perfect solution. Java 1.5 is not supported for 'standard' users,
but it is supported for 'business' users. It is still in use and as far as I
know a lot of projects are still written in it. As they are binary compatible,
compiled Shiro should be usable in all three Java 1.5, 1.6 and 1.7 versions
anyway.
We can document the issue, so people will not loose time with the same problem.
Links:
[1] Change entry in sun bug tracker:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6267833
[2] Java 1.5 ExcecutorService API:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ExecutorService.html
[3] Java 1.6 ExcecutorService API:
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html
> SubjectAwareExecutorService in shiro-core does not compile
> ----------------------------------------------------------
>
> Key: SHIRO-315
> URL: https://issues.apache.org/jira/browse/SHIRO-315
> Project: Shiro
> Issue Type: Bug
> Components: Authentication (log-in)
> Affects Versions: 1.2.0
> Reporter: Maria Jurcovicova
> Assignee: Kalle Korhonen
> Attachments: extendingGenerics.patch
>
>
> The method invokeAny in SubjectAwareExecutorService has wrong type.
> SubjectAwareExecutorService implements ExecutorService interface.
> ExecutorService:
> <T> T invokeAny(Collection<Callable<T>> tasks)
> SubjectAwareExecutorService:
> public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws
> InterruptedException, ExecutionException {
> Reason: It is not possible to override Collection<Callable<T>> tasks with
> Collection<? extends Callable<T>> tasks. Such override would not be typesafe.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira