Timer Service হল একটি সুবিধা যা Jakarta EE বা EJB (Enterprise JavaBeans) প্ল্যাটফর্মে ব্যবহৃত হয়, যা একটি নির্দিষ্ট সময় বা নির্দিষ্ট সময় অন্তর কার্যকরী টাস্কগুলো (scheduled tasks) পরিচালনা করতে সাহায্য করে। এটি বিশেষভাবে ব্যবহৃত হয় যখন অ্যাপ্লিকেশনের মধ্যে কিছু নির্দিষ্ট সময় পর পর কাজ করা দরকার, যেমন ডেটা প্রক্রিয়া, লগ ফাইল পরিস্কার করা, কিংবা অন্যান্য ব্যাকগ্রাউন্ড টাস্ক।
Jakarta EE-তে Timer Service ব্যবহৃত হয় @Timeout অ্যানোটেশনসহ। এটি আপনাকে scheduled tasks তৈরি করতে এবং মেথডগুলিকে নির্দিষ্ট সময় অন্তর চালাতে সহায়তা করে।
এখানে Timer Service এর real-world example এবং scheduled tasks এর বাস্তব উদাহরণ দেওয়া হলো।
Timer Service এর ধারণা:
Timer Service আপনাকে কিছু নির্দিষ্ট কাজকে নির্দিষ্ট সময় অন্তর বা নির্দিষ্ট সময় পরে চালানোর সুযোগ দেয়। Timer Service ব্যবহার করে আপনি:
- Scheduled tasks তৈরি করতে পারেন, যেগুলি নির্দিষ্ট সময়ের পর বা নির্দিষ্ট ইন্টারভাল পরে চালানো হবে।
- Asynchronous tasks চালাতে পারেন যা অ্যাপ্লিকেশন থ্রেডের বাইরে চলে।
- Timers কে programmatically তৈরি ও কনফিগার করতে পারেন।
Timer Service-এ কাজ করতে, @Timeout অ্যানোটেশন এবং Timer API ব্যবহার করা হয়।
EJB Timer Service উদাহরণ:
ধরা যাক, আমাদের একটি সিস্টেমে প্রতি ৫ মিনিট পর পর কিছু ডেটাবেস ক্লিনআপ টাস্ক চলানোর প্রয়োজন। এটি করার জন্য আমরা EJB এর Timer Service ব্যবহার করব।
১. Timer Service ব্যবহারের জন্য Stateful Session Bean:
Stateful Session Bean এর মধ্যে আমরা Timer Service কনফিগার করব, যা একটি নির্দিষ্ট সময় অন্তর টাস্ক চালাবে।
Timer Service Bean উদাহরণ:
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Timer;
import javax.ejb.Timeout;
@Singleton
public class CleanupService {
// This method will be executed every 5 minutes
@Schedule(hour = "*", minute = "*/5", persistent = false)
public void performCleanup() {
System.out.println("Performing cleanup task at: " + System.currentTimeMillis());
// Here you can add your logic to clean up resources like old data in database, etc.
}
// Timeout method (alternative to @Schedule) to handle the timer manually
@Timeout
public void handleTimeout(Timer timer) {
System.out.println("Timer triggered at: " + System.currentTimeMillis());
// Perform some action when the timer goes off
}
}
কোডের ব্যাখ্যা:
- @Singleton: এটি একটি Singleton EJB যা পুরো অ্যাপ্লিকেশনজুড়ে একটিমাত্র ইনস্ট্যান্স থাকবে।
- @Schedule: এই অ্যানোটেশনটি নির্দিষ্ট সময় পর পর একটি মেথড চালাতে ব্যবহৃত হয়। উদাহরণস্বরূপ, এখানে
*/5মিনিটের জন্য সিডিউল করা হয়েছে, অর্থাৎ প্রতি ৫ মিনিট পর পর এই মেথডটি চালানো হবে। - performCleanup(): এই মেথডটি প্রতি ৫ মিনিট পর পর ডেটাবেসের পুরোনো ডেটা বা অন্যান্য কাজগুলো পরিস্কার করার জন্য কার্যকর হবে।
- @Timeout: এই অ্যানোটেশনটি
TimerAPI এর মাধ্যমে নির্দিষ্ট timeout event কে হ্যান্ডেল করার জন্য ব্যবহার করা হয়। এটি manual timer setup এর জন্য ব্যবহৃত হয়, যখন আপনি প্রোগ্রাম্যাটিকভাবে টাইমার সেট করেন।
২. Timer Service-এ Timer তৈরি করা (Programmatically):
আপনি চাইলে প্রোগ্রাম্যাটিকভাবে Timer তৈরি করতে পারেন, যাতে আপনি নিজে টাইমার কনফিগার এবং ম্যানেজ করতে পারেন।
import javax.ejb.EJB;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Timer;
import javax.ejb.TimerService;
@Singleton
public class TimerExample {
@EJB
private TimerService timerService;
// Method to programmatically create a timer
public void createTimer() {
// Create a timer that will execute after 10 seconds
timerService.createTimer(10000, "This is a custom message for the timer.");
}
// Timeout method triggered when the timer goes off
@Timeout
public void handleTimeout(Timer timer) {
System.out.println("Timer triggered: " + timer.getInfo());
// Handle the timeout event here
}
}
কোডের ব্যাখ্যা:
- TimerService: এখানে
TimerServiceইনস্ট্যান্স ব্যবহার করা হয়েছে, যা Timer তৈরি করতে সাহায্য করে। - createTimer(): এই মেথডে, আমরা একটি টাইমার তৈরি করেছি যা ১০ সেকেন্ড পরে @Timeout মেথডটি কল করবে।
- handleTimeout(): টাইমারটি যখন চলে আসবে, তখন @Timeout অ্যানোটেশন যুক্ত মেথডটি কার্যকর হবে এবং সেই সময় সংশ্লিষ্ট লজিক প্রক্রিয়া করবে।
3. Timer Service Configuration in ejb-jar.xml:
ejb-jar.xml কনফিগারেশন ফাইলেও Timer Service এর বিভিন্ন সেটিংস কনফিগার করা যেতে পারে। তবে EJB 3.1 এবং এর পরবর্তী সংস্করণে, Timer Service প্রোগ্রাম্যাটিকালি এবং অ্যানোটেশন ব্যবহার করে কনফিগার করা হয়, এবং ejb-jar.xml ফাইলের মাধ্যমে অতিরিক্ত কনফিগারেশনের প্রয়োজন কমেছে।
<enterprise-beans>
<session>
<ejb-name>CleanupService</ejb-name>
<session-type>Stateless</session-type>
<timer-service>true</timer-service>
</session>
</enterprise-beans>
এখানে timer-service ট্যাগ দ্বারা টাইমার সার্ভিসটি সক্ষম করা হচ্ছে।
Timer Service এর কিছু কার্যকরী ব্যবহার:
- Periodically Cleanup:
- পুরোনো ডেটা ডিলিট করা বা সিস্টেম রিসোর্স (যেমন লগ ফাইল) পরিস্কার করা।
- Scheduled Reports:
- নির্দিষ্ট সময় অন্তর রিপোর্ট তৈরি করা বা ডাটা প্রক্রিয়া করা।
- Send Notifications:
- নির্দিষ্ট সময় পর পর ব্যবহারকারীকে ই-মেইল বা অন্যান্য নোটিফিকেশন পাঠানো।
- Trigger Backup:
- সার্ভারের ব্যাকআপ করা, ডাটাবেসের ব্যাকআপ নেওয়া বা অন্য কোন ব্যাকগ্রাউন্ড কাজ।
সারাংশ:
Timer Service হল Jakarta EE বা EJB প্ল্যাটফর্মে scheduled tasks বা নির্দিষ্ট সময় পর পর কাজ সম্পাদন করার জন্য ব্যবহৃত একটি শক্তিশালী ফিচার। এটি @Schedule এবং @Timeout অ্যানোটেশন ব্যবহার করে স্বয়ংক্রিয়ভাবে টাইমার পরিচালনা করে এবং TimerService ব্যবহার করে প্রোগ্রাম্যাটিক্যালি টাইমার তৈরি করা যায়। EJB-তে Timer Service ব্যবহারের মাধ্যমে আপনি ব্যাকগ্রাউন্ড টাস্কগুলো সঠিক সময়ে এবং অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করতে পারবেন।
Read more