2011-07-29 2 views
3

두 개 이상의 클래스 로더 및 VM의 경우 싱글 톤을 안전하게 코딩하는 방법. 이 문제는에서 설명하는 것을 볼 수 있습니다 : http://java.sun.com/developer/technicalArticles/Programming/singletons/여러 클래스 로더 및 VM 사례의 싱글 톤

솔루션?

+0

특히 어떤 문제를 언급하고 있습니까? 클래스 로더 그룹당 싱글 톤 또는 JVM 당 싱글 톤 또는 JVM 클러스터 당 싱글 톤? –

+0

다중 VM의 의미는 inter-vm 통신이 필요하다는 것입니다. 용들이있어! –

+0

최상의 해결책 : [변경 가능] 싱글 톤을 피하십시오. 항상. –

답변

3

ClassLoader간에 싱글 톤을 공유하려면 공통 부모가 싱글 톤을로드해야합니다. 그렇지 않으면 각 ClassLoader가 클래스 로더가 사용할 클래스 Singleton을 명시 적으로 정의하게 할 수 있습니다.

+0

공유 할 수있는 코드 예는 무엇입니까? – Ved

+0

흠. 이것이 도움이 될지 확실하지 않지만 클래스 로더를로드하고 언로드하는 예제가 있습니다. http://banillajava.blogspot.com/2011/07/java-secret-loading-and-unloading.html 싱글 톤을 공유하려면 클래스를 부모 클래스 로더에 액세스 가능하게 만들어로드해야합니다. loadClass 메소드를 오버라이드 (override)하면, 클래스 로더 단위로 선택되고 싶을 수가 있습니다. –

2

이 기사에서는 분산 응용 프로그램이 싱글 톤에서 벗어나야한다고 명시합니다. 여기에서 해결하려고하는 특정 문제가 있습니까? 또한 응용 프로그램 실행 중에 수정되지 않는 진정한 상수를 보유하는 싱글 톤의 경우 "싱글 톤"의 여러 "인스턴스"에 문제가 없어야합니다. 다른 경우에는 필요로하는 클래스에서 구성을 주입하는 것이 좋습니다 (일을 수행하는 종속성 주입 방법).

+0

예, 귀하의 의견에 동의합니다. 나는 특정한 문제를 해결하려고 노력하지 않고 있지만 이것은 오히려 이론적 인 질문이었습니다. – Ved

0

1) 네트워크 소켓은 여러 VM

Port busy 8765 java.net.BindException: Address already in use 

2) 그래서 (

WARNING: Creating a new instance of CacheManager using the diskStorePath 

안전하게 이러한 자원을 기반으로 두 개 이상의 클래스 로더 및 가상 머신의 경우 싱글 톤을 코딩 당신이 만약 정말로를 제출하지 살아난다

1

주의 : 컴퓨터에 여러 개의 인터페이스 (IP)가있는 경우 동일한 소켓 (8765)을 모두에 바인딩 할 수 있습니다 (따라서이 인터페이스는 그 자체가 아닙니다. 어쩔 수 없음). 파일을 숨길 수있는 경우도 있습니다. (예 : 마운트 오버)