2009-09-30 8 views
3

JCS를 사용하여 여러 EJB에서 공유해야하는 LDAP 검색 결과를 저장하고 있습니다. JCS를 한 번만 초기화하기 위해 싱글 톤 클래스를 만들었지 만 EJB의 클래스 로더 때문에 자체 복사본으로 여러 번 초기화되었습니다. 그래서 검색 자원은 공유되지 않습니다.어떻게 여러 EJB에서 Java Caching System (JCS) 리소스를 공유합니까?

여러 콩에서 캐시를 공유해야하는 문제를 어떻게 해결합니까? JVM에서 캐시를 찾고 있습니다. (리모콘이 아니라 memcached 등).

Glassfish는 응용 프로그램 서버로 사용됩니다.

+0

EJB 패키징과 클래스 로더 문제에 대해 좀 더 자세히 설명해 주시겠습니까? –

답변

2

아직 테스트하지 못했지만 응용 프로그램 개발 안내서의 "Circumventing Class Loader Isolation" 장에 설명 된 기술 중 하나를 사용하여 Glassfish 버전의 문제가 해결 될 수 있다고 생각합니다. 적어도 유효한 버전 2-3-4에 대한


짧은 버전 : 공통 클래스 로더를 사용하는 (정확히 일반적인 클래스 로더가하는 다른 클래스 로더의 관계가 같은 매뉴얼에 설명되어 무엇을). lib 디렉토리/도메인 디렉토리

  • 또는 설치하는-에 항아리를 복사/lib에
  • 또는 실행 asadmin add-library --type common /path/to/your.jar (의지 만 작업에

    • 사본 항아리 :이 작업을 수행하는 방법에는 여러 가지가 있습니다 버전 4 iirc에서)

    "여기에는 클래스 로더 격리를 파기"(해당 검색 용어 만 사용)와 관련된 몇 가지 질문이 있으므로 예제와 자세한 설명이 필요합니다.

  • 1

    간단히 말해서, 싱글 톤은 캐싱 구현 클래스가 살아있는 곳에서 "살"가능성이 높습니다. 이는 클래스를 "소유"하는 계층 구조의 클래스 로더이기 때문입니다.

    그래서 각각의 EJB가 각각의 캐시 lib jar 복사본과 함께 별도로 배포되면 각 EJB는 각각 자신의 복사본을 갖게됩니다.

    bean이 복합 EAR에 배치되고 lib jar의 단일 인스턴스를 공유하면 해당 캐시는 EAR의 bean간에 공유됩니다.

    lib를 배포에서 완전히 제거하고 컨테이너 (예 : $ DOMAIN/lib/ext) 외부에두면 해당 캐시가 도메인의 모든 항목 (EJB, EAR, WAR 등)에 공유됩니다.).

    +0

    답변 해 주셔서 감사합니다. JCS 캐시는 여러 EJB 및 바인딩 구성 요소 (OpenESB)에서 공유되는 공통 라이브러리의 일부이지만 $ DOMAIN/lib가 문제를 해결해야한다고 생각합니다. – rjoshi