သူငယ္ခ်င္းေရ……..
ဒီေန႔ေတာ့ မင္းအတြက္ အသံုး၀င္မယ္ထင္တဲ့ အေၾကာင္းအရာတစ္ခုကို ေျပာျပခ်င္တယ္ကြာ။ အဲဒါက Apache Struts 2 အေၾကာင္းပါ။ မင္းသိျပီးသားလည္း ျဖစ္ခ်င္ျဖစ္မွာေပါ့။ ငါသိထားတဲ့ အေျခခံ အေၾကာင္းေလးပါ။
Apache Struts 2 ဆိုတာ Enterprise-read Java web applications ေတြလုပ္ဖို႔ အတြက္ အသံုး၀င္တဲ့ Framework တစ္ခုပါ။ သူ႔ရဲ႔ Framework က Extensible ျဖစ္တယ္။ အဲဒီ Framework က Development Cycle ကိုအေကာင္းဆံုးျဖစ္ေအာင္ ေထာက္ပံ့ေပးထားတယ္။ စျပီး တည္ေဆာက္တဲ့ အဆင့္ကေန အသံုးခ်တဲ့ အဆင့္ အဲဒီကေန..ျပင္ဆင္မွဳေတြ လုပ္ရတဲ့ အထိ လြယ္လြယ္ကူကူ လုပ္ႏိုင္ေအာင္ ေထာက္ပံ့ေပးတာေပါ့။
Apache Struts 2 ကို အရင္တုန္းက WebWork 2 လို႔ ေခၚတယ္။ ႏွစ္ေတြၾကာျပီးတဲ့ ေနာက္ WebWork နဲ႔ Struts ေပါင္းစပ္ျပီး Struts 2 ျဖစ္လာတယ္။ Version အသစ္ျဖစ္ေပမယ့္ အရင္တုန္းက Struts လိုပဲ အသံုး၀င္ပါတယ္။ ပိုျပီးေတာ့ ေကာင္းလာတယ္လို႔ ဆိုရမယ္။ www.struts.apache.org ဆိုတဲ့ site မွာ ၀င္ျပီးေလ့လာလို႔လည္းရတယ္။
ငါလည္း အခုမွ စျပီး Struts 2ကို ေလ့လာေနျပီ။ ငါေျပာတာေတြမွာ မွားတာေတြပါရင္ လည္း ျပဳျပင္ေပးပါကြာ။ သူငယ္ခ်င္း MVC Structure ဆိုတာကို ၾကားဖူးမွာ ေပါ့။ Model View Controller ဆိုတာေလ။ အခုခတ္စားေနတဲ့ Design Structure တစ္ခုေပါ့။ Struts 2 က လည္း အဲဒီ Structure ကို အေကာင္အထည္ေဖၚႏိုင္ေအာင္ လုပ္ေပးတဲ့ Framework တစ္ခုေပါ့။ သူ႔ရဲ ႔ အားသာခ်က္ေတြကေတာ့ အမ်ားၾကီးပဲကြ။ မင္းအားတဲ့ အခါထပ္ျပီး ေလ့လာၾကည္႔ေပါ့ကြာ။ ငါတို႔ရဲ ႔ ေဘာ္ဒါၾကီး www.google.com က ငါတို႔သိခ်င္တာ ဘယ္ဟာမဆို သိေအာင္လုပ္ေပးေနတာပဲ မဟုတ္လား။
Apache Struts2 ရဲ ႔ အဓိက စြမ္းေဆာင္မွဳေတြက သူက Pluggable Framework Architecture ကြ။ ဆိုလိုတာက မင္းလိုအပ္သလို Customize လုပ္ျပီးသံုးႏိုင္တယ္။ Flexible Validation Framework ျဖစ္လို႔ Validation Rules ေတြကို Action Code ေတြက ေနခြဲထြက္ျပီး လုပ္ႏိုင္လာတယ္။ Action Code ေတြမွာ ေရးစရာ မလိုေတာ့ဘူးေပါ့။ Hierarchical approach နဲ႔ Localizing applications ေတြကို Internationalization လုပ္လာတယ္။ သူက Integrated dependency injection engine တစ္ခုျဖစ္ျပီး component lifecycle နဲ႔ dependencies ေတြကို အေကာင္းမြန္ဆံုး manage လုပ္ေပးတယ္။ Default အေနနဲ႔ သူက Spring ကို သံုးျပီး dependency injection ေတြကုိ ေျဖရွင္းတယ္။ သူ႔မွာ Modular configuration files ေတြရွိျပီး packages ေတြ namespaces ေတြကို သံုးျပီး ၾကီးမားတဲ့ projects(actions ေပါင္း ၁၀၀ ေလာက္ပါတဲ့) ေတြကို ေကာင္းေကာင္းၾကီးကို manage လုပ္လို႔ ရတယ္။ Java 5 annotations ျဖစ္လို႔ configuration overhead ေတြကို ေလ်ာ့က်ေစတယ္။ *(Java 1.4 က minimum platform)
သူငယ္ခ်င္းေရ… မင္းသိတဲ့ အတိုင္း web ဆိုတာ သံုးတဲ့ သူက ေတာင္းဆိုမွ စျပီး အလုပ္လုပ္တာမဟုတ္လား။ Apache Struts 2 လည္း ဒီလိုပဲ။ သူ႔ ရဲ ႔ Request Processing အေၾကာင္းကို ေျပာရမယ္ဆိုရင္……
၁။ web browser က resource ေတြျဖစ္တဲ့ /mypage.action, /reports/myreport.pdf စတာေတြကို request လုပ္မယ္။
၂။ Filter Dispatcher ဆိုတဲ့အရာက request ေတြကို ၾကည္႔ျပီး သင့္ေတာ္တဲ့ Action ေတြကို ဆံုးျဖတ္ေပးတယ္။
၃။ Interceptors ဆိုတဲ့အရာက အလိုအေလ်ာက္ ေယဘူယ်ျဖစ္တဲ့ လုပ္ေဆာင္ခ်က္ေတြကို apply လုပ္ေပးတယ္။ workflow, validation, file upload handling စတဲ့ အရာေတြကို ေပါ့။
၄။ Action method က လုပ္ေပးတာကေတာ့ မ်ားေသာအားျဖင့္ information ေတြကို Database မွာ သိမ္းတာေတြ၊ ယူတာေတြကို အဓိက လုပ္တယ္။
၅။ Result ဆိုတဲ့အရာကေတာ့ output ေတြကို Browser ကို ျပန္ပို႔ေပးတဲ့ဟာေပါ့။ HTML, images, PDF စတဲ့ အရာေတြ အေနနဲ႔ ပို႔ေပးတယ္။
Struts 2 မွာ လုပ္ထားတဲ့ improvements ေတြက……
Design ပိုင္းကို ႐ိုးရွင္းစြာျပဳလုပ္ထားတယ္။ struts 1 မွာတုန္းကၾကံဳေတြခဲ့ရတဲ့ Design Problem တစ္ခုျဖစ္တဲ့ interfaces အစား abstract classes ေတြကို ေရးခဲ့ရတာေတြကို struts 2 မွာ ေျဖရွင္းထားတယ္။ Struts 2 ရဲ ႔ classes ေတြက မ်ားေသာအားျဖင့္ interfaces အေပၚမွာ အေျခခံထားတယ္။ သူ႔ရဲ ႔ အဓိက interfaces ေတြက HTTP အေပၚမွာလည္း မွီခိုမွဳ ကင္းတယ္။
Intelligent Defaults ျဖစ္တယ္။ configuration elementsေတြက မ်ားေသာအားျဖင့္ default value ေတြပါျပီးေတာ့ လိုအပ္သလို ထားျပီး သံုးႏိုင္တယ္။ xml ကို အေျခခံထားတဲ့ default configuration files ေတြပါျပီးေတာ့ အဲဒါေတြကို လည္း လိုအပ္သလို extended လုပ္ႏိုင္တယ္။
Results ပိုင္းမွာလည္းတိုးတက္လာတယ္။ ActionForwards နဲ႔ မတူေတာ့ပဲ Struts 2ရဲ ႔ Results ေတြက အမ်ိဳးစံုလင္တဲ့ outputs ေတြ ထုတ္ ႏိုင္ေအာင္ flexible ျဖစ္လာတယ္။
POJO (Plain Old Java Object) Action's အေနနဲ႔ ေျပာရရင္ Struts 1 မွာတုန္းက Actions ေတြက Servlet API ကို မွီခိုထားတယ္။ HttpServletRequest နဲ႔ HttpServletResponse objects ေတြက execute() method ကို pass လုပ္တယ္။ Struts2 မွာၾကေတာ့ ဘယ္ java class မဆို execute() method ပါရင္ Action class အေနနဲ႔ သံုးလို႔ရတယ္။ Actions ေတြက underlying framework မွာ neutral ျဖစ္ရမယ္။
Struts 2 Framework မွာ ActionForm's ေတြမရွိေတာ့ဘူး။ ႐ိုးရွင္းတဲ့ JavaBean ေတြကိုပဲ propertyies ေတြတိုက္႐ိုက္ပို႔ဖို႔ သံုးေတာ့တယ္။
Testing အတြက္လည္း Enhancement ေတြလုပ္ထားတယ္။ Struts 2 ရဲ ႔ Actions ေတြက HTTP independentျဖစ္ျပီး Framework နဲ႔လည္း neutral ျဖစ္တဲ့ အတြက္ struts applications ေတြကို test လုပ္တဲ့အခါမွာ အလြန္လြယ္ကူျပီး mock objects ေတြကို လည္းျပန္ျပီး စီစဥ္ေနရမွဳေတြ မရွိေတာ့ဘူးေပါ့။ mock objects ဆိုတာက objects ေတြကို unit testလုပ္တဲ့ အခါမွာ ၾကားခံအေနနဲ႔ လုပ္ေဆာင္တဲ့ အရာတစ္ခုပါ။
Tag Features ေတြပိုေကာင္းလာတယ္။ Struts 2 tags ေတြက style sheet-driven markup ေတြကို ထည္႔သံုးႏုိင္တဲ့ စြမ္းရည္ေတြရွိလာတယ္။ consistent ျဖစ္တဲ့ pages ေတြကို code နည္းနည္းနဲ႔ ေရးႏိုင္လာမယ္။ Struts 2 tage markup ေတြကို underlying stylesheet ကေနျပင္ႏုိင္တယ္။ Struts 2 tags ေတြက ပိုျပီးစြမ္းေဆာင္ရည္ ျမင့္လာတယ္။ result oriented ျဖစ္လာတယ္။ JSP ေရာ FreeMaker tags ေတြေရာ ႏွစ္ခုလံုးကို အျပည္႔အ၀ support လုပ္ေပးထားတယ္။
Annotations Support အေနနဲ႔ Java 5 annotations ကို XML နဲ႔ Java properties configurations ရဲ ႔ alternative အေနနဲ႔ သံုးထားတယ္။
(Stateful Checkboxes)Struts 2 ရဲ ႔ checkboxes ေတြက မွားယြင္းတဲ့ values ေတြ အတြက္ special handling ေတြ မလိုအပ္ေတာ့ဘူး။
(Quick Start)ေျပာင္းလဲမွဳေတြကို လွ်င္လွ်င္ျမန္ျမန္ လုပ္ႏိုင္တယ္။ web container ကို ျပန္စစရာမလိုဘူး။
သူငယ္ခ်င္းလိုအပ္ရင္ request handling ေတြကို action အလိုက္ customize လုပ္လုိ႔ရတယ္။ Customizable Controller ေပါ့။
Spring Beans ကို add လိုက္တာနဲ႔ပဲ Strus 2 Actions ေတြက Spring-aware ျဖစ္သြားတယ္။ Easy Spring Integration ေပါ့။
Struts 2 ရဲ ႔ extensions ေတြကို JAR file ကို drop လုပ္လုိက္တာနဲ႔ပဲ add လုပ္ႏိုင္ပါတယ္။ XML တို႔ properties files ေတြကို ထည္႔စရာ မလိုပါဘူး။
Ajax ကိုလည္း Support လုပ္တယ္။ AJAX client side validation ေတြ၊ Remote form submission support(work with the submit tag as well) ေတြ လုပ္ေပးတယ္။ Partial HTML ေတြကို dynamic reloading လုပ္ေပးတဲ့ advanced div template ေတြ၊ JavaScript ေတြကို remotely load ေတြ evaluate ေတြ လုပ္ႏိုင္တဲ့ စြမ္းရည္ေတြ ေထာက္ပံ့ေပးတဲ့ advanced template ေတြ၊ AJAX -only tabbed Panel implementation ေတြ၊ rich pub-sub event model ေတြ၊ interactive auto complete tag ေတြ ကို support လုပ္ေပးထားတယ္။
ဒါေတြက Apache Struts 2 ရဲ ႔ ပိုမိုေကာင္းမြန္လာတဲ့ အေၾကာင္းေတြပဲ။ သူငယ္ခ်င္းေရ စာေတြ အမ်ားၾကီးဖတ္ခိုင္းလို႔ ပ်င္းေနျပီလား။ OK! ဒီေန႔ေတာ့ ဒီေလာက္ပဲကြာ။ ငါလည္းစာေတြေရးရတာ ပ်င္းလာျပီ။
ေနာက္ေန႔ၾကမွ Apache Struts ရဲ ႔ အလုပ္လုပ္ပံုေတြကို ေျပာ ျပေတာ့မယ္။
မင္းကို ခင္မင္တဲ့….
KG,