2014-09-30 229 views
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

+0

你需要在['ServletContextListener'(http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener創建你的'factory' -example /),而不是在servlet中。儘管理想情況下它將由一個像Spring這樣的DI框架創建並自動注入。 – 2014-09-30 16:12:43

+0

Java EE爲這項工作提供EJB。 – BalusC 2014-09-30 16:29:09

回答

2

不要依賴Servlet初始化servlet容器的數量級上。

相反,做初始化的ServletContextListener.

+0

啊,謝謝! – Superdids 2014-09-30 17:48:00