2017-11-22 8 views
0

내 서블릿의 doGet 메소드에서 JPA TypedQuery를 사용하여 데이터를 검색하고 있습니다. HTTP 요청 메서드를 통해 원하는 데이터를 가져올 수 있습니다. 데이터를 얻는 방법은 대략 10 초 정도 걸리며 한 번의 요청을 할 때 모두 좋다. 이 문제는 동시에 여러 요청을받을 때 발생합니다. 동시에 4 번 요청을하면 4 가지 쿼리가 모두 정리되고 40 초가 지나면 모든 데이터가 다시 반환됩니다. JPA에 병렬로 4 개의 개별 쿼리를 생성하려면 어떻게해야합니까? persistence.xml에서 설정이 필요한 것이거나 코드 관련 문제입니까?
참고 : 또한 스레드에서이 코드를 실행 해 보았습니다.
링크와 내 이해를 높이기위한 적절한 용어를 이해할 수 있습니다.JPA/Entity Manager에서 일괄 처리 대신 병렬 쿼리를 수행하도록하려면 어떻게해야합니까?

감사합니다.

try{ 
    String sequenceNo = request.getParameter("sequenceNo"); 
    EntityManagrFactory emf = Persistence.createEntityManagerFactory("mydbcon"); 
    EntityManager em = emf.createEntityManager(); 
    long startTime = System.currentTimeMillis(); 
    List<Myeo> returnData = methodToGetData(em); 
    System.out.println(sequenceNo + " " + (System.currentTimeMillis() - startTime)); 
    String myJson = new Gson().toJson(returnData); 
    resp.getOutputStream().print(myJson); 
    resp.getOutputStream().flush(); 
}finally{ 
    resp.getOutputStream().close(); 
    if (em.isOpen()) 
      em.close(); 
}     

4 개 simulaneous 요청 샘플
로컬 호스트 /에게 MyServlet/mycodeblock? sequenceNo = A
로컬 호스트 /에게 MyServlet/mycodeblock? sequenceNo = B
로컬 호스트 /에게 MyServlet/mycodeblock? sequenceNo = C
로컬 호스트 /에게 MyServlet/mycodeblock? sequenceNo D =

얻어진 프린트 명령문
38002
B 38,344
C 38785
D 39065

내가 원하는 것은
9002
B 9344
C 9785
는 4 별도의 GET-요청을 할 경우 이러한 요청에 호출 할 필요가 10065

답변

0

D 평행. 그들은 서로 다른 거래에서 부름을 받았기 때문에 함께 묶어서는 안됩니다.

작성한대로 작동하지 않는 경우 dbms에 대한 호출을 직렬화하는 database-connection-pool-size 또는 servlet-thread-pool-size를 정의했는지 확인해야합니다.

+0

방향 추적을 주셔서 대단히 감사합니다. 나는 얼마 동안 다른 프로젝트로 지시 받았고 회신하는 것을 잊었다. 내 문제가 두 번째 사항에 해당한다고 확신합니다. 일단이 문제로 돌아가서 내가 겪고있는 문제를 해결하면 답변을 드릴 것입니다. – FCoffee