EntityManager的底層可以使用JTA或RESOURCE_LOCAL類型的事務控制策略。JTA一般在容器環境中使用,而RESOURCE_LOCAL一般在J2SE的環境下使用。
比如,在J2SE的環境下,由應用程序自身來創建EntityManagerFactory,並由EntityManagerFactory創建EntityManager,通過EntityManager.getTransaction.begin()方法來開啓事務,commit()方法提交事務等等,這種方式就是RESOURCE_LOCAL的基本使用方法。
最常用的就是在容器環境下使用。也就是使用JTA類型的EntityManager,這樣,EntityManager的調用都是在一個外部的JTA事務環境下進行的。
Container-Managed EntityManager必須是JTA類型的EntityManager,而Application-Managed EntityManager則既可以是JTA類型的EntityManager,也可以是RESOURCE_LOCAL類型的EntityManager。