Wednesday, April 9, 2014

WebLogic Clustered Env:

WebLogic  Clustered Env:

Corporate ေတြရဲ႕ web application ေတာ္ေတာ္မ်ားမ်ားဟာ Clustered Environment မွာထားၾကတယ္။

Clustering အေၾကာင္းေျပာေနရင္ ရွည္လ်ားေထြျပားကုန္မယ္။ အၾကမ္းဖ်င္းကေတာ႔ Availability ျမင္႔ေအာင္ၾကပါတာပါ။ Weblogic မွာေတာ႔ Managed Server  အေနနဲ႕လုပ္ၾကပါတယ္။ App1 ကို အရင္စ။ cluster ထဲသြင္းထား။ ေနာက္ထပ္ App2 ကုိစ Cluster ထဲသြင္း။  cluster နဲ႕မွန္မွန္ကန္ကန္ေလးတက္လာတဲ႔ server ေတြမွာဆို
 
အဲဒီ BEA 000102 ေလးေတြ႕ရလိမ္႔မယ္။ အဲဒီ IP နဲ႕ Port ေနာက္မွာ Clusters 2 ခုရိွတယ္ေပါ႔။ App1 နဲ႕ App2 ကို Node ေတြလုိ႕လည္းေခၚတယ္။ ဒါက အလြယ္ဆံုး ဥပမာေျပာတာ။

မ်ားေသာအားျဖင္႔ေတာ႔ Load Balancer Hardware/software/Plug-in တစ္ခုခု ေရွ႕နားကေန ခံထားေလ႔ရိွတယ္။ အဲဒါမွမဟုတ္ရင္လည္း အလကားလုပ္ထားသလိုျဖစ္ကုန္မွာကိုး။

ၾကံဳေလ႔ၾကံဳထရိွတဲ႔ ျပႆနာသံုးေလးခုအေၾကာင္းေျပာၾကရေအာင္။ ပထမဆံုးက cluster လုပ္ထားရင္ session ကို share ရမယ္။ မဟုတ္ရင္ ပထမ request က App1 ေၾကာင္႔၊ ဒုတိယ request က App2 ေရာက္ေတြျဖစ္ကုန္ရင္ Session Timeout ေတြျဖစ္ေစႏုိင္တယ္။

Load Balancer က App ကို တုိက္ရုိက္လႊဲလိုက္တာေတာ႔မဟုတ္ဘူး။ App ေတြရဲ႕ အေပၚမွာ Web ရိွဦးမယ္။ Balancer က Web ရဲ႕ အေပၚမွာရိွရမယ္။ အဲဒီလုိထားၾကတယ္။

ဒုတိယတစ္ခု သတိထားရမွာက session ကို share ပါျပီတဲ႔။ session ထဲကို ထည္႕လုိက္တဲ႔ bean ေတြက serializable ျဖစ္ရမယ္။ အဲဒါမွမဟုတ္ရင္ အဆင္မေျပဘူး။ Clustered Env မွာ Serialized မလုပ္ထားတဲ႔ object ေတြ ဒြတ္ခေရာက္ကုန္မယ္။ Good Practice ကေတာ႔ Object မွန္သမွ် Base object တစ္ခုကို extends လုပ္ခိုင္းထားျပီး၊ အဲဒီ base Object ကို serializable interface implements လုပ္လုိက္ရင္ ေနာက္လာေနာက္သားေတြ စိတ္ေအးရတယ္။

ေနာက္တစ္ခုကေတာ႔ ဂြစာေတြ။ third party plug-in ေတြက တစ္ခ်က္တစ္ခ်က္ serialized လုပ္လုိ႕မရတာရိွတယ္။ အဲဒီ lib ေတြပါလာရင္ ေစာေစာစီးစီး ေျပာင္းသံုးလုိ႕ရတုန္း ေျပာင္းသံုးထားလုိက္။မဟုတ္ရင္ ေနာက္မွာ ဒုကၡေသခ်ာေပါက္ေပးလိမ္႔မယ္။

အခုလက္ရိွလုပ္ေနတဲ႔ project အေဟာင္းတစ္ခုမွာ user ကို active ျဖစ္ေနလား၊ မျဖစ္ေနလားကို log-in လုပ္ကတည္းက user ID နဲ႕ session ID ကို persist လုပ္ထားလုိက္ျပီး၊ ျပန္ျပန္စစ္တာမ်ိဳး။ ဆာဗာတစ္လံုးထဲဆိုရင္ ဘာမွမျဖစ္ဘူး။ Load Balancer ကို sticky session လုပ္ထားရင္လည္း အဆင္ေျပတယ္။(သို႕ေသာ္ မေကာင္းဘူး။ std: အရလည္း မလုပ္သင္႔တာေတြရိွတယ္။) session ID ကို ျပန္သံုးတဲ႔အခါမွာ session.getSessionID() method နဲ႕သံုးထားတာေတြ႕တယ္။ အဲဒီမွာ ျပႆနာအၾကီးၾကီးရိွတယ္။ cluster ေတြမွာ session ထဲမွာ သိမ္းထားတဲ႔ Java Object ေတြကို replicate လုပ္တာမွန္ေပမယ္႔၊ session ID ႏွစ္ခုဟာ somehow identical ျဖစ္မေနတာေတြ႕တယ္။ အဲဒီမွာ logical error ျဖစ္ကုန္ျပီး၊ users မွန္သမွ် session timeout ၾကေလသတည္းျဖစ္ကုန္တယ္။ အရင္က အလုပ္မလုပ္တဲ႔ load balancer က သူ႕ဟာသူ ၂ ႏွစ္ေလာက္ပ်က္ေနတုန္းက အေကာင္းပဲ။ သူအလုပ္စလုပ္တာနဲ႕ အဲဒီျပႆနာေပၚလာတယ္။ ေနာက္ေတာ႔ session ID ကို user Obj ထဲေပါင္းထည္႕ထားျပီး အဲဒီ user Obj ကို session ထဲျပန္ထည္႕ထားလုိက္မွေအးသြားတယ္။ Obj ေတြက cluster မွာ replicate-if-cluster ဆိုတဲ႔ parameter on ထားလုိက္ရင္ အဆင္ေျပတယ္။ weblogic.xml မွာျပင္ရတယ္။

အခုကိစၥေတြဟာ ဖတ္ထားရင္ လြယ္လြယ္သိတယ္။ ကုိယ္တုိင္ၾကံဳမွဆုိရင္ ရြာလည္တတ္တယ္။ အထူးသျဖင္႔ Production Environment လိုမ်ိဳး Clustered Env မရိွရင္သာေတာင္ခက္တယ္။ အဲဒီ Setup Local မွာလုပ္တာကိုေတာ႔ ေနာက္ထပ္ post တစ္ခုမွာ ေရးလုိက္ပါဦးမယ္။

Regards,
Zero

Ref:http://docs.oracle.com/cd/E13222_01/wls/docs103/webapp/weblogic_xml.html#wp1071982




Thursday, March 20, 2014

SQLPLUS Notes

SQLPLUS Notes

1.Spool file ထုတ္တဲ႔အခါမွာ ေနာက္မွာ space ေတြ အရွည္ၾကီးပါေနတတ္တယ္။
အဲဒီလိုပါေနရင္ ဖုိင္ size ဟာ မလုိအပ္ဘဲသိပ္ရွည္လာတယ္။ အဲဒါဆိုရင္ Trimspool ကို On လုိက္ရင္ ျငိမ္းပါတယ္။ မဟုတ္ရင္ေတာ႔ ဖြင္႔မရေအာင္ၾကီးတဲ႔ဖုိင္ေတြျဖစ္လာမယ္။ procedure ေတြcompare လုပ္တဲ႔အခါ file size သိပ္ၾကီးေနတာဟာ အာရံုေနာက္တယ္။

Set Trimspool on ၾကပါ။

2. Database က Date Format က Oracle မွာ ပံုမွန္အားျဖင္႔ DD-MON-RR ပံုစံျပတယ္။ ကိုယ္႔စိတ္ၾကိဳက္ေျပာင္းခ်င္ရင္ to_char(sample_date,'DD-MON-YYYY') ဆိုျပီး တစ္ခုစီလုိက္ေျပာင္းေနရတာ အာရံုေနာက္တယ္။ column အခု တစ္ရာေလာက္ေျပာင္းရရင္ စိတ္ညစ္စရာၾကီး။ အဲဒါမ်ိဳးျဖစ္ရင္ Spool file ထုတ္တဲ႔အခါမွာ

ALTER SESSION SET nls_date_format = 'DD-MON-YYYY'; လုပ္ထားလုိက္လုိ႕ရပါတယ္။
အဲဒါက session မွာ သူ႕ default ရိွေနတဲ႔ nls_date_format ကို ကိုယ္႔စိတ္ၾကိဳက္ change လို႕ရသြားေစပါလိမ္႔မယ္။

3.Requirement  တစ္ခုက ေတာ္ေတာ္ရယ္စရာေကာင္းတယ္။ Spool file ထုတ္တဲ႔အခါမွာ Column name က repetitive ျဖစ္ပါတယ္။ အဲဒါကိုေဖ်ာက္ခ်င္တာပါ။ Linesize ကလည္း ၅ေသာင္းလား၊ ၆ေသာင္းလားအထိပဲရပါတယ္။ အဲဒါေက်ာ္သြားရင္ အလုပ္မလုပ္ေတာ႔ဘူး။ Production မွာရိွတဲ႔ records က သိန္းနဲ႕၊သန္းနဲ႕ျဖစ္ေနတာဆိုေတာ႔ column name repetitive မျဖစ္ေအာင္ Line Size ကို 0 ထားျပီး Column Name ကို Prompt နဲ႕ ကိုယ္႔ဟာကိုယ္ ေရးလုိက္ရပါတယ္။ Forum ေတြဖတ္ၾကည္႕ရင္ အဲဒီလို ကိစၥေတြလူမ်ားေတြ ေတြ႕ျပီးသားျဖစ္ေနတာဖတ္ရပါတယ္။ ကိုယ္တုိင္ၾကံဳေတာ႔လည္း အသံုးဝင္သြားတာပါပဲ။

ႊRegards,
Zero