Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-437

EntityManagerFactory is not thread-safe

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.0, 1.0.1, 1.0.2, 1.1.0
    • 1.0.2, 1.1.0
    • kernel
    • None

    Description

      Under certain conditions, we have discovered that the EntityManagerFactory is not thread safe when creating EntityManagers. The problem is in the loadPersistentTypes method of the AbstractBrokerFactory. There is an unprotected data structure (_pcClassNames) that can various problems (NullPointerException, IndexOutOfBoundsException, etc) when attempting to add new elements to the ArrayList. Other similar datastructures in this part are properly synchronized (_pcClassLoaders for example), but somehow we missed this one.

      A common scenario where this might be encountered is if your SLSB has an injected PersistenceUnit (EntityManagerFactory), but is attempting to create the EntityManager during a post-bean creation method (@PostConstruct). In this case, the SLSB instances are probably using the same EMF instance (of course this would depend on your application server implementation). If you have this type of environment, then hitting these SLSB's with multiple clients could get you into this situation.

      Attachments

        1. OPENJPA-437-nosync.patch
          3 kB
          Patrick Linskey

        Issue Links

          Activity

            People

              kwsutter Kevin W. Sutter
              kwsutter Kevin W. Sutter
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: