Monday, October 26, 2009

JAVA Timer Task පිලිබඳ ගැටළුවක්

Java Applications(Standalone/Enterprsie) වලදී අපිට නිතරම අවශ්‍ය වන කාර්යයක් තමයි Scheduling.ඒ කියන්නේ මොකක් හරි task එකක් නියමිත වේලාවක හෝ යම්කිසි සංඛ්යාතයකින් ක්‍රියාත්මක කිරීමට.මේ සඳහා අපිට Java Timer Task හෝ ජනප්‍රිය 3rd party component එකක් වෙන Quartz Scheduling (http://www.opensymphony.com/quartz/)භාවිතා කරන්න පුලුවන්.පහත දැක්වෙන්නේ ඉතාමත් සරල ආකාරයට පැය 4ට වරක් ක්‍රියාත්මක වීම සඳහා ලියන්න පුලුවන් java code block එකක්.

Timer timer1 = new Timer();
timer1.scheduleAtFixedRate(new TimerTask() {

@Override
public void run() {
System.out.println("Timer Task is Running...");
//your task can be done here
}
}, new Date(), 240 * 60 * 1000);

මා විසින් මේ ආකාරයට ක්‍රියාත්මක වෙන timer task එකක් web application එකක අන්තර්ගත කලා.එය හොස්ට් කලාට පසුව ඉතාමත් කාර්යක්ශමව පැය 4ට වරක් හොඳින් ක්‍රියාත්මක වුනා.නමුත් මාස කීපයකින් server log එක බලන විට මෙය ක්‍රියාතමක වීම නතර වී ඇති බව මට නිරීක්ෂණය වුනි.Documentations වල ඉඳලා ගොඩාක් දේවල් නැවත බැලුවා මෙයට හේතු වන්න ඇත්තේ කුමක්ද කියලා.

පසුව දැනගන්න ලැබුනා වෙනත් පුද්ගලයෙක් application එක host කරලා තිබුන server එකේ system time එක වෙනස් කරලා.ඊට පස්සේ එහෙම දෙයක් වුනාම ඒක බලපාන්න ඇති මේ අක්‍රියවීම සඳහා කියලා උපකල්පනය කරලා ඒ ගැන හොයද්දී තමයි මේ link එක හම්බවුනේ.

http://bugs.sun.com/view_bug.do?bug_id=4290274

Sun එකේ කට්ටිය මේක bug එකක් විදියට හඳුනාගෙන තිබුනත් තාම මේක fix කරලා නෑ.මේ bug එක වාර්තා කරලා තියෙන්නේ 1999 දී.

scheduling වලට timer tasks භාවිතා කරන අය මේ ගැටළුව දැනගෙන හිටියොත් හොඳයි කියල හිතලයි මේ සටහන ලිව්වේ.කවුරු හරි කෙනෙක් මේ සම්බන්ධයෙන් මීට පෙර මුහුන දීලා තියේනම් හෝ මේ සඳහා විසඳුමක් තියේනම් comment එකක් දාන්න.

system time එක වෙනස් නොකර සිටීම තමයි විසඳුම කියලානම් කියන්න එපා. :-)

1 comment:

  1. විසඳුමක් නම් නැහැ එත් වටිනා ලිපියක් නිසා සටහනක් දැම්ම. තව java ගැන ලියන්න

    ReplyDelete