Guice-Persist: попытка выполнить операцию на закрытом EntityManager

У меня есть приложение, управляемое maven, с двумя модулями: один для сохранения, а другой для самого веб-приложения (gwt).

Мои тесты в модуле постоянства работают как шарм, но в webapp, когда я выполняю один и тот же метод несколько раз, я получал java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager..

Я использую guice-persist, чтобы внедрить диспетчер сущностей в мои DAO, и все мои методы DAO имеют аннотацию @Transactional.

В своем веб-приложении я помещаю: public class ScuvServletModule extends ServletModule {

    @Override
    protected void configureServlets() {
       super.configureServlets();
       install(MyPersistenceAPI.getModule()); // return my module and install it
       filter("/*").through(PersistFilter.class);
       /// another bindings...
    }
}

Если я удалю PersistFilter, он сработает, но случайным образом выдаст исключение «Транзакция закрыта» или что-то в этом роде.

Любая помощь?


person caarlos0    schedule 03.05.2012    source источник


Ответы (1)


Я нашел проблему. Это PersistFilter. По сути, это синглтон, мои DAO тоже синглтоны, но EntityManager - нет.

Итак, теперь я ввожу Provider<EntityManager> вместо EntityManager, и он работает просто как шарм.

person caarlos0    schedule 07.05.2012