현재 Servlet에 주입 된 Stateful Bean이 있습니다. 문제는 stateful 빈에서 메소드를 실행할 때 Caused by: javax.ejb.ConcurrentAccessException: SessionBean is executing another request. [session-key: 7d90c02200a81f-752fe1cd-1]
가끔 발생한다는 것입니다. 이 HTML에서 보고서가 지정된 파라미터에서 내장되어 쿼리로 구성되는 후 보고서에 지정된 데이터베이스에 대한 새 연결을 열 필요가있는 경우 위의 코드에서 서블릿으로 상태 유지 Bean의 올바른 사용
public class NewServlet extends HttpServlet {
@EJB
private ReportLocal reportBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String[] parameters = fetchParameters(request);
out.write(reportBean.constructReport(parameters));
} finally {
out.close();
}
}
}
,
constructReport
확인합니다.
스테이트 풀 빈에 스테이트 풀 빈을 사용하는 이유는 알 수없는 데이터베이스에 대한 데이터베이스 연결을 열어 쿼리를 수행해야하기 때문입니다. 상태없는 빈을 사용하면 주입 된 각 빈 인스턴스와의 데이터베이스 연결을 반복적으로 열고 닫는 것이 대단히 비효율적 인 것처럼 보입니다.
AFAIK, 응용 프로그램 서버에서 데이터 원본을 만들 때 데이터베이스가 있음을 미리 알아야합니다. 위의 연결은 사용자가 지정해야하는 데이터베이스에 연결해야합니다. – Burmudar
이것은 나에게 매우 불안전하게 보입니다. – duffymo