2013-09-21 3 views
3

저지 REST POST 요청을 동기화하여 한 요청이 처리중인 경우 다른 요청을 할 수 없도록하려면 어떻게해야합니까?저지 레스트 POST 요청을 동기화하는 방법

나는 방법을 시도했다 synchronized 그러나 그것은 작동하지 않았다. 대신/정지 서비스 방법을 synchronize하고 시작하려고의

+1

왜이 작업을 수행 하시겠습니까? 어떤 유스 케이스가 있습니까? –

+0

@Tichodroma 어떻게 중요합니까 ?? – Shiv

+0

질문에 대한 답변을 얻으려면 문맥을 제공하십시오. 나는 당신이 당신의 코드 스택의 정확한 위치에서 당신의 진짜 문제를 해결하려고 노력하고 있는지 의심 스럽다. 그게. –

답변

2

당신의 GraphDatabaseService의 요청에 따라 당신의 GraphDatabaseServiceServletContextListener A의를 시작하고 웹 응용 프로그램의 컨텍스트를 통해 액세스 할 흥미로운 일이 될 수 있습니다. 이는 GraphDatabaseService이 스레드로부터 안전함을 이용합니다.

아마도 이런 리스너 :

<listener> 
    <listener-class>org.example.ExampleListener</listener-class> 
</listener> 

을 다음과 같은 REST 방식에 활용 :

public class ExampleListener implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce) { 
    sce.getServletContext().setAttribute("graphDb", new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/GraphDB")); 
    } 

    public void contextDestroyed(ServletContextEvent sce) { 
    ((GraphDatabaseService)sce.getServletContext().getAttribute("graphDb")).shutdown(); 
    } 

} 

하는이처럼 web.xml 파일에서 초기화 할 수 있습니다

@POST 
public void graphOperation(@Context ServletContext context) { 
    GraphDatabaseService graphDb = (GraphDatabaseService)context.getAttribute("graphDb"); 
    // Graph operations here... 
} 

서비스 클래스 생성자에 ServletContext을 추가하고 속성을 가져올 수도 있습니다 보다 편리한 서비스 클래스의 멤버 필드가 필요합니다.

관련 문제