Внедрить EntityManagerFactory в диспетчер сервлетов (неуправляемый) - PullRequest
1 голос
/ 23 января 2012

Я хочу создать диспетчер сервлетов, способный выполнять некоторые операции 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 () вызывается автоматически после создания всех компонентов.

Что я делаю не так? Есть ли способ достичь того, что мне нужно?

Спасибо.

...