August 29, 2016

Creating EntityManager on Java SE Environment

EntityManager


JPA ကို အသုံးပြုရာမှာ EntityManager ဟာ အဓိကနေရာတွင်ပါတဲ့ Interface Object တစ်ခုဖြစ်ပါတယ်။

EntityManager တွေဟာ Entity Object အစုအဝေးဖြစ်တဲ့ Persistence Context တစ်ခုနှင့် တိုက်ရိုက်ချိတ်ဆက်ထားလေ့ရှိပါတယ်။ Persistence Context ဆိုတာဟာ Unique ဖြစ်သော Entity များကို Manage လုပ်ပေးထားနိုင်တဲ့ Memory ပေါ်က Area တစ်ခုဖြစ်ပါတယ်။ Persistance Unit ထဲမှာ သတ်မှတ်ထားတဲ့ Entity Object တွေနဲ့ သူတို့ရဲ့ Lifecycle တွေကို Persistence Context အတွင်းမှာ Manage လုပ်ပေးထားနိုင်ပါတယ်။

EntityManager Interface မှာ Persistence Context နဲ့ ဆက်သွယ်ဆောင်ရွက်နိုင်မဲ့ Method များကို ပြင်ဆင်ထားပါတယ်။ EntityManager မှာ Entity Object တွေကို create နဲ့ remove လုပ်နိုင်တဲ့ method တွေနဲ့ Entity Object Lifecycle ကို Handle လုပ်နိုင်တဲ့ method အပြင်၊ ID ကို အသုံးပြုပြီး Entity Object တွေကို ရှာဖွေပေးနိုင်တဲ့ Method တွေပါဝင်ကြပါတယ်။ ထို့အပြင် Entity Object တွေကို ရှာဖွေပေးနိုင်တဲ့ Query Object တွေကို ရယူနိုင်တဲ့ Method တွေလဲ ပါဝင်ကြပါတယ်။


How to Create?


JPA ကို Java SE ပတ်ဝန်းကျင်မှာလဲ​ အသုံးပြုနိုင်သလို Java EE ပတ်ဝန်းကျင်တွေမှာလဲ​ အသုံးပြုနိုင်ပါတယ်။ JPA လို့ပြောပေမဲ့ နောက်ကွယ်မှာတော့ JDBC ကို အသုံးပြုနေတာဖြစ်တဲ့ အတွက် EntityManager ကို အသုံးပြုနိုင်ဖို့ Database Connection ကို ရယူဖို့လိုအပ်ပါတယ်။

Java SE (Desktop) ပတ်ဝန်းကျင်နဲ့ Java EE (Application Server) ပတ်ဝန်းကျင်တွေမှာ Database Connection ကို ရယူပုံတွေ မတူညီပါဘူး။ အဲ့ဒီအတွက် EntityManager ကို တည်ဆောက်တဲ့ နေရာမှာလဲ ပတ်ဝန်းကျင် အပေါ်မူတည်ပြီး ပြောင်းလဲပါတယ်။


On Java SE Environment




EntityManager Object ကို တည်ဆောက်တဲ့နေရာမှာ EntityManagerFactory Object ကို အသုံးပြုရပါတယ်။ EntityManagerFactory ဟာ persistence.xml ဆိုတဲ့ Configuration ထဲမှာ ရေးသားထားတဲ့ Persistence Unit ထဲမှာပါတဲ့ Configuration တွေနဲ့ တည်ဆောက်ထားပါတယ်။

persistence.xml file ဟာ JPA ကို အသုံးပြုရင် မရှိမဖြစ်လိုအပ်တဲ့ Configuration File ဖြစ်ပြီး သူ့အထဲမှာ Database Connection နဲ့ပတ်သက်တဲ့အချက်တွေ၊ အသုံးပြုနိုင်တဲ့ Entity Object တွေအပြင် Schema Creation နဲ့ပတ်သက်တဲ့အချက်တွေကို ရေးသားသတ်မှတ်ထားနိုင်ပါတယ်။

JPA ရဲ့ Standard ဖြစ်တဲ့ Configuration တွေအပြင် JPA Provider တွေဖြစ်တဲ့ Eclipse Link, Hibernate တို့ရဲ့ ပတ်ဝန်းကျင် Specifice ဖြစ်တဲ့ Configuration တွေကိုလဲ​ အသုံးပြုနိုင်ပါတယ်။


အထက် ဖေါ်ပြပါ အတိုင်း Persistence Class ရဲ့ createEntityManagerFactory method မှ EntityManagerFactory Object ကို တည်ဆောက်နိုင်ပါတယ်။ Argument အနေနဲ့ Persistence Unit Name ကို ပေးရပါမယ်။ အဲ့ဒီမှာ အသုံးပြုတဲ့ Persistence Unit Name ဟာ persistence.xml ဖိုင်မှာ သတ်မှတ်ထားတဲ့ Persistence Unit Name ကို အသုံးပြုရမှာ ဖြစ်တယ်။

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



Creating Maven JPA Project


ကျွန်တော်တို့ Maven ကို အသုံးပြုပြီး Java SE ပတ်ဝန်းကျင်မှာ JPA Project တစ်ခုကို တည်ဆောက်ပါမယ်။


Eclipse ရဲ့ New Wizard ကို သုံးပြီး Maven Project ကို ရွေးပါမယ်။


Maven Project ကိုတည်ဆောက်တဲ့နေရာမှာ Group Id, Artefact Id နဲ့ Version နဲ့ Packaging တို့ကို မဖြစ်မနေ ရွေးချယ်ပေးဖို့လိုအပ်ပါတယ်။ Group Id ကတော့ မိမိကိုယ်စားပြုတဲ့ Group ကို Reverse Domain Name နဲ့ ရေးလေ့ရှိပြီး၊ Artifact Id နေရာမှာတော့ မိမိရဲ့ Project Name ကို ရေးလေ့ရှိပါတယ်။

ဒီတစ်ခေါက်ပရို့ဂျက်က SE ပတ်ဝန်းကျင် ဖြစ်တဲ့အတွက် Packaging ကိုတော့ jar လို့ပဲထားထားပါတယ်။


Adding Maven Dependencies



ပြီးရင် Project Root Folder ထဲမှာရှိတဲ့ Maven Configuration File (pom.xml) ကို ဖွင့်ပြီး အထက်ပါအတိုင်း ပြုပြင်ပါမယ်။

Maven ရဲ့ Default Compiler ရဲ့ Java Version ဟာ 1.5 ဖြစ်လို့ properties မှာ target နဲ့ source ကို 1.8 ဖြစ်အောင် ပြင်ပေးရပါမယ်။ ဒီတစ်ခေါက် Database အနေနဲ့ Embedded HSQL DB ကို အသုံးပြုမှာ မို့လို့ hsqldb ရဲ့ Dependency ကို ရေးပေးရပါမယ်။ တဖန် JPA Provider အနေနဲ့ hibernate ကို အသုံးပြုမှာ ဖြစ်တဲ့အတွက် hibernate-entitymanager ကို လဲ Dependency အနေနဲ့ရေးပေးရပါတယ်။

အထက်ပါအတိုင်းပြုပြင်ပြီးနောက် Project ကို Right Click ထောက် ပြီးရင် Maven Update လုပ်ပေးလိုက်ရင် လိုအပ်တဲ့ Dependency တွေကို ဖြည့်ပေးမှာ ဖြစ်ပါတယ်။

ဒါဆိုရင် ကျွန်တော်တို့ Hibernate ကို သုံးပြီး JPA ကို ရေးဖို့ Project တော့ တည်ဆောက်လို့ပြီးပါပြီ။


Creating persistence.xml


Eclipse နဲ့ Maven ကို သုံးပြီး JPA ပရို့ဂျက်တွေကို ရေးသားတဲ့နေရာမှာ တစ်ခုသတိထားဖို့လိုပါတယ်။ အဲ့ဒါကတော့ persistence.xml file ကို ထားတဲ့နေရာပါပဲ။ Maven Project တွေဟာ /src/main/resources folder အောက်ရှိ File များကို Resource အဖြစ် အသုံးပြုတဲ့အတွက် တစ်ခြားနေရာမှာ သွား ဆောက်လို့မရပါဘူး။

ဒါကြောင့် /src/main/resource folder အောက်မှာ META-INF ဆိုတဲ့ folder ကို ဆောက်ပြီး အဲ့ဒီအောက်မှာ persistence.xml file ကို သွားဆောက်ရပါမယ်။


အထက်ဖေါ်ပြပါ persistence-unit tag ဟာ EntityManagerFactory ကို တည်ဆောက်တဲ့နေရာမှာ အသုံးပြုမဲ့ Persistence Unit ဖြစ်ပါတယ်။ အဲ့ဒီမှာပါတဲ့ name ရဲ့တန်ဖိုးကို ပြန်ပြီး အသုံးပြုရမှာ ဖြစ်ပါတယ်။

Java SE ပတ်ဝန်းကျင်ဖြစ်တဲ့အတွက် transaction-type ကို RESOURCE_LOCAL လို့ရေးပေးထားရပါတယ်။

Property အနေနဲ့ Database ကို ချိတ်ဆက်ဖို့လိုတဲ့ Information တွေကို ရေးသားပေးဖို့လိုပါတယ်။

ပြီးပါက အောက်ပါအတိုင်း Entity Object တစ်ခုကို တည်ဆောက်ပါမယ်။ Getter Setter တွေကိုတော့ ဖေါ်မပြတော့ပါဘူး။ Entity Object တွေကို ဘယ်လို ရေးရမယ်ဆိုတာကတော့ ရှေ့အခန်းတွေမှာ လေ့လာနိုင်ပါတယ်။

Eclipse IDE ရဲ့ အကူအညီယူပြီး Entity Object ကို ရေးမည် ဆိုပါက ပြဿနာမရှိရေးနိုင်မှာ ဖြစ်ပေမဲ့ ရို့ရိုး Class ကို ရေးပြီး သက်ဆိုင်ရာ Annotation ကို ရေးမယ်ဆိုရင် Project Setting အပေါ်မူတည်ပြီး Error ပြနေမှာ ဖြစ်တယ်။ ဘာလို့လဲ့ဆိုတော့ @Entity Annotation ကို သုံးထားပြီး အဲ့ဒီ Class ကို Persistence Unit ထဲ ထည့်မထားတဲ့အတွက် ဖြစ်ပါတယ်။


Writing JUnit Test


Student Object ရဲ့ id ကို Generate Value အဖြစ် အသုံးပြုထားတဲ့အတွက် Student Object ကို persist လုပ်ပြီးတဲ့အခါမှာ သူ့ရဲ့ id ရဲ့တန်ဖိုးဟာ 1 ဖြစ်နေရမယ်ဆိုပြီး စစ်ထားပါတယ်။ JUnit Test ကို Run ကြည့်တဲ့အခါမှာ မှန်ကန်ကြောင်းတွေ့ရပါမယ်။

ဒီတစ်ခေါက်တော့ EntityManager ဟာ ဘာလဲ၊ Java SE ပတ်ဝန်းကျင်မှာ JPA Project တစ်ခုကို ဘယ်လို ရေးရမယ်ဆိုတာကို အဓိကထားဖေါ်ပြခဲ့ပါတယ်။ နောက်ရက်များမှ JPA Project မှာ မရှိမဖြစ်လိုအပ်တဲ့ Persistence Unit ကို ဘယ်လို Configure လုပ်ရမယ်ဆိုတာကို ဖေါ်ပြသွားပါဦးမယ်။

ဆက်ပါဦးမယ်။

မင်းလွင်

No comments:

Post a Comment