본문 바로가기
IBM - old/WAS 문제&해결

WAS 위에서 별도로 thread 를 생성하여 JNDI operation 시 NMSV0310E exception

by freeman98 2016. 5. 9.

1. WAS 버전 : WebSphere ND All

2. OS : All

3. Error 발생 시점 :  WAS 위에서 별도로 thread 를 생성하여 JNDI operation 이나 user transaction 처리시 NMSV0310E exception

4. Error message :
[10. 12. 22   13:49:00:024 GMT+09:00] 00000026 javaURLContex E   NMSV0310E: 서버 런타임에서 모든 J2EE 응용프로그램 컴포넌트와 조작 스레드가 연관될 수 없으므로 "Java:" 이름에 따른 JNDI 조작을 완료할 수 없습니다. "Java:" 이름을 사용한 JNDI 클라이언트가 서버 응용프로그램 요청의 스레드에서 실행되지 않는 경우 이 조건이 발생할 수 있습니다. J2EE 응용프로그램이 static 코드 블록이나 해당 J2EE 응용프로그램으로 작성된 스레드에서 "Java:" 이름에 따른 JNDI 조작이 실행되지 않는지 확인하십시오. 서버 응용프로그램 요청의 스레드에서 실행되지 않으므로 "Java:" 이름에 따른 JNDI 조작에서 이러한 코드가 지원되지 않습니다. 예외 스택 추적:
javax.naming.ConfigurationException [Root exception is javax.naming.NameNotFoundException: Name "comp/UserTransaction" not found in context "java:".]
           at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:411)
           at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:388)
           at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:204)
           at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:144)
           at javax.naming.InitialContext.lookup(InitialContext.java:363)
           at com.ds.eps.core.DSEpsEventHandler.execute(DSEpsEventHandler.java:48)
           at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
           at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Caused by: javax.naming.NameNotFoundException: Name "comp/UserTransaction" not found in context "java:".
           at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1095)
           at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:991)
           at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1263)
           at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:384)
           ... 6 more

5. 예상 이유 :
 WAS 에서 제공하고 시작된 Thread 가 아닌 별도로 Thread 를 만들경우 JNDI operation 이나 user transaction 처리를 할 수 없음

6. 조치 방안 :
 다른 방안을 모색 필요 (예: Asynchronous beans 등을 활용)

제한에 대해서 명시된 Sun 의 공식 문서
http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions6.html

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.messages.doc/com.ibm.ws.naming.util.WsnMessages.html?resultof=%22%4e%4d%53%56%30%33%31%30%45%22%20%22%6e%6d%73%76%30%33%31%30%65%22%20
NMSV0310E:
 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. Exception stack trace:

{0}
    Explanation    A JNDI operation on a "java:" name must be performed on the thread of a server application request
    Action    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.

댓글