2011-05-09 3 views
1

이 나는 ​​글래스 피쉬 웹 서비스의 applicationscope에 번호를 저장하기 위해 노력하고있어 글래스 피시 자바저장 변수가

WebService에 : 나는 카운터 변수를 요청할 때

@WebService() 
public class datacheck { 
    //TODO 080 disable sql_log in the settings of hibernate 
    //TODO 090 check todo's from webservice_1 

    private int counter = 5; 

내가 얻을 5 및

@WebMethod(operationName = "increaseCounter") 
public Integer increaseCounter() { 
    counter++; 
    return counter; 
} 

수익률 6하지만 난 이후에이 작업을 수행 할 때 내가 다시 5를 얻을 :

@WebMethod(operationName = "getCounter") 
public Integer getCounter() { 
    return counter; 
} 

웹 서비스의 모든 메소드에 사용할 수있는 변수를 저장하려면 어떻게해야합니까?

답변

1

이는 사용 사례와 아키텍처에 어느 정도의 영향을받습니다. 모든 사용자가 증가 카운터의 결과를 볼 수 있으면 코드에서 정적으로 선언 할 수 있습니다.

private static int counter = 5; 

이것은 응용 프로그램에 하나의 JVM 만 있지만 동기화에 대해 신중하게 고려해야하는 경우에만 작동합니다.

은 또는 당신 (데이터베이스 또는 예를 들어 파일) 외부를 지속 Singleton 패턴이 작동합니다 구현

+0

들으을 해달라고에 개체를 제약 조건하려면

ThreadLocal있다, 내가 무엇을 찾고 있었다 이잖아. 이것을 시도하고 가능한 동기화 문제를 고려할 것입니다. – Berty

1

을 할 수있다. 당신은 전체 JVM에서 같은 인스턴스로 끝날 것입니다. 그러나 서로 다른 스레드에서 싱글 톤 (singleton)을 쓰는 것은 만족스러운 잠금이 될 수 있습니다. 그런 식으로 드래곤이 될 수 있습니다! 당신은 하나 개의 스레드 (내가 글래스 피쉬는 요청 당 하나 개의 스레드라고 생각하지만, 저를 인용 :

관련 문제