persistence@glassfish.java.net

RE: thread-safety

From: Gordon Yorke <gordon.yorke_at_oracle.com>
Date: Fri, 1 Sep 2006 11:24:20 -0400

Hello Daniel,
    No the specification specifically disallows sharing an EntityManager among multiple concurrently executing threads (Section 5.2).
--Gordon
  -----Original Message-----
  From: Daniel Cavalcanti [mailto:dhcavalcanti_at_gmail.com]
  Sent: Friday, September 01, 2006 11:13 AM
  To: persistence_at_glassfish.dev.java.net
  Subject: thread-safety


  Hello,

  Quick question: Is the EntityManager thread safe?

  For example,

  class Foo {

      private EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
      private EntityManager manager = emf.createEntityManager();
      
      // method accessed by several concurrent threads
      public void foo() {
          
          try {
              manager.getTransaction().begin();
              // TODO: do somethinf
              manager.getTransaction().commit();
          } catch(Exception e) {
              manager.getTransaction().rollback();
          }
         
      }
      
  }

  thanks,
  Daniel.