2010-06-20 51 views
14

Başlık herşeyi belirtir: UserTransaction ve EntityTransaction arasındaki fark nedir?UserTransaction ile EntityTransaction arasındaki fark

Benim ilkel anlayış JTA (Mulitple şeylere örneğin yapmak sorguları) gereklidir ve JPA sadece gerekli olduğunda EntityTransaction kullanıldığını zaman UserTransaction kullanılır olmasıdır (örneğin sorgu atomik olduğunda).

Bu ikisi arasındaki tek fark bu mu yoksa daha fazlası var mı? JTA gerekir (ör mulitple şeylere sorguları yapmak için) ve JPA sadece gerekli olduğunda EntityTransaction kullanıldığını (örn sorgu olduğunda olduğunda

+0

olası yinelenen http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-usertransaction-and-entitymanager-gettransac) – ewernli

+1

@ewernli: Bu biraz haksızlık olurdum. Bu sorunun cevabını ilk etapta biliyor olsaydım bu sorunun bir kopya olduğunu biliyordum! Ne soru ne de cevap “EntityTransaction” dan bahsetmez - ben sormadan önce arama yaptım. – bguiz

+7

Bunu tamamen anlıyorum. Bu yüzden de, sorunuza en iyi şekilde cevap verebilmek için zaman ayırdım. Bu, SO'nun her iki soruyu da yanıtlayabilmesi için mümkün olan iki kopyayı belirtmek için yaygın bir uygulamadır, bu nedenle SO'nun kalitesini arttırır. Bu bir eleştiri ya da bir şey değil.Soru, "tam olarak kopyalanmış" şeklindedir, ancak bunu işaretleyen 5 oy varsa. – ewernli

cevap

20

Benim ilkel anlayış UserTransaction kullanılır olmasıdır atom).

Bu temel olarak doğru, ancak "birden çok şey" ve "atomik" açıklamalarınız biraz garip. JTA, geliştiricinin, çoklu kaynaklarda (veritabanı, JMS aracı, vb.) Değişiklikleri atomik olarak (tümü veya hiçbiri) gerçekleştirmesi için dağıtılmış işlemi kullanmasına izin verir. Yalnızca bir kaynağa erişilirse (ör., Tek bir veritabanı), JTA'ya ihtiyacınız yoktur, ancak işlem hala atomiktir (hepsi ya da hiçbir şey). Örneğin, bir veritabanında normal bir JDBC işlemi kullandığınızda durum budur. JPA kullanımı tek başına ise

  • , işlem kendinizi ayırmak için EntityTransaction kullanın:

    UserTransaction VS. EntityTransaction düşünürsek.

  • JPA, JTA ile tümleştirildiği yönetilen bir ortamda kullanılıyorsa, UserTransaction kullanın. EntityManager, kendisini JTA dağıtılmış işlem yöneticisine kancalar. Değişikliklerin akıntısını dikkate aldığının farkında olduğum tek incelik. EntityTransaction kullanıldığında, JPA değişikliklerin temizlenmesi gerektiğini bilmektedir. Eğer işlem UserTransaction kullanılarak kontrol edilirse, JTA registerSynchronization kullanarak bir geri arama kaydetmesi gerekir, böylece işlem tamamlanmadan önce değişiklikler veritabanına akıtılır. EJB'yi CMT ile (konteyner tarafından yönetilen işlem) kullanırsanız, UserTransaction'u kullanmanız bile gerekmez: uygulama sunucusu sizin için işlemleri başlatır ve durdurur.

İlgili sorular: