August 23, 2013

Resource Creation

Resource ဆိုသည်မှာ Program Object တစ်မျိုးဖြစ်ပြီး၊ Database Server၊ Messaging System အစရှိသည် တို့နှင့် ဆက်သွယ်နိုင်သော Connection များအား ပံ့ပုံပေးနိုင်၏။ Java EE တွင် ပံ့ပိုးပေးနိုင်သော Resource များမှာ Databases, Mails Sessions, JMS Services နှင့် အမျိုးမျိုးသော URLs တို့ ဖြစ်ကြ၏။


Resource နှင့် JNDI Namming

Distributed Application တစ်ခုအတွင်းရှိ Components များသည် အခြားသော Components များနှင့် Resources များအား ဆက်သွယ်အသုံးပြုရန် လိုအပ်ပါသည်။ ဥပမာအားဖြင့် Servlet တစ်ခုသည် အခြားသော Enterprise Bean တစ်ခု၏ Remote Method ကို ခေါ်ယူ၍၊ Database အတွင်းရှိ အချက်အလက်များအား အသုံးပြုနိုင်ရန် လိုအပ်ခြင်း ဖြစ်၏။ Java EE Platform ပေါ်တွင် JNDI Naming Service ကို အသုံးပြု၍ Component တစ်ခုအတွင်း အခြားသော Components များနှင့် Resource များအား ခေါ်ယူ အသုံးပြုနိုင်ရန် အကူအညီပေးနိုင်ပါသည်။

အထက်တွင်ဖော်ပြထားသကဲ့သို့ပင် Resource ဆိုသည်မှာ Program Object တစ်ခုဖြစ်ပြီး အခြားသော Database System ကဲ့သို့သော Systems များအား ဆက်သွယ်အသုံးပြုနိုင်ရန် Connection များအား ပံ့ပိုးပေးပါသည်။ အဆိုပါ Resource Object များအား System တစ်ခုလုံးတွင် တစ်ခုတည်းသာ တည်ရှိသော၊ အသုံးပြုသူအတွက် မှတ်မိလွယ်ကူပြီး နားလည်လွယ်ကူစေသော အမည်ဖြင့် သတ်မှတ်ပေးရန် လိုအပ်ပါသည်။ ထိုအမည်ကို JNDI Name ဟု ခေါ်ဆိုပါသည်။

Administrator တစ်ယောက်သည် JNDI Namespaces အတွင်းတွင် Resources Object များအား တည်ဆောက်ထားနိုင်၏။ Glassfish Server အား အသုံးပြုမည်ဆိုပါက Admin Console မှတဆင့်သော်၎င်း၊ asadmin Command အား အသုံးပြု၍သော်၎င်း Resource များအား တည်ဆောက်နိုင်ပါသည်။ တည်ဆောက်ထားသော Resources များအား JNDI API အား တိုက်ရိုက်အသုံးပြု၍ သော်၎င်း၊ Annotation အား အသုံးပြု၍သော်၎င်း ခေါ်ယူ အသုံးပြုနိုင်ပါသည်။ Annotation သည် Java EE Container များအတွင်းတွင် Manage လုပ်ထားသော Resources များအား Application များအတွင်းသို့ Inject လုပ်ပေးနိုင်၏။ Java EE Container သည် Resource အား Inject လုပ်မည့် Annotation အားတွေ့ရှိပါက၊ JNDI API အား အသုံးပြုကာ Resource များအား ကြိုတင် Create လုပ်ထားပြီး၊ Application အတွင်းမှ Resource အား အသုံးပြုနိုင်အောင် ပြင်ဆင်ထားပါသည်။
Resource တစ်ခုအား Create လုပ်မည်ဆိုပါက JNDI Name နှင့် Resource Object အား ပူးတွဲ၍ JNDI Namespaces အတွင်းတွင် သိမ်းဆည်းပြီး၊ ၎င်း name/object အတွဲအား Naming and Directory Service မှ Manage လုပ်မည် ဖြစ်သည်။ Application တစ်ခုအတွင်းသို့ @Resource Annotation အား အသုံးပြု၍ Resource Object များအား Inject လုပ်နိုင်မည် ဖြစ်ပါသည်။ ဤကဲ့သို့ Object တစ်ခုအတွင်းတွင် အခြားသော Object များအား New လုပ်ရန် မလိုအပ်အောင်စီမံနိုင်ခြင်းအားဖြင့် Object တစ်ခုနှင့် တစ်ခုအကြားရှိ Coupling ဖြစ်ပွားမှု့ကို နည်းပါးစေပြီး Reusable ဖြစ်ပြီး၊ Maintenance လုပ်ရလွယ်ကူသော Component များအား ရေးသားနိုင်ရန် အကူအညီပေးနိုင်ပါသည်။

Application များအတွင်းတွင် ရေးသားထားသော Annotation များ၏ Specification Mapping များနှင့် Resource များအား Override လုပ်လိုပါက Deployment Descriptor များအား ပြုပြင်ရေးသား၍ အသုံးပြုနိုင်သည်။ Deployment Descriptor များအား အသုံးပြုခြင်းအားဖြင့်၊ Source Code များအား ပြန်လည် Compile လုပ်ခြင်း၊ Packaging လုပ်ခြင်းတို့ကို ပြုလုပ်စရာမလိုပဲ Application များအားပြုပြင် ပြောင်းလည်းနိုင်၏။


DataSource Object နှင့် Connection Pools

Application အတော်များများသည် အသုံးပြုနေသော Data များအား စုစည်းသိမ်းဆည်းရန်၊ သိမ်းဆည်းထားသော Data များအား ပြန်လည်ခေါ်ယူ အသုံးပြုရန် အတွက် Relational Database များအား အသုံးပြုကြ၏။ Java EE 7 Components များသည် JDBC API အားအသုံးပြု၍ Relational Database များအား ဆက်သွယ် အသုံးပြုနိုင်၏။

JDBC API အတွင်းတွင် DataSource Object များအား အသုံးပြု၍ Database များအား ဆက်သွယ်နိုင်ပါသည်။ DataSource အတွင်းတွင် Properties Set တစ်ခုကိုပိုင်ဆိုင်ပြီး၊ ၎င်း Properties များဖြင့် Database တစ်ခုအား ဆက်သွယ်ရန် အတွက် လိုအပ်သော အချက်အလက်များကို သတ်မှတ်ရေးသားရန် လိုအပ်ပါသည်။ များသောအားဖြင့် သတ်မှတ်ရန်လိုအပ်သော အချက်အလက်များမှာ အသုံးပြုမည့် Database ၏ တည်နေရာ၊ အမည်၊ Network Protocol၊ User name နှင့် Password တို့ ဖြစ်ကြ၏။ Glassfish Server ပေါ်တွင် DataSource များအား JDBC Resources ဟု ခေါ်ဆိုပါသည်။
Application များသည် Data Source များအား Connection Object များဖြင့် ဆက်သွယ်နိုင်ပြီး၊ DataSource Object များသည် ၎င်း၏ Properties များဖြင့် သတ်မှတ်ထားသော Data Source များအား ဆက်သွယ်နိုင်သည့် Connection များအား ထုတ်လုပ်ပေးနိုင်သည့် Factory အနေဖြင့် အသုံးပြုနိုင်သည်။ DataSource#getConnection အား အသုံးပြုခြင်းအားဖြင့် Connection Object များအား ရယူနိုင်ပါသည်။

DataSource Object များသည် Connection Pool များအား တည်ဆောက်ထားပြီး၊ getConnection Method အား ခေါ်ယူသည့် အခါ ၎င်းက Manage လုပ်ထားသော Pool အတွင်းမှ Connection Object အား ပြန်၍ပေးပါသည်။ အကယ်၍ Application အတွင်းမှ Connection Object အား အသုံးပြုပြီး၍ Close လုပ်သည့်အခါတွင် DataSource Object သည် ၎င်း Connection Object အား ပြန်လည်အသုံးပြုနိုင်သော Connection ဖြစ်အောင်ပြောင်းလည်းပြီး၊ Connection Pool အတွင်းတွင် ပြန်လည်သိမ်းဆည်းထားပါသည်။ Application အတွင်းမှ Connection အား တောင်းယူသည့်ခါ Pool အတွင်းရှိ အသုံးပြုရန် အသင့် ဖြစ်နေသော Connection အား ပြန်ပေးပါသည်။ Connection Pool အား အသုံးပြုခြင်းအားဖြင့် Physical Connection အား အသစ်တည်ဆောက်ရန် မလိုအပ်တော့ပါသဖြင့် Application ၏ Performance အား သိသိသာသာ ကောင်းမွန်လာစေပါသည်။

JPA API အား အသုံးပြုသည့် Application များတွင် persistence.xml ၏ jta-data-source Element တွင် အသုံးပြုမည့် DataSource Object ၏ JNDI Name အား သတ်မှတ်ရေးသားနိုင်၏။
<jta-data-source>jdbc/address_db</jta-data-source>

ဤကဲ့သို့ရေးသားထားခြင်း အားဖြင့် Application အတွင်းတွင် JDBC Object များအား ရေးသားရန်မလိုပဲ၊ Database များအား အသုံးပြု၍ မိမိ၏ Entity များအား ထာဝရအသုံးပြုနိုင်သော Entity များအဖြစ် Manage လုပ်နိုင်မည် ဖြစ်သည်။


Resources များအား Create လုပ်ခြင်း

Java EE Application အား Glassfish Server အပေါ်သို့ Deploy လုပ်၍ အသုံးမချခင် အသုံးပြုမည့် Resource များအား ကြိုတင် Create လုပ်ထားရန် လိုအပ်ပါသည်။ Resource များအား Glassfish Server ၏ Admin Console မှ Create လုပ်၍သော်၎င်း၊ asadmin command အား အသုံးပြု၍ Application တိုင်းအတွက် glassfish-resource.xml အား create လုပ်၍သော်၎င်း အသုံးပြုနိုင်ပါသည်။ အောက်ပါ Command ဖြင့် Resource Configuration file အား Create လုပ်နိုင်ပါသည်။

Command Remarks
asadmin create-resources glassfish-resource.xml Resource File အား Create လုပ်ခြင်း
asadmin create-jms-resource JMS Resource အား Create လုပ်ခြင်း
asadmin list-jms-resources Create လုပ်ထားသော JMS Resources များအား ပြန်ကြည့်ခြင်း
asadmin delete-jms-resource JMS Resource အား Delete လုပ်ခြင်း
တဖန် Glassfish Admin Console အတွင်းမှ အောက်ပါအတိုင်း Resources များအား Create လုပ်နိုင်ပါသည်။ ဥပမာအားဖြင့် MySQL Database Server အား ဆက်သွယ်အသုံးပြုရန် Admin Console ဖြင့် ပြင်ဆင်ကြည့်ပါမည်။ Glassfish Server အား Start မလုပ်ခင် MySQL Connector Jar (JDBC Connector) ဖိုင်အား Server ၏ Library အတွင်း သွားထည့်ထားရန် လိုအပ်ပါသည်။ (\glassfish4\glassfish\lib)

ပြီးပါက Glassfish Server အား Start လုပ်၍ Admin Console မှ Configure လုပ်ပါမည်။ Glassfish Server အား Local Host အပေါ်တွင် အသုံးပြုနေပါက http://localhost:4848/ ဖြင့် Admin Console အား ဆက်သွယ်နိုင်ပါသည်။ ထိုမှ တဆင့် Admin Console မှ JDBC Connection Pool အား တည်ဆောက်ပေးရပါမည်။ Admin Console ၏ ဘယ်ဘက် Common Tasks Menu အတွင်းရှိ Resources > JDBC Connection Pools ကို ရွေးချယ်ကာ New Button အား Click လုပ်၍ JDBC Connection Pool အသစ် တစ်ခုအား တည်ဆောက်နိုင်ပါသည်။

ပြီးပါက အောက်ဖော်ပြပါအတိုင်း Pool Name အား နှစ်သက်ရာ အမည်တစ်ခုကို ပေး၍၊ Resource Type တွင် javax.sql.ConnectionPoolDataSource ကိုရွေးချယ်ကာ၊ Database Driver Vender နေရာတွင် MySQL ကို ရွေးချယ်ရပါမည်။ ထို့နောက်တွင် Next Button အား Click လုပ်၍ Properties များအား သတ်မှတ်ပေးရပါမည်။
Property Name Property Value
User root
ServerName localhost
DatabaseName sample_db
Password admin
Url jdbc:mysql://localhost:3306/sample_db
URL jdbc:mysql://localhost:3306/sample_db
အထက်ဖော်ပြပါအတိုင်း Properties များအား မိမိ၏ ပတ်ဝင်းကျင်နှင့် ကိုက်ညီမည့် အချက်အလက်များအား ဖြည့်စွက်ကာ Finish Button အား Click လုပ်ပါမည်။ JDBC Connection Pools အား ကြည့်ကြည့်သောအခါ SamplePool အား တွေ့ရှိမည်ဖြစ်ပါသည်။ ၎င်းအား Click နှိပ်၍ General Tab မှ Ping အား စမ်းကြည့်ပါမည်။ MySQL Connector Library ကို မှန်ကန်စွာဖြည့်ထား၍၊ Configuration ရှိ အချက်အလက်များတွင် အမှားမရှိပါက Ping Success ဖြစ်မည် ဖြစ်ပါသည်။

ဆက်လက်၍ JDBC Resource အာ Create လုပ်ရန် လိုအပ်ပါသေးသည်။ Resources > JDBC > JDBC Resource ကို ရွေးချယ်၍ New Button အာ Click လုပ်ပါမည်။


အောက်တွင် ဖော်ပြထားသကဲ့သို့ JNDI Name တွင် နှစ်သက်ရာ အမည်တစ်ခုကို ဖြည့်စွက်၍ Pool Name တွင်၊ အပေါ်တွင် ပြုလုပ်ခဲ့သော JDBC Connection Pool အား ရွေးချယ်ကာ OK Button အား Click လုပ်ပါက JDBC Resource တစ်ခု တည်ဆောက်ပြီး ဖြစ်ပါလိမ့်မည်။

အောက်ပါအတိုင်း JDBC Resources အတွင်းတွင် Create လုပ်ထားသော Resource Name အား တွေ့ရှိပါက၊ အပလီကေးရှင်း အတွင်းမှ ခေါ်ယူ အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။


ဆက်ပါဦးမည်။ လေးစားစွာဖြင့်။
မင်းလွင်

No comments:

Post a Comment