2016-09-26 3 views
0

진정한 글로벌 변수를 Java에서 유지 관리하는 방법을 찾고 있는데,이 변수는 전체 JVM 인스턴스에 유효합니다.Java의 진정한 글로벌 상태, "정적"보다 "글로벌"?

필드를 포함하는 클래스가 다른 클래스 로더에 의해 여러 번로드되는 경우 static 필드를 단순히 사용하는 경우 it will fail.

JDK 표준 클래스 (일반적으로 동일한 클래스 로더에 의해 항상로드되어야 함)를 사용하거나 전역 상태를 유지하기 위해 사용자 지정 MBean에 요청하는 등의 문제를 해결할 수있는 불쾌한 방법이 있다고 생각할 수 있습니다. 나를 해킹.

면책 조항 : 전 세계적 상태가 좋지 않다고 생각합니다. 가능할 때마다 피합니다. 약속.

+1

내게 불타는 호기심이라면 유스 케이스를 설명하십시오. – chrylis

+0

'enum'을 사용하십시오. 그러나 원하는 것은 원하는 것이 실제로는 "un o"입니다. –

+0

@BoristheSpider 열거 형 솔루션은 정적 필드 솔루션과 완전히 동일한 문제를 가지고 있습니다. – chrylis

답변

1

를 참조하십시오.

설정 방법은 앱 실행 방법에 따라 다릅니다. Tomcat에서는 CATALINA_BASE/lib 폴더의 모든 jar 파일이 공유 클래스 로더에 추가됩니다.

클래스가 올바른 클래스 로더에 의해로드되면 static 필드가 원하는대로 작동합니다.

1

JNI를 사용하는 것이 컨테이너의 기본 클래스 로더를 조작하는 것에 의존하지 않는 유일한 신뢰할 수있는 방법입니다. 공유 메모리 세그먼트 또는 다른 유사한 메커니즘을 사용하여 전역 상태를 백업하는 어댑터를 원시 코드에 작성하십시오.

2

시스템 속성은 하나의 VM에서 사용할 수 있지만 교차 프로세스에서는 사용할 수 없습니다. 하나의 VM, 한 세트의 특성. 문제가 여러 클래스 로더에 관련되어있는 경우

또한 다음 시스템 클래스 로더 또는 다른 공유 클래스 로더에 의해로드되는 전역 객체가 필요 Scope of the Java System Properties