我們當(dāng)前的遺留 Web 應(yīng)用程序在其中創(chuàng)建不受應(yīng)用程序服務(wù)器容器管理的線程。我必須用多線程的 JavaEE 標(biāo)準(zhǔn)修改它。我的網(wǎng)絡(luò)應(yīng)用程序在 Tomcat 上運(yùn)行良好,但在 Websphere 上運(yùn)行失敗。Websphere 上的錯(cuò)誤:... ... Caused by: javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot be completed because the server runtime is not able to associate the operation's thread with any J2EE application component. This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request. Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE 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:" names. at com.ibm.ws.naming.java.javaURLContextImpl.throwExceptionIfDefaultJavaNS(javaURLContextImpl.java:534) ~[com.ibm.ws.runtime.jar:?] at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:564) ~[com.ibm.ws.runtime.jar:?] at com.ibm.ws.naming.java.javaURLContextImpl.lookupExt(javaURLContextImpl.java:485) ~[com.ibm.ws.runtime.jar:?] at com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) ~[com.ibm.ws.runtime.jar:?]為了解決這個(gè)問(wèn)題,我指的是Concurrency Utilities in Java EE。我為ManagedExecutorService和ManagedThreadFactory找到了類(lèi)似的描述和示例。ManagedExecutorService:應(yīng)用程序使用托管執(zhí)行器服務(wù)來(lái)異步執(zhí)行提交的任務(wù)。任務(wù)在容器啟動(dòng)和管理的線程上執(zhí)行。容器的上下文被傳播到執(zhí)行任務(wù)的線程。ManagedThreadFactory:應(yīng)用程序使用托管線程工廠來(lái)創(chuàng)建托管線程。線程由容器啟動(dòng)和管理。容器的上下文被傳播到執(zhí)行任務(wù)的線程。此對(duì)象還可用于為特定用例(使用自定義線程)提供自定義工廠,例如,為這些對(duì)象設(shè)置特定/專(zhuān)有屬性。在哪種情況下首選哪一種?為什么?
1 回答
MMTTMM
TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
我已經(jīng)通過(guò)使用 ManagedExecutorService 解決了問(wèn)題。
ExecutorService框架確實(shí)有更多處理線程的方法,而ManagedThreadFactory只能調(diào)用newThread()方法。
Websphere 問(wèn)題可以通過(guò)使用 ManagedExecutorService 或 ManagedThreadFactory 來(lái)解決。兩者都有效。但是對(duì)于進(jìn)一步的線程處理,ManagedExecutorService 結(jié)果要好得多。
現(xiàn)在,此解決方案導(dǎo)致相同的 Web 應(yīng)用程序在 Tomcat 上失敗。JNDI 命名異常。根據(jù)我的研發(fā),基于容器的并發(fā)在 TomEE 服務(wù)器中受支持,而不是在 Tomcat 中,因此我們必須使用路由機(jī)制根據(jù)底層應(yīng)用程序服務(wù)器在代碼之間切換。
添加回答
舉報(bào)
0/150
提交
取消
