2014-09-30 111 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