如何在 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);
我需要在 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);