0
假設我有一個servlet的初始化方法中實例化的EntityManagerFactory的引用:初始化實例化變量
StartServlet.java:
@WebServlet("/start")
public class StartServlet extends HttpServlet {
private EntityManagerFactory factory;
@Override
public void init() {
factory = Persistence.createEntityManagerFactory("jpa");
getServletContext().setAttribute("factory", factory);
}
}
這也是我對所有其他servlet做可見內「容器」。現在,讓我們說,我想在另一個servlet訪問此引用,如:
AnotherServlet.java:
@WebServlet("/another")
public class AnotherServlet extends HttpServlet {
private EntityManagerFactory factory;
@Override
public void init() {
factory = (EntityManagerFactory) getServletContext().getAttribute("factory");
if(factory == null) {
//factory not instantiated from StartServlet, what to do?
}
}
}
我該怎麼做,如果它不是來自StartServlet.java實例化(初始化還沒有被調用的)?希望我的問題足夠精確!
-Superdids
你需要在['ServletContextListener'(http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener創建你的'factory' -example /),而不是在servlet中。儘管理想情況下它將由一個像Spring這樣的DI框架創建並自動注入。 – 2014-09-30 16:12:43
Java EE爲這項工作提供EJB。 – BalusC 2014-09-30 16:29:09