November 21, 2016

Types of EntityManager

Entity Manager


အသုံးပြူနေတဲ့ ပတ်ဝန်းကျင် အရ JPA မှာ အသုံးပြုလို့ရတဲ့ Entity Manager အမျိုးအစား ၂ မျိုးရှိပါတယ်။

JTA ကို အသုံးပြုနိုင်တဲ့ Java EE ပတ်ဝန်းကျင်မှာ ဆိုရင်တော့ Container Managed Entity Manager ဆိုတာကို အသုံးပြုနိုင်ပါတယ်။ တဖန် Transaction Type အရ Transaction Scope နဲ့ Extended ဆိုတဲ့ပုံစံတွေရှိကြပါတယ်။

တဖန် Java SE ပတ်ဝန်းကျင်မှာ ဆိုရင်တော့ Application Managed Entity Manager ဆိုပြီး ရှိပါတယ်။ Java SE ပတ်ဝန်းကျင်နဲ့ Tomcat လို JTA ကို အသုံးမပြုနိုင်တဲ့ ပတ်ဝင်းကျင်တွေဆိုရင်လဲ Application Managed Entity Manager ကို အသုံးပြုရမှာ ဖြစ်ပါတယ်။


Container Managed Entity Manager


Java EE ပတ်ဝန်းကျင်တွေမှာ ဆိုရင် Entity Manager Object ကို @PersistenceContext Annotation ကို သုံးပြီး Inject လုပ်ယူလေ့ရှိပါတယ်။ ဒီလို Entity Manager မျိုးကို Container Managed Entity Manager လို့ခေါ်ပါတယ်။

Datasource Configuration


Container Manage EntityManager ကို အသုံးပြုမယ်ဆိုရင် Database Connection ကို Application Server ပေါ်မှာ ကြိုတင်ပြီး Datasource အနေနဲ့ Set Up လုပ်ထားရပါမယ်။

Data Source Configuration


အထက်ဖေါ်ပြပါ အတိုင်း Server ပေါ်မှာ JDBC Datasource ကို Set Up လုပ်ထားပါမယ်။ JNDI Name ကတော့ java:jboss/datasources/ShopCornerDS ပါ။ အဲ့ဒီ JNDI Name ကို JPA ရဲ့ Configuration ထဲမှာ အသုံးပြုရမှာ ဖြစ်ပါတယ်။

Edit persistence.xml



Application Server အပေါ်မှာ Data Source ကို Set Up လုပ်ပြီးတဲ့အခါ မိမိရဲ့ Application ထဲမှာရှိတဲ့ JPA ရဲ့ Deployment Descriptor ဖြစ်တဲ့ persistence.xml file ထဲမှာ JTA Data Source အနေနဲ့ ရေးသား ပေးရမှာ ဖြစ်ပါတယ်။ အထက်ပါအတိုင်း persistence.xml ဖိုင်ထဲမှာ JTA data source ရဲ့တန်ဖိုးကို Server ပေါ်မှာ သတ်မှတ်ထားတဲ့ JNDI Name ကို သတ်မှတ်ပေးရပါမယ်။ ထိုနည်းအားဖြင့် Container Managed EntityManager ကို ရယူနိုင်မှာ ဖြစ်ပါတယ်။

Using EntityManager


public class EntityManagerProducer {

 @Produces
 @PersistenceContext(unitName="shop-corner")
 private EntityManager em;
}

အထက်ပါအတိုင်း @PersistenceContext Annotation ကို အသုံးပြုပြီး EntityManager ကို အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။ တဖန် Container Managed EntityManager တွေကို EJB ဒါမှမဟုတ် CDI ရဲ့ @Transactional နဲ့ တွဲသုံးမယ်ဆိုရင် Transaction ကို Container မှ ထိမ်းပေးနိုင်မှာ ဖြစ်ပါတယ်။ နောက်အခန်းများတွင် Java EE ပတ်ဝန်းကျင်မှာ JPA ကို ရေးသားပုံအကြောင်းကို ဖေါ်ပြသွားပါဦးမယ်။


Application Managed EntityManager

Desktop Application Development ပတ်ဝန်းကျင်၊ ဒါမှမဟုတ် Application Server ကို မသုံးပဲ Tomcat လို Web Container တွေကိုသာ အသုံးပြုတဲ့ ပတ်ဝန်းကျင်တွေမှာ ဆိုရင်တော့ Container Managed EntityManager ကို အသုံးပြုနိုင်မှာ မဟုတ်ဘူး။ Application ထဲကနေ တိုက်ရိုက် Managed လုပ်တဲ့ Application Managed EntityManager ကို သာ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။

Application Managed EntityManager တွေကို သုံးမယ်ဆိုရင် EntityManagerFactory ကိုလဲ​ Application ထဲမှာ တည်ဆောက်ပြီး လိုအပ်တဲ့အခါမှာ EntityManager တွေကို EntityManagerFactory ကနေတိုက်ရိုက် ခေါ်ယူရမှာ ဖြစ်ပါတယ်။ တဖန် Transaction တွေကိုလဲ​ ကိုယ်တိုင် Handle လုပ်ပေးရမှာ ဖြစ်ပါတယ်။

EntityManager ရဲ့ Operation တွေမှာ Database ကို Effect ဖြစ်စေမည့် Operation တွေရှိပါတယ်။ အဲ့ဒီလို Operation တွေမှာဆိုရင် Transaction ကို Begin လုပ်ပြီးမှ အဆိုပါ Operation တွေကို လုပ်ဆောင်ဖို့လိုအပ်ပါတယ်။ Operation တွေ ပြီးဆုံးသွားပါမှ Transaction ကို Commit လုပ်ပေးရပါမယ်။

Container Managed EntityManager တွေမှာ ဆိုရင်တော့ EJB ဒါမှမဟုတ် CDI ရဲ့ @Transactional ကို သုံးပြီး Container ကို Transaction ကို Manage လုပ်ခိုင်းလို့ရပါတယ်။ ဒါပေမဲ့ Application Managed EntityManager တွေကတော့ ကိုယ်တိုင် Transaction တွေကို Manage လုပ်ဖို့လိုအပ်ပါတယ်။

Configure Persistence Unit


Application Managed EntityManager ကို အသုံးပြုမယ်ဆိုပါက persistence.xml ရဲ့ Transaction Type ကို Resource Local ကို ရွေးချယ်သတ်မှတ်ပေးရန်လိုအပ်ပြီး၊ Database Connection နဲ့ ပတ်သက်တဲ့ Information တွေကို ရေးသားထားဖို့ လိုအပ်ပါတယ်။


JDBC ကို သုံးမယ်ဆိုရင်လဲ​ Database ကို ချိတ်ဆက်ဖို့လိုအပ်တဲ့ Information တွေဖြစ်တဲ့ Driver, URL, User နဲ့ Password တွေကိုလဲ​သတ်မှတ်ပေးထားရပါမယ်။

Using EntityManager



    private static EntityManagerFactory EMF;
    private EntityManager em;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        EMF = Persistence.createEntityManagerFactory("jpa-2");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        EMF.close();
    }

    @Before
    public void setUp() throws Exception {
        em = EMF.createEntityManager();
    }

    @After
    public void tearDown() throws Exception {
        em.close();
    }

Application Managed EntityManager မှာ ဆိုရင် EntityManagerFactory ကို အရင် တည်ဆောက်ရပါမယ်။ EntityManagerFactory ကို တည်ဆောက်ရာမှာ Persistence Class ရဲ့ createEntityManagerFactory method မှ တဆင့်တည်ဆောက်ရပါမယ်။ Argument အနေနဲ့ persistence.xml file ထဲမှာ ရေးသားထားတဲ့ Persistence Unit Name ကို String အနေနဲ့ ပေးရမှာ ဖြစ်ပါတယ်။

တဖန် EntityManagerFactory ဟာ Resource တွေကို သုံးထားတာဖြစ်တဲ့အတွက် အားလုံးကို သုံးပြီးတဲ့အခါမှာ ပြန်ပြီး close လုပ်ပေးဖို့လိုအပ်ပါတယ်။

EntityManager Object ကိုတော့ EntityManagerFactory Object မှ တဆင့်တည် ဆောက်ရပါမယ်။ EntityManager Object ရဲ့ createEntityManager method ကို သုံးပြီး တည်ဆောက်ရမှာ ဖြစ်ပါတယ်။ EntityManagerFactory ကို တည်ဆောက်စဉ် အသုံးပြုခဲ့တဲ့ Persistence Unit ရဲ့ Information တွေနဲ့ EntityManager ကို တည်ဆောက်ပေးမှာ ဖြစ်ပါတယ်။

ဒါကြောင့် EntityManager Object ကနေ Manage လုပ်နိုင်တဲ့ Entity တွေဟာ Persistence Unit ထဲမှာ သတ်မှတ်ထားတဲ့ Entity Object များသာ ဖြစ်ရပါမယ်။

ဆက်ပါဦးမည်။
မင်းလွင်

No comments:

Post a Comment