Я хочу создать диспетчер сервлетов, способный выполнять некоторые операции JPA. Этот сервлет не должен иметь никаких зависимостей от Spring или EJB. Итак, я намерен внедрить EntityManagerFactory в него программно. Затем диспетчер должен обработать транзакции и при необходимости создать / открыть / закрыть EntityManager.
Итак, я сделал этот код в примере приложения, используя Spring 3 и EclipseLink:
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext context) {
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.scan(...);
appContext.refresh();
EntityManagerFactory emf = appContext.getBean(EntityManagerFactory.class);
MyDispatcher dispatcher = new MyDispatcher(emf);
context.addServlet("my", dispatcher).addMapping("/my/*");
}
}
public class MyDispatcher extends HttpServlet {
...
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
emf.createEntityManager();
// java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManagerFactory.
}
}
Проблема заключается в том, что этот диспетчер должен создать EntityManager с брошенным IllegalStateException. Отладка Я видел, что EntityManagerFactoryImpl.close () вызывается автоматически после создания всех компонентов.
Что я делаю не так? Есть ли способ достичь того, что мне нужно?
Спасибо.