2013-09-08 7 views
2

J2EE/JCR 응용 프로그램에서 생성 된 스레드에서 JNDI 조회가 실패 함 Red Hat Enterprise Server 5.8 (2.6.18-308.e15)에서 8.0.0.4가 실행되었습니다.Red Hat Enterprise Server 5.8 (2.6.18-308.e15)에서 실행중인 WAS 8.0.0.4의 J2EE/JCR 응용 프로그램에서 생성 된 스레드에서 JNDI 조회가 실패 함

Web Appl에서 Jackrabbit Repository (jcr의 구현)를 백엔드로 사용하고 있습니다. 데이터가 Oracle Database에 존속합니다. Oracle 데이터베이스 jackrabbit과 연결하려면 WAS에 정의 된 데이터 소스 (App Server로 WAS 8.0.0.4 사용)를 읽는 JNDI Lookup을 제공하십시오. 내 응용 프로그램에서 모든 곳에서 JNDI 조회를 수행 할 수 있어요,하지만 예외 다음 JNDI 봐 위해 노력하고 때 자바 동시 API와 스레드의 호출 내에서() 메소드를 사용하여 스레드를 생성하고 흐름에서 발생 -

[8/20/13 10 : 57 : 35 : 163 IST] 000000dd 시스템 출력 O 오류 20-08 10 : 57 : 35,163 (DatabaseFileSystem.java:init:209) 파일 시스템 초기화에 실패했습니다 javax.jcr.RepositoryException : JNDI 이름을 찾을 수 없습니다 : java : comp/env/jdbc/ofsds at org.apache.jackrabbit.core.util.db.ConnectionFactory.getJndiDataSource (ConnectionFactory.java:295) at org.apache.jackrabbit.core.util.db .ConnectionFactory.createDataSource (ConnectionFactory.java:233) at org.apache.jackrabb org.apache.jackrabbit.core.fs.db.DbFileSystem.getDataSource (DbFileSystem.java:226) 에서 it.core.util.db.ConnectionFactory.getDataSource (ConnectionFactory.java:166) at org.apache.jackrabbit. core.fs.db.DatabaseFileSystem.init (DatabaseFileSystem.java:190) at org.apache.jackrabbit.core.config.RepositoryConfigurationParser $ 6.getFileSystem (RepositoryConfigurationParser.java:1057) at org.apache.jackrabbit.core.config .RepositoryConfig.getFileSystem (RepositoryConfig.java:911) at org.apache.jackrabbit.core.RepositoryImpl. (RepositoryImpl.java:285) at org.apache.jackrabbit.core.RepositoryImpl.create (RepositoryImpl.java:605) at org.apache.jackrabbit.core.TransientRepository $ 2.getRepository (TransientRepository.java:232) org.apache.jackrabbit.core.TransientRepository.startRepository (TransientRepository.java:280) at org.apache.jackrabbit.core.TransientRepository.login (TransientRepository.java:376) at com.mmpnc.icm.server.repository .RepositoryStartupService.newSession (RepositoryStartupService.java:408) com.mmpnc.icm.server.repository.RepositoryStartupService.newSession (RepositoryStartupService.java:355)에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법)에서 일에서 . reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:60) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:37)에서 java.lang.reflect.Method.invoke (Method.java:611)에서 조직에서 . jboss.seam.util.Reflecti ons.invoke (Reflections.java:22) at org.jboss.seam.intercept.RootInvocationContext.proceed (RootInvocationContext.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke (RollbackInterceptor.java:28) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:68) at org.jboss.seam.core. MethodContextInterceptor.aroundInvoke (MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke (RootInterceptor.java:107) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInv ocation (JavaBeanInterceptor.java:166) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke (JavaBeanInterceptor.java : 102) at com.mmpnc.icm.server.repository.RepositoryStartupService _ $$ _ javassist_1.newSession (RepositoryStartupService _ $$ _ javassist_1.java) at com.mmpnc.icm.server.repository.ICMHouseKeepingSessionManager.create (ICMHouseKeepingSessionManager.java : 37)에서 sun.reflect.DelegatingMethodAccessorImpl.invoke sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:60) 에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (원시 메소드) (DelegatingMethodAccessorImpl.java:37) 에서 자바에서 .lang.reflect.Method.invoke (Method.java:611) at org.jboss.seam.util.Reflections.invoke (Reflections.java:22) at org.jboss.seam.intercept.RootInvocationContext.proceed (RootInvocationContext .java : 31) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke (RollbackInterceptor.java:28) at org.jboss.seam.intercept. org.jboss.seam.intercept.SeamInvocationContext.proceed에서 org.jboss.seam.core.BijectionInterceptor.aroundInvoke (BijectionInterceptor.java:77) 에서 SeamInvocationContext.proceed (SeamInvocationContext.java:68) (SeamInvocationContext.java:68) org.jboss.seam.intercept.SeamInvocationContext.proceed에서 org.jboss.seam.core.MethodContextInterceptor.aroundInvoke (MethodContextInterceptor.java:44) (SeamInvocationContext.java:68) org.jboss.seam.intercept에서 에서 . RootInterceptor.invoke (RootInterceptor.java:107)(JavaBeanInterceptor.java:166) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke (JavaBeanInterceptor.java:102) at com.mmpnc.icm.server. sun.reflect에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:60) 에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) 에서 repository.ICMHouseKeepingSessionManager _ $$ _ javassist_8.create (ICMHouseKeepingSessionManager _ $$ _ javassist_8.java) .DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke (Method.java:611) at org.jboss.seam.util.Reflections.invoke (Reflections.java:22) org.jboss.seam.util.Reflections에서 .invokeAndWrap (Reflections.java:138) at org.jboss.seam.Component.callComponentMethod (Component.java:2171) at org.jboss.seam.Component.callCreateMethod (Component.java:2094) at org.jboss org.jboss.seam.Component.getInstance (Component.java:1910)에서 org.jboss.seam.Component.getInstance (Component.java:1948) 에서 .seam.Component.newInstance (Component.java:2054) org.jboss.seam.Component.getInstance (Component.java:1904) at org.jboss.seam.Component.getInstanceInAllNamespaces (Component.java:2271) at org.jboss.seam.Component.getValueToInject (Component.java) : 2223) at org.jboss.seam.Component.injectAttributes (Component.java:1663) at org.jboss.sea org.jboss.seam.core.BijectionInterceptor.aroundInvoke (BijectionInterceptor.java:61) 에서 m.Component.inject (Component.java:1481) org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java : 68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke (MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:68) at org.jboss.seam. intercept.RootInterceptor.invoke org.jboss.seam.intercept.JavaBeanInterceptor.invoke (JavaBeanInterceptor.java에서 org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation (JavaBeanInterceptor.java:166)에서 (RootInterceptor.java:107) : 102) 에서 com.mmpnc.icm.server.repository.sun.reflect.DelegatingMethodAccessorImpl에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:60)에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) 에서 ICMHouseKeepingRepository _ $$ _ javassist_7.create (ICMHouseKeepingRepository _ $$ _ javassist_7.java) .invoke (DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke (Method.java:611) at org.jboss.seam.util.Reflections.invoke (Reflections.java:22) at 조직 .jboss.seam.util.Reflections.invokeAndWrap (Reflections.java:138) at org.jboss.seam.Component.callComponentMethod (Component.java:2171) at org.jboss.seam.Component.callCreateMethod (Component.java) : 2094) at org.jboss.seam.Component .newInstance (Component.java:2054) at org.jboss.seam.Component.getInstance (Component.java:1948) at org.jboss.seam.Component.getInstance (Component.java:1910) at org.jboss .seam.Component.getInstance (Component.java:1904) at org.jboss.seam.Component.getInstanceInAllNamespaces (Component.java:2271) at org.jboss.seam.Component.getValueToInject (Component.java:2223) org.jboss.seam.core.BijectionInterceptor.aroundInvoke에서 org.jboss.seam.Component.inject (Component.java:1481) 에서 org.jboss.seam.Component.injectAttributes (Component.java:1663) (BijectionInterceptor에서 .java : 61) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke (MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed (SeamInvocationContext.java:68) at org.jboss.seam.intercept. org.jboss.seam.intercept.JavaBeanInterceptor.invoke에서 RootInterceptor.invoke org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation (JavaBeanInterceptor.java:166)에서 (RootInterceptor.java:107) (JavaBeanInterceptor.java:102) com.mmpnc.icm.server.repository.ICMHouseKeepingManager에서 _ $$ _ javassist_6.create (ICMHouseKeepingManager _ $$ _ javassist_6.java) sun.reflect.NativeMethodAccessorImpl.invoke에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) (NativeMethodAccessorImpl에서 .java : 60) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke (Method.java:611) at org.jboss.seam.util.Reflections.invoke (Reflections. 자바 : org.jboss.seam에서 org.jboss.seam.Component.callComponentMethod (Component.java:2171) 에서 org.jboss.seam.util.Reflections.invokeAndWrap (Reflections.java:138) 22) . Component.callCreateMethod (Component.java:2094) at org.jboss.seam.Component.newInstance (Component.java:2054) at org.jboss.seam.Component.getInstance (Component.java:1948) at org. jboss.seam.Component.getInstance (Component.java:1910) at org.jboss.seam.Component.getInstance (Component.java:1904)com.mmpnc.icm.server.concurrent.PerformCloseTask.call에서 org.jboss.seam.Component.getInstance (Component.java:1899) (PerformCloseTask.java:136) com.mmpnc.icm.server에서 에서 16,. concurrent.PerformCloseTask.call (PerformCloseTask.java:1) at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:314) at java.util.concurrent.FutureTask.run (FutureTask.java:149) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:897) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:919) 에서 java.lang.Thread.run (Thread.java:770) 발생 원인 : javax.naming.ConfigurationException : 서버 런타임이 작업의 스레드를 J2EE 응용 프로그램 구성 요소와 연관시킬 수 없기 때문에 "java :"이름에 대한 JNDI 작업을 완료 할 수 없습니다. 이 조건은 "java :"이름을 사용하는 JNDI 클라이언트가 서버 응용 프로그램 요청의 스레드에서 실행되지 않을 때 발생할 수 있습니다. J2EE 응용 프로그램이 정적 코드 블록 내에서 또는 해당 J2EE 응용 프로그램에 의해 생성 된 스레드에서 "java :"이름에 대해 JNDI 작업을 실행하지 않는지 확인하십시오. 이러한 코드는 반드시 서버 응용 프로그램 요청의 스레드에서 실행되지 않으므로 "java :"이름에 대한 JNDI 작업에서는 지원되지 않습니다. [루트 예외는 javax.naming.NameNotFoundException입니다. comp.ibm.ws.naming.java.javaURLContextImpl.throwExceptionIfDefaultJavaNS (javaURLContextImpl.java:522)의 에서 이름 comp/env/jdbc를 찾을 수 없습니다. at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS (javaURLContextImpl.java:552) at com.ibm.ws.naming.java.javaURLContextImpl.lookupExt (javaURLContextImpl.java:481) at com.ibm.ws. org.apache.aries.jndi.DelegateContext.lookup의 에있는 naming.java.javaURLContextRoot.lookupExt (javaURLContextRoot.java:485) (com.ibm.ws.naming.java.javaURLContextRoot.lookup (javaURLContextRoot.java:370) DelegateContext.java:161) at javax.naming.InitialContext.lookup (InitialContext.java:436) org.apache.jackrabbit.core.util.db.ConnectionFactory.getJndiDataSource (ConnectionFactory.java:280) ... 114 more 에 의해 발생 : javax.naming.NameNotFoundException : 이름이 comp/env/jdbc가 컨텍스트에 없습니다. "자바:". com.ibm.ws.naming.ipbase.NameSpace.retrieveBinding에서 com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal (NameSpace.java:1969) (NameSpace.java:1376) com.ibm에서 에서 . ws.naming.ipbase.NameSpace.lookupInternal (NameSpace.java:1219) (com.ibm.ws.naming.ipbase.NameSpace.lookup (NameSpace.java:1141) , com.ibm.ws.naming.urlbase). com.ibm.ws.naming.java.javaURLContextImpl.lookupExt에서 UrlContextImpl.lookupExt (UrlContextImpl.java:1436) (javaURLContextImpl.java:477) ... 더보기 (119)

답변

4

자바가 : 광고/env 컨텍스트에가 web.xml에서 리소스를 정의한 Java EE 애플리케이션에서만 사용할 수 있습니다.

동일한 자원을 조회하려고하는 별도의 스레드를 작성하는 경우, 데이터 소스에서 스레드는 응용 프로그램의 Java EE 컨텍스트와 그 안에있는 자원 정의 외부에서 실행됩니다. 당신은 자바 EE 애플리케이션 컨텍스트에있는 동안 데이터 소스를 조회하고, 따라서에 대한 필요성을 가지고 있지, 스레드가 액세스 할 수에 대한 참조를 개최

  1. 에 의해 중 하나에 의해이 문제를 해결 할 수

    그것을 찾을 스레드.

  2. java : comp/env 컨텍스트를 사용하지 않고 데이터 소스를 찾으십시오.