2010-04-24 2 views
1

jboss에 적절한 클래스 로더 격리 설정을 사용하여 두 개의 귀를 배치했습니다. 데이터베이스에 대한 쿼리를 수행하는 Seam Bean 호출 스프링 빈이 잘 작동하지만 스프링 쿼츠 작업 빈이 호출되고 실행될 때 데이터베이스 쿼리를 실행하려고하면 스프링이 다른 ear의 최대 절전 모드 jar를 사용하고 예외가 throw되므로 문제가 발생합니다. ! 그것은 분명 봄철 클래스 로더 격리 문제입니다. 누구든지 그런 문제를 만났습니까? 격리를 보장하는 방법?jboss의 스프링 클래스 로더 격리 문제

답변

0

SEAM이 사용하고있는 Hibernate JAR은 JBOSS 클래스 로더에서 가져올 것입니다. JBOSS 클래스 로더는 EAR 클래스 로더보다 먼저 호출됩니다. SEAM이 JBOSS에 번들로 포함되어 있기 때문에 이러한 현상이 발생합니다.

EAR의 Spring은 다른 버전의 Hibernate JAR 또는 그 의존성을 사용하므로 충돌이 발생한다.

JBOSS에서 Hibernate JAR을 제거해야 응용 프로그램 서버 클래스 로더에서 더 이상 볼 수 없지만 SEAM이 손상 될 수 있습니다.

JBOSS가 응용 프로그램 서버에 EAR 구성의 서버 JAR에 대한 응용 프로그램 수준 JAR을 선호하도록 지시 할 수있는 방법이 있는지 확인할 수 있습니다.

0

JBoss 4.x를 사용하는 경우 deploy/ear-deployer.xml 파일에서 클래스 로더 격리가 활성화되어 있는지 확인하십시오.

<server> 
    <mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer"> 
     <attribute name="Isolated">true</attribute> 
     <attribute name="CallByValue">false</attribute> 
     <attribute name="EnablelibDirectoryByDefault">true</attribute> 
    </mbean> 
</server> 

이렇게하면 한 EAR의 클래스가 다른 EAR의 클래스에서 볼 수 없게됩니다. 어떤 이유로 기본값은 Isolation=false입니다.

충분할 수 있습니다.

<jboss-app> 
    <loader-repository>MyCompany:loader=MyApplication</loader-repository> 
</jboss-app> 

나는 이것이 않는다는 것을 확실하지 않다 또는 무엇을 사용하지만, 어떤 경우에는 강화 같다 : 그러나이 같은 것을 포함, 귀의 META-INF 디렉토리에 jboss-app.xml 파일을 추가 할 수 있습니다 EAR 간의 격리.