Hibernate has the notion of FlushMode.MANUAL to prevent operations from being pushed to the DB even upon queries. JPA has a baby version of that with extended persistence contexts behaving outside transactions.
Yes some methods like lock are not allowed when the em is expected to be passivated. But that's not a reason to disable a useful feature (passivation) altogether. Passivation is sometimes not possible but that far from your statement "This is never _never_ NEVER true. The EntityManager is not Serializable!". Emmanuel PS: There are more efficient ways to passivate an entityManager than serializing it with some help from the persistence provider. I don't remember if we ever finished this work. > On 11 juil. 2011, at 01:44, Mark Struberg <[email protected]> wrote: > There are a few problems which can happen: > > a.) EmtityManager#lock(java.lang.Object o, javax.persistence.LockModeType > lockModeType); and others with LockType#PESSIMISTIC_* > > b.) Consider you have an Entity dirty or a fresh one created with > em.persist(). And now you do a non-trivial query. In order to guarantee that > this new/modified entity gets evaluated properly, JPA _explicitly_ allows the > EntityManager to write those values into the database. Voila, you have your > open transaction! Not too many people are aware of that but yes, querying > from the database can lead to a SQL INSERT or SQL UPDATE into the database! > Of course, you better _not_ commit those changes immediately ;) > > > LieGrue, > strub > > > > --- On Sun, 7/10/11, John D. Ament <[email protected]> wrote: > > From: John D. Ament <[email protected]> > Subject: Re: [seam-dev] [seam-persistence] ManagedPersistenceContextExtension > To: "Mark Struberg" <[email protected]> > Cc: "Stuart Douglas" <[email protected]>, [email protected] > Date: Sunday, July 10, 2011, 11:29 PM > > But is the select for update done inside the entitymanager object or a query > instance? I don't think EntityManager.find(Class,Id) does any type of hold > on the object found. > > John > > > On Sun, Jul 10, 2011 at 7:15 PM, Mark Struberg <[email protected]> wrote: > > Stu, whenever you do a "select for update" or any manual locking, you will > end up with an EntityManager which cannot be transfered to another node. Even > if hibernate marks it's EntityManager Serializable, it just isn't if I didn't > miss something! > > > > > LieGrue, > > strub > > > > --- On Sun, 7/10/11, Stuart Douglas <[email protected]> wrote: > > > >> From: Stuart Douglas <[email protected]> > >> Subject: Re: [seam-dev] [seam-persistence] ManagedPersistenceContextExtension > >> To: "Mark Struberg" <[email protected]> > >> Cc: [email protected] > >> Date: Sunday, July 10, 2011, 11:07 PM > >> > >> On 11/07/2011, at 4:07 AM, Mark Struberg wrote: > >> > >>> Hi folks! > >>> > >>> While reviewing an OWB bug report, 2 questions came > >> up: > >>> > >>> a.) EnvironmentUtils#isEEEnvironment() relies on the > >> absence of 'javax.ejb.Stateless' to decide if a > >> PersitenceUnit gets injected or if you need to do it > >> yourself. I think this is an unrelieable assumption. E.g. > >> there are a few Extensions which emulate Stateless Session > >> beans via a CDI Extension by morphing them into > >> @ApplicationScoped. > >> > >> This is not ideal, but I don't think there is really any > >> portable way to detect if the environment is an EE > >> environment or not. I was originally planning to add a > >> method for configuring this, but it appears I did not get > >> around to it. > >> > >>> > >>> b.) in > >> ManagedPersistenceContextExtension#registerManagedPersistenceContext > >> you register the bean for the EntityManager as > >> passivationCapable. This is never _never_ NEVER true. The > >> EntityManager is not Serializable! There is imo no way to > >> have an EntityManager in a bean scoped other than > >> @RequestScoped or shorter (e.g. @TransactionalScoped). Any > >> other trick is not working in a portable way. This is mainly > >> caused by JPA still supporting pessimistic locking (_real_ > >> locks in the database) as first class citizens. > >>> > >> > >> Without this it is not possible to have a conversation > >> scoped entity manager. The hibernate EntityManager is in > >> fact Serializable. Locks should not be a problem as long as > >> you do not attempt to serialise the EM in the middle of a > >> transaction. > >> > >> Stuart > >> > >> > >>> But I'd be happy if anyone could enlighten me and tell > >> us how it works ;) > >>> > >>> LieGrue, > >>> strub > >>> _______________________________________________ > >>> seam-dev mailing list > >>> [email protected] > >>> https://lists.jboss.org/mailman/listinfo/seam-dev > >> > >> > > _______________________________________________ > > seam-dev mailing list > > [email protected] > > https://lists.jboss.org/mailman/listinfo/seam-dev > > > > > > _______________________________________________ > seam-dev mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/seam-dev _______________________________________________ seam-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/seam-dev
