Wymyśliłem sobie, że bedę tworzył fabryke w czasie właczenia aplikacji, a inicjalizował za każdym żądaniem użytkownika.
Czy takie rozwiązanie, jest bezpieczne dla poniższego serwletu, w przypadku gdy bedzie w jednym czasie kilkanaście żądań??
DBConfig:
package forum.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class DBConfig implements ServletContextListener {
private static EntityManagerFactory emf;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
if( emf != null && emf.isOpen()) emf.close();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
emf = Persistence.createEntityManagerFactory("Forum");
}
public EntityManagerFactory getEntityManagerFactory() {
return emf;
}
}
InicjatorDB
package forum.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import forum.dao.TematyDAO;
import forum.dao.UzytkownicyDAO;
import forum.dao.WpisyDAO;
import forum.encje.Temat;
@WebListener
public class InicjatorDB implements ServletRequestListener {
/**
* Default constructor.
*/
public InicjatorDB() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletRequestListener#requestDestroyed(ServletRequestEvent)
*/
public void requestDestroyed(ServletRequestEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletRequestListener#requestInitialized(ServletRequestEvent)
*/
public void requestInitialized(ServletRequestEvent arg0) {
DBConfig emfConfig = new DBConfig();
EntityManager em = emfConfig.getEntityManagerFactory().createEntityManager();
UzytkownicyDAO uzytkownicyDAO = new UzytkownicyDAO(em);
WpisyDAO wpisyDAO = new WpisyDAO(em);
TematyDAO tematyDAO = new TematyDAO(em);
ServletRequest req = arg0.getServletRequest();
req.setAttribute("tematyDAO", tematyDAO);
req.setAttribute("wpisyDAO", wpisyDAO);
req.setAttribute("uzytkownicyDAO", uzytkownicyDAO);
}
}
example Servlet:
package forum.servlety;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import forum.dao.TematyDAO;
import forum.encje.Temat;
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TematyDAO dao = (TematyDAO) request.getAttribute("tematyDAO");
List<Temat> listaTematow = dao.pobierzTematy();
request.setAttribute("tematy", listaTematow);
request.getRequestDispatcher("tematy.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}