2011-08-08 2 views
0

보스 7 DnsContextFactory를 인스턴스화하기 위해, 다음과 같은 예외가 발생합니다실패가

Hashtable env = new Hashtable(); 
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); 
env.put("java.naming.authoritative", "false"); 
env.put("com.sun.jndi.dns.recursion", "true"); 
env.put("com.sun.jndi.dns.timeout.initial", timeoutProp); 
env.put("com.sun.jndi.dns.timeout.retries", "1"); 
env.put("java.naming.provider.url", providerProp); 
DirContext ctx = new InitialDirContext(env); 
: 여기
 
Caused by: javax.naming.NamingException: Failed instantiate InitialContextFactory com.sun.jndi.dns.DnsContextFactory from classloader ModuleClassLoader for Module "deployment.test-case.ear.test-web.war:main" from Service Module Loader 
     at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:58) 
     at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:664) [:1.6.0_26] 
     at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) [:1.6.0_26] 
     at javax.naming.InitialContext.init(InitialContext.java:223) [:1.6.0_26] 
     at javax.naming.InitialContext.(InitialContext.java:197) [:1.6.0_26] 
     at javax.naming.directory.InitialDirContext.(InitialDirContext.java:82) [:1.6.0_26] 
     at com.test.messaging.internal.resource.dns.DnsClientImpl.querySrv(DnsClientImpl.java:328) [dns-lookup-jar.jar:] 
     ... 

16:36:36,000 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Error listenerStart 
16:36:36,013 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Context [/test] startup failed due to previous errors 
16:36:36,023 INFO [org.jboss.web] (MSC service thread 1-5) registering web context: /test 

은 관련 코드입니다

코드는 ServletContextListener에서 호출되므로 예외로 인해 모듈이 시작되지 않습니다. 또한 리스너를 제거하고 동일한 결과 (javax.naming.NamingException: Failed instantiate InitialContextFactory com.sun.jndi.dns.DnsContextFactory)를 생성하는 서블릿 내에서 코드를 호출하려고 시도했습니다.

나는 실행중인 문제와 매우 유사하지만 스레드가 언급 한 것처럼 "jboss.modules.system.pkgs"속성을 "com.sun.jndi.dns"으로 설정하면 효과가 없습니다.

코드는 보스 6 WebSphere Application Server에 7 및 제로니모 2.2.1 (톰캣 6)에 제대로 작동하지만, 전술 한 바와 같이 보스 (7)에 실패한다. JBoss AS 7.0.0을 실행 중입니다. 최종 버전이며 1.6.0_26 JRE를 사용하여 독립 실행 형 서버를 사용하여 테스트합니다. 이 문제를 해결하는 방법에 대한 제안은 크게 감사하겠습니다.

은 JBoss 개발 커뮤니티 포럼에서 나는 또한 posted this question

하지만 어떤 응답을받지 못했습니다.


[업데이트]를이 문제가 가능성이 보스 7의 새로운 절연, 모듈 형 클래스 로딩 정책과 관련된 것 같다. 나는이 문제에 대한 두 가지 해결 방법/솔루션을 찾았지만, 나는 우리가 우리의 응용 프로그램이나 JBoss의 설치를 수동으로 수정을 방지 할 수있는 방법이 특히 경우, 가장 적절한, 권장되는 방법에 대한 제안에 여전히 관심이 있어요.

MANIFEST.MF는

  • $JBOSS_HOME/modules/com/sun/jndi/dns$JBOSS_HOME/modules/com/sun/jndi/ldap을 복사하는 com.sun.jndi.dns 모듈을 만들고 "LDAP"의 발생을 수정 "DNS"

  • 웹 모듈의에 다음 항목을 추가하려면 MANIFEST.MF : Dependencies: com.sun.jndi.dns

이 비록

이제 DnsContextFactory이 제대로이이 모든 JBoss의 설치뿐만 아니라 DnsContextFactory을 사용하는 모든 응용 프로그램의 수정을 필요로하기 때문에 영구적 인 해결책이 될 것 같지 않습니다 인스턴스화 할 수 있습니다.

보스 배포 구조.다음과 같이 XML

  • 는 EAR의 META-INF 디렉토리에 jboss-deployment-structure.xml 파일을 추가합니다 :

    <sub-deployment name="test-web.war"> 
        <dependencies> 
         <module name="deployment.com.sun.jndi.dns" /> 
        </dependencies> 
    </sub-deployment> 
    
    <module name="deployment.com.sun.jndi.dns"> 
        <dependencies> 
         <module name="system" export="false"> 
          <exports> 
           <include-set> 
            <path name="com/sun/jndi/dns"/> 
           </include-set> 
          </exports> 
         </module> 
        </dependencies> 
    </module> 
    

이 이전 "MANIFEST보다 약간 낫다. MF "방식을 사용합니다. e 응용 프로그램 및 JBoss 모듈이 아니라 DnsContextFactory를 사용하는 모든 응용 프로그램이이 구성을 포함해야한다는 것은 불행한 일입니다.

우리의 응용 프로그램에 JBoss 관련 구성을 더 많이 포함시키지 않는 방법이 있다면 특히 가장 적합한 권장 방법에 대한 제안을 찾고 있습니다.

답변

0

JBoss forum의 도움으로 위의 해결 방법이 효과가있을 수 있지만 가장 적절한 해결 방법은 JBoss의 기능 요청이 필요하다는 것입니다. 이 feature request을 기록했지만 다른 임시 해결 방법은 모듈 설명 자 ($JBOSS_HOME/modules/sun/jdk/main/module.xml)에 "com/sun/jndi/dns" 경로를 추가하는 것입니다.

+0

후속 조치를 위해이 [기능 요청] (https://issues.jboss.org/browse/AS7-1500)이 확인되었으며 JBoss AS 7.0.1.Final에서 사용할 수 있어야합니다. – shelley

관련 문제