如何在 wildfly 中实现一个 singleThreadedScheduledExcecutor

How to implement a singleThreadedScheduledExcecutor in wildfly

我需要在 wildfly 和 SE 上 运行 的应用程序代码中需要一个单线程计划执行程序服务。 java 并发库提供了一个单一的ThreadedScheduledExecutorService。 wildfly 的问题是 managed-scheduled-executor-service 不允许 maxThreads 为 specified.I 以为我可以创建一个 class 引用 managed-scheduled-executor-service 和 managed-executor- maxThreads 为 1 的服务。然后让调度操作将作业提交给托管执行程序服务。可调用对象的泛型存在问题导致错误

 incompatible types: inference variable V has incompatible bounds
 equality constraints: J
 lower bounds: java.util.concurrent.Future<T>

发生。

我的代码如下。该模式适用于 运行nables,它不 return 任何东西,但在 callables 上失败。 "public ScheduledFuture schedule(Callable job, long delay, TimeUnit unit)" 方法是有问题的方法。有什么办法可以解决这个问题吗?

@ApplicationScoped
public class ExecutorImpl implements RITExecutor {
 private static final Logger LOG = LoggerFactory.getLogger(new Throwable().getStackTrace()[0].getClassName());

 @Resource(lookup = "java:jboss/ee/concurrency/executor/singleThreaded")
 private  ScheduledExecutorService TIMER;
 @Resource (lookup = "java:jboss/ee/concurrency/scheduler/default")
 private ExecutorService EXECUTOR;

 @Override
 public <J> ScheduledFuture<J> schedule(Callable<J> job, long delay, TimeUnit unit) {
    return TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);
 }
 @Override
 public ScheduledFuture<?> schedule(Runnable job, long delay, TimeUnit unit) {
    return TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);
 }
 @Override
 public <J> Future<J> submit(Callable<J> job) {
    return EXECUTOR.submit(job);
 }
 @Override
 public Future<?> submit(Runnable job) {
    return EXECUTOR.submit(job);
 }
 @Override
 public <J> Future<J> submit(Runnable job, J result) {
    return EXECUTOR.submit(job, result);
 }

用铸件修复了它。不知道为什么我没有早点想到这一点。

  @Override
    public <J> ScheduledFuture<J> schedule(Callable<J> job, long delay, TimeUnit unit) {
        return (ScheduledFuture<J>)TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);