EJB 3.X ში გვაქვს extended persistence context და მეორეა transaction-scoped. თუ მეორეზე გვაქ საუბარი, ბინის ინსტანსი არის წვდომადი [managed] მანამ სანამ ტრანზაქციაში ვართ [ტრანზაქცია როგორც კი მორჩება, წვდომა აღარ გვექნება, ამ მდგოამრეობას detached-ს ვუწოდებთ]. ანუ როგორ კი ტრანზაქცია დამთავრდება პერსისთენს ობიექტები გახდეაბიან detached.
თუმცა სხვაგვარად გვაქვს საქმე extended scoped კონტექსტში. მიუხედავად ტრანზაქციის დასრუელბისა, ენთითის ინსტანსი რჩება წვდომადი კვლავ - ყველა ობიექტის ისნტანცი რჩება წვდომადი.
ანუ ეს ორი ვარიანტი გვაქვს:
PersistenceContextType.EXTENDED PersistenceContextType.TRANSACTION
მაგალითად, შევქმნათ Stateful (!)) ბინი.
თუ, EXTENDED არ გვექნებოდა, როდესაც addAccount შესრულდებოდა, ტრანზაქციაც მორჩებოდა, და updateAge სთვის შეცვლიდა მხოლოდ detached entity ინსტანსს, და რათმქაუნდა ეს ბაზაზე არ მოახდენდა გავლენას. ამ შემთხვევაში კი, ტრანზაქციის დასრულების შემდეგაც გვაქვს წვდომა.@Stateful public class ShoppingCartBean implements ShoppingCart{ @PersistenceContext(type=PersistenceContextType.EXTENDED) EntityManager em; private Account account public void addAccount(){ account= new Account(); account.setName("valhtang"); account.setAge("21"); em.persist(account) } public void updateAge(){ account.setAge("22"); } }
No comments:
Post a Comment