JBoss 7.1.0:executor.submit()如何调试(无异常,但任务未启动)

JBoss 7.1.0:executor.submit()如何调试(无异常,但任务未启动),jboss,submit,executorservice,Jboss,Submit,Executorservice,我对JBoss EAP 7.1.0 GA有一个问题。在一台服务器(我的开发人员)上,这很有效,而在另一台服务器(测试环境)上,使用executor.submit()执行的可调用文件似乎没有启动(我在日志中没有看到“this is call”消息),但没有给出异常或任何其他线索 问题是-我应该看起来像哪里/我应该如何调试这个问题 呼叫代码: @Resource(name = "DefaultManagedExecutorService") ManagedExecutorService execut

我对JBoss EAP 7.1.0 GA有一个问题。在一台服务器(我的开发人员)上,这很有效,而在另一台服务器(测试环境)上,使用executor.submit()执行的可调用文件似乎没有启动(我在日志中没有看到“this is call”消息),但没有给出异常或任何其他线索

问题是-我应该看起来像哪里/我应该如何调试这个问题

呼叫代码:

@Resource(name = "DefaultManagedExecutorService")
ManagedExecutorService executor;

try {
    DownloadPlayers dp = new DownloadPlayers();
    Future<Queue<PlayerForDownload>> f = executor.submit(dp);
    Queue<PlayerForDownload> q = f.get();
    L.info(q.size());
} catch (Exception e) {
    L.error("EXCEPTION" + e.getMessage());
}
@Resource(name=“DefaultManagedExecutorService”)
ManagedExecutorService执行器;
试一试{
DownloadPlayer dp=新的DownloadPlayer();
未来f=执行人提交(dp);
队列q=f.get();
L.info(q.size());
}捕获(例外e){
L.错误(“异常”+e.getMessage());
}
它调用的类:

public class DownloadPlayers implements Callable<Queue<PlayerForDownload>> {

    // the constructor gets called, I'm sure as it writes to log

    // the call is as simple as this
    @Override
    public Queue<PlayerForDownload> call() {
        L.info("This is call()");
        try {
            return this.getPlayersForDownload();
        } catch (WorkerException e) {
            L.error(e);
            return null;
        }       
    }
}
公共类DownloadPlayer实现可调用{
//构造函数在写入日志时会被调用
//电话就这么简单
@凌驾
公共队列调用(){
L.info(“这是call()”);
试一试{
返回这个.getPlayerForDownload();
}捕获(工作异常e){
L.错误(e);
返回null;
}       
}
}
如上所述,代码本身似乎是正常的,因为它在一台服务器上工作,但在另一台服务器上不工作。两者都是 7.1.0GA单机版。 有关于如何调试ManagedExecutorService的建议吗


谢谢。

在这种情况下,问题是在测试环境中,它只允许运行我们已经运行的两个线程(由应用程序的某个完全不同的部分运行,我没有意识到)。因此,现在通过将ManagerExecutorService中的“Core threads”参数设置为更高的值来解决问题,任务正在运行

然而,棘手的是JBoss服务器之间没有明显的差异(我比较了standalone.xml configs…),这仅仅是因为JBoss中的ManagerExecutorService有一些默认(空白)值,这些值实际上取决于系统配置(在我的例子中是v-CPU核心)。因此,尽管配置相同,“核心线程”在测试时似乎默认为2,而在我的开发中则默认为更高的值(我不知道)

因此,在比较两个环境时,切勿依赖ManagerExecutorService中的默认设置


我还重写了逻辑,而不是在循环中使用blocking Future.get()或checking for Future.isDone(),使用dofuture.get()超时,并在异常处理程序中决定是否继续等待或失败。

开发服务器和测试服务器之间的java版本是否与JBoss版本相同?另外,运行时是否使用相同的配置文件?JBoss es是相同的(7.1.0 GA)。我的开发在Windows上,测试在RHEL上。Java(JVM)都是1.8,尽管它在补丁级别上有所不同(我的开发是最新的,测试是旧的)。我将尝试使用完全相同的版本进行复制,当然我不能使用相同的操作系统。然而,这仍然不能回答问题-如何调试ManagerExecutorService-如何查看内部日志、统计信息等。。。找到我的任务所在的地方。你以同样的方式启动JBoss,例如standalone.xml、standalone-full.xml或standalone-full-ha.xml?您是否区分了xml文件,以防在过去进行了更改并且配置不同步?也许有一个模块不见了?抱歉,我看到您在上面提到了standalone,但是您的dev box是否在standalone普通模式下工作?看起来您可以在“javax.enterprise.concurrent”的配置中添加一个记录器,然后尝试跟踪、调试和信息-无论哪个选项可以提供一些跟踪输出。我还看到“并发实用程序的配置在EE子系统配置中”中至少有JBoss EAP 7的设置,所以检查它们是否相同?