Guice-Persist: Mencoba menjalankan operasi pada EntityManager yang tertutup

Saya memiliki aplikasi yang dikelola oleh pakar dengan dua modul: satu untuk persistensi, dan satu lagi untuk aplikasi web itu sendiri (gwt).

Pengujian saya dalam modul persistensi berfungsi dengan baik, tetapi, di aplikasi web, ketika saya menjalankan metode yang sama beberapa kali saya mendapatkan java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager..

Saya menggunakan guice-persist untuk memasukkan manajer entitas ke dalam DAO saya, dan semua metode DAO saya memiliki anotasi @Transactional.

Di aplikasi web saya, saya meletakkan: 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...
    }
}

Jika saya menghapus PersistFilter, itu tidak berfungsi, tetapi secara acak memunculkan pengecualian Transaksi Tertutup atau sesuatu seperti itu.

Ada bantuan?


person caarlos0    schedule 03.05.2012    source sumber


Jawaban (1)


Saya menemukan masalahnya. Itu adalah PersistFilter. Tampaknya, ini adalah Singleton, DAO saya juga lajang, tetapi EntityManager tidak.

Jadi, sekarang saya menyuntikkan Provider<EntityManager> sebagai ganti EntityManager, dan itu bekerja dengan sangat baik.

person caarlos0    schedule 07.05.2012