나는 새로운 db 연결을 생성하는 커스텀 인터셉터를 사용하고 있으며 액션을 실행하기 전에 현재 액션에이 연결을 설정한다. 그런 다음 인터셉터가 연결을 닫습니다.Struts 2의 ActionContext가 현재 요청에 고유합니까?
내가 다른 클래스와이 DB 연결을 공유 할 수있는 편리한 방법을 찾고 있어요/작용으로 사용된다 (예 : 모델 등) 정적 메서드. 예를 들어 User.get(id)
또는 User.getEmail(id)
과 같은 정적 메서드를 각 메서드에 별도로 db 연결을 전달하지 않고 호출 할 수 있습니다.
ServletActionContext.getActionContext().put("db", db);
및 다음 I과 같은 정적 법에서이 DB 연결에 액세스 할 수있다 :
I는 수행하여 인터셉터에서 ActionContext
상 DB 연결을 설정할 수
public class User implements Model
{
public static String getEmail(int id)
{
Connection db =
(Connection) ServletActionContext.getActionContext().get("db");
//...
}
}
내 질문은 새로운 ActionContext
모든 주어진 요청을 생성 할 것이다, 그래서 새로운 DB 연결마다 사용되는 것을 확신 할 수 있습니까? 내가 500 사람들이 mysite.com/fooAction
를 방문했다면, 나는 그 (500 개) 요청의 각 고유 ActionContext에 생성되며, User.getEmail()
를 호출 할 때마다 지정된 요청에 고유 한 경우에만 DB 연결에 액세스 것이라고 확신 할 수 예컨대?
감사합니다.
질문 있습니다 ..의 경우 beginnin g는 내 클래스의, 나는 다음 줄을했다 :'private static Connection db = (Connection) ServletActionContext.getActionContext(). get ("db");'이것은 스레드 로컬에서도 실행될 것인가 아니면 더 나은가? 각각의 메소드 내에서 db를 개별적으로 얻으시겠습니까? –
스레드 로컬이 아닌 @ClickUpvote. 또한 클래스 로더가 클래스를로드하자마자 static이 호출되기 때문에 NullPointerException이 발생합니다. Struts 2는 초기화되지 않았으며 요청도 없습니다. 따라서 메서드 내부에서 호출해야합니다. –
고마워요. 정말로 도움을 주셔서 감사합니다. 이것은 당신이 오랫동안 곤란을 겪을 수있는 문제 중 하나이거나 해결책이 없다고 생각하는 것입니다. –