java - 在 IBM Liberty Profile 中使用 Executor Service 进行多线程处理

标签 java executorservice websphere-liberty cics

我正在使用 ExecutorService 进行一些测试,以在 Liberty 中执行多线程。从我的测试看来,启动可以使用 JCICS API 的线程(例如创建一个新的 TSQ)的唯一方法似乎是使用静态方法

CICSExecutorService.runAsCics(task1)

如果我以另一种方式启动线程,例如:

// in this way, the OSGi should create an instance of CICSExecutorService automatically
ExecutorService cicsExecutor = Executors.newFixedThreadPool(1); 
cicsExecutor .submit(task1);

线程无法使用 JCICS API;特别是我得到这个错误:

java.util.concurrent.ExecutionException: com.ibm.cics.server.CicsRuntimeException: DTCTSQ_READITEM: 
                                            No JCICS context is associated with the current thread. 

这样对吗?谢谢。

最佳答案

没错,将您的可运行/可调用(task1)提交给您自己新创建的执行器将不会在支持 CICS 的线程(也不是 Liberty 管理的线程)上运行。

如果您使用的是 CICS TS v5.3 或更高版本,则有许多方法可用,您可以使用 CICSExecutorService.runAsCICS(),它经过优化以使用 Liberty 的托管执行器。您可以直接从 OSGi 服务中查找 Liberty 的受管执行器,或者您可以 @Inject 一个执行器的实例并将 Liberty concurrent-1.0 特性添加到您的 server.xml(有关详细信息,请参见后面的回答)。

如果您使用的是 v5.3 之前的版本,则 CICSExecutorService.runAsCICS() 方法可用,但它不会与 Liberty 的托管执行器集成,因此您将仅限于 JCICS 操作和 Java EE (Liberty)函数在该可运行/可调用任务中将不可用。

关于java - 在 IBM Liberty Profile 中使用 Executor Service 进行多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64120516/

相关文章:

xml - IBM WebSphere Liberty 数据源是否可以从 server.xml 拆分到包含文件中?

java - 有人可以解释这种 shiftwise/Long 修补输出吗?

java - int 数组到 BufferedImage

java - Executors 类中的 newSingleThreadExecutor() 方法

java - 关于Java ExecutorService newFixedThreadPool的几个问题

java - 在动态线程号中调用 ExecutorService.shutdown

ibm-mobilefirst - 移动第一 : WAS Liberty disable LTPA tokens auto-generation

java - 了解在 Web 容器中启动 Spring 批处理作业

java - 什么是NullPointerException,我该如何解决?

java-8 - Websphere Liberty 中的 java8 时间反序列化