클러스터 된 환경에서 동시 읽기가 실행되지 않도록 읽기/쓰기 잠금이있는 데이터베이스를 사용하는 것이 가장 좋습니다.
그러나 이것은 프로포절 솔루션입니다. 클러스터 된 실행이없는 작은 애플리케이션을 만들 계획이라면이 데이터를 포함하는 ServletContext 또는 Static 속성으로 충분할 것입니다. 이 데이터를 쓰거나 읽는 방법을 sychronized
으로 지정하십시오.
아주 간단한 예 :
public static class MyApplicationSharedData {
private static ArrayList<String> locations = new ArrayList();
private static synchronized void writeLocation(String location) {
locations.add(location);
}
public static void waitForLocation(String location) {
while (locations.contains(location)) {
try {
Thread.sleep(1000);// sleep for a second while the location is bussy
} catch (InterruptedException e) {
log.error(e);
}
}
writeLocation(location);
}
public static synchronized void freeLocation(String location) {
locations.remove(location);
}
}
사용 예제 :
MyApplicationSharedData.waitForLocation("Denver");
// Do stuff
MyApplicationSharedData.freeLocation("Denver");
무엇 세션? – assylias
데이터베이스의 데이터를 캐시로로드 할 수 있습니다. DB에 저장하는 것은 그렇게 나쁘지 않으며 궁극적으로 데이터는 결국 거기에서 끝납니다. 읽기 시간을 단축하려면 적절한 색인을 사용하십시오. –
목록과 일부 전역 개체를 동기화 메커니즘과 함께 사용하는 것이 좋습니다. '글로벌'은 환경에 따라 다릅니다. CDI가 사용 가능한 경우 응용 프로그램 범위 Bean이 될 수 있습니다. – Thomas