传播 Java EE 上下文 Websphere
Propagate Java EE context Websphere
我正在 Websphere 8.5 上开发基于 Jersey 的 JAX-RS2 应用程序 运行。我正在使用异步功能来生成一个新线程。问题是新线程没有获得 jndi 查找所需的 Java EE 上下文。我得到的错误是:
A JNDI operation on a java:comp/env name cannot be completed because
the current thread is not associated with a Java Enterprise Edition
application component. This condition can occur when the JNDI client
using the java:comp/env name does not occur on the thread of a server
application request. Make sure that a Java EE application does not run
JNDI operations on java:comp/env names within static code blocks or in
threads created by that application. Such code does not necessarily
run on the thread of a server application request and therefore is not
supported by JNDI operations on java:comp/env names.
JavaEE 7 中有一个功能可以在 websphere 中配置 ManagedExecutorService。我无法使用它,因为 Websphere 8.5 仅支持 Java EE 6。我无法提前进行查找,因为其中包含需要 Java EE 上下文才能工作的第三方 jar。
我想将 Java EE 上下文传播到新生成的线程。如果可行,请提出建议。
通过在 WebSphere Application Server 中创建工作管理器,可以将任务提交到具有 J2EE 上下文的新线程。对于 WAS 8 及更高版本,完整配置文件中可用的 WorkManager 现在也是一个 ExecutorService。这样做的步骤是:
- 在 WAS 管理控制台上转到资源 --> 异步 Bean--> 工作管理器并使用 jndi 名称创建一个新的工作管理器 wm/myWM。
在 java 代码中为工作管理器执行 jndi 查找。
ExecutorService execService = (ExecutorService) initialContext.lookup("wm/myWM");
将任务提交给Executor Service。
execService.submit(新的 AsyncJob(输入数据,asyncResponse));
在 Websphere Liberty 配置文件中,这可以配置为 managedExecutorService。在server.xml
中需要添加以下内容
<feature>concurrent-1.0</feature>
<managedExecutorService jndiName="wm/myWM">
<contextService>
<jeeMetadataContext/>
<classloaderContext/>
<securityContext/>
</contextService>
</managedExecutorService>
更多详细信息在此处的 pdf 中 link:ManagedService WAS 8.5
我正在 Websphere 8.5 上开发基于 Jersey 的 JAX-RS2 应用程序 运行。我正在使用异步功能来生成一个新线程。问题是新线程没有获得 jndi 查找所需的 Java EE 上下文。我得到的错误是:
A JNDI operation on a java:comp/env name cannot be completed because the current thread is not associated with a Java Enterprise Edition application component. This condition can occur when the JNDI client using the java:comp/env name does not occur on the thread of a server application request. Make sure that a Java EE application does not run JNDI operations on java:comp/env names within static code blocks or in threads created by that application. Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on java:comp/env names.
JavaEE 7 中有一个功能可以在 websphere 中配置 ManagedExecutorService。我无法使用它,因为 Websphere 8.5 仅支持 Java EE 6。我无法提前进行查找,因为其中包含需要 Java EE 上下文才能工作的第三方 jar。
我想将 Java EE 上下文传播到新生成的线程。如果可行,请提出建议。
通过在 WebSphere Application Server 中创建工作管理器,可以将任务提交到具有 J2EE 上下文的新线程。对于 WAS 8 及更高版本,完整配置文件中可用的 WorkManager 现在也是一个 ExecutorService。这样做的步骤是:
- 在 WAS 管理控制台上转到资源 --> 异步 Bean--> 工作管理器并使用 jndi 名称创建一个新的工作管理器 wm/myWM。
在 java 代码中为工作管理器执行 jndi 查找。
ExecutorService execService = (ExecutorService) initialContext.lookup("wm/myWM");
将任务提交给Executor Service。
execService.submit(新的 AsyncJob(输入数据,asyncResponse));
在 Websphere Liberty 配置文件中,这可以配置为 managedExecutorService。在server.xml
中需要添加以下内容 <feature>concurrent-1.0</feature>
<managedExecutorService jndiName="wm/myWM">
<contextService>
<jeeMetadataContext/>
<classloaderContext/>
<securityContext/>
</contextService>
</managedExecutorService>
更多详细信息在此处的 pdf 中 link:ManagedService WAS 8.5