EJB (Enterprise JavaBeans) এ @Schedule এবং @Timeout Annotations দুটি অত্যন্ত গুরুত্বপূর্ণ এবং কার্যকরী বৈশিষ্ট্য, যা টাইমার ইভেন্ট (Timer Events) পরিচালনা করতে ব্যবহৃত হয়। EJB এর মাধ্যমে আপনি নির্দিষ্ট সময়ে, বা নির্দিষ্ট সময়কাল পর, কোন বিশেষ কাজ বা মেথড রান করার জন্য Timer Service ব্যবহার করতে পারেন। এর মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস টাস্ক বা ডেলayed টাস্ক করতে সক্ষম হন।
এখানে @Schedule এবং @Timeout Annotations ব্যবহার করে Timer Events পরিচালনা করার প্রক্রিয়া বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
1. @Schedule Annotation
@Schedule annotation ব্যবহৃত হয় EJB এর মধ্যে নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়পর মেথড রান করতে। এটি সিস্টেমের নির্দিষ্ট সময়সূচির জন্য timer events তৈরি করতে সাহায্য করে। EJB কন্টেইনার এই টাইমার ইভেন্টগুলিকে পরিচালনা করে এবং নির্ধারিত সময়ে মেথডটিকে কল করে।
@Schedule এর বৈশিষ্ট্য:
- @Schedule annotation দিয়ে মেথডটি সিস্টেমের নির্দিষ্ট সময় বা নির্দিষ্ট ইন্টারভালে রান করানো যায়।
- এটি সাধারণত @Singleton EJB এর সাথে ব্যবহৃত হয়।
- সময়সূচি বা টাইমার ইভেন্টের জন্য cron expression বা time interval নির্ধারণ করা যায়।
@Schedule Syntax:
@Schedule(second = "0", minute = "0", hour = "12", persistent = false)
public void scheduledTask() {
System.out.println("Scheduled task is running at noon every day");
}
এখানে:
second,minute,hour: সিস্টেমের নির্দিষ্ট সময় (কোন সময়ে মেথড রান করবে)।persistent: এটি যদিfalseহয়, তাহলে এটি কন্টেইনারে প্রোগ্রাম বন্ধ হওয়া পর্যন্ত চলবে না।
@Schedule উদাহরণ:
import javax.ejb.Singleton;
import javax.ejb.Schedule;
import javax.ejb.Timeout;
import javax.ejb.Timer;
@Singleton
public class TimerService {
@Schedule(hour = "*", minute = "0", second = "0", persistent = false)
public void hourlyTask() {
System.out.println("This task runs every hour on the hour");
}
@Timeout
public void timeoutMethod(Timer timer) {
System.out.println("Timeout event triggered!");
}
}
এখানে:
hourlyTask(): এই মেথডটি প্রতি ঘণ্টায় একবার রান করবে (প্রতি ঘণ্টার শূন্য মিনিটে)।timeoutMethod(): এই মেথডটি টাইমআউট হওয়ার পরে রান করবে।
2. @Timeout Annotation
@Timeout annotation ব্যবহৃত হয় যখন একটি timer নির্দিষ্ট সময় বা অবস্থার মধ্যে টাইমআউট হয়। এটি একটি singleton EJB মেথডে ব্যবহার করা হয় যা timer events প্রসেস করে।
@Timeout Syntax:
@Timeout
public void onTimeout(Timer timer) {
System.out.println("The timer event has timed out.");
}
@Timeout উদাহরণ:
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
@Singleton
public class TimerService {
@Timeout
public void timeoutEvent(Timer timer) {
System.out.println("Timer event triggered with timeout.");
}
@Schedule(second = "0", minute = "0", hour = "12", persistent = false)
public void scheduleTask() {
System.out.println("This task runs at noon every day.");
}
}
এখানে:
timeoutEvent(): এই মেথডটি যখন টাইমআউট হয়, তখন EJB কন্টেইনার এটি কল করবে। এটি টাইমার ইভেন্টের অবস্থার মধ্যে কোনো নির্দিষ্ট কাজ সম্পন্ন করে।scheduleTask(): এই মেথডটি @Schedule দ্বারা প্রতি দুপুরে নির্দিষ্ট সময় ব্যবধান (১২:০০ PM) এ রান করবে।
@Schedule এবং @Timeout এর মধ্যে পার্থক্য
| Feature | @Schedule | @Timeout |
|---|---|---|
| Purpose | নির্দিষ্ট সময়সূচী অনুযায়ী মেথড চালানো | Timer এর টাইমআউট হলে মেথড চালানো |
| Trigger | নির্দিষ্ট সময় বা সময়সূচী অনুযায়ী ট্রিগার হয় | যখন টাইমার টাইমআউট হয়, তখন ট্রিগার হয় |
| Usage | EJB মেথডের মধ্যে নির্দিষ্ট সময়ে কাজ চালানো | EJB টাইমার শেষ হলে কাজ চালানো |
| Typical Use Case | রুটিন কাজ যেমন ব্যাকগ্রাউন্ড টাস্ক বা ডেটা আপডেট | টাইমার এলার্ট বা টাস্কের ব্যাকগ্রাউন্ড প্রক্রিয়া |
3. Timer Service
EJB Timer Service একটি powerful mechanism যা টাস্ক সিডিউল এবং টাইমআউট ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। Timer এর মাধ্যমে আপনি নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়কাল পর কার্যক্রম করতে পারেন।
Timer তৈরি করা:
EJB TimerService ব্যবহার করে আপনি প্রোগ্রাম্যাটিকভাবে টাইমার তৈরি করতে পারেন।
import javax.ejb.TimerService;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Timer;
@Singleton
public class TimerServiceBean {
@EJB
private TimerService timerService;
public void createTimer() {
long duration = 10000L; // 10 seconds
timerService.createTimer(duration, "Timeout occurred after 10 seconds");
}
@Timeout
public void onTimeout(Timer timer) {
System.out.println("Timer triggered: " + timer.getInfo());
}
}
এখানে:
createTimer(): এই মেথডে একটি টাইমার তৈরি করা হচ্ছে যা 10 সেকেন্ড পর টাইমআউট করবে।onTimeout(): টাইমআউট হওয়ার পর, এই মেথডটি ট্রিগার হবে।
4. Practical Use Case for @Schedule and @Timeout
Use Case: EJB ব্যবহার করে একটি ব্যাকগ্রাউন্ড কাজ সিডিউল করা, যেমন ডেটা সিঙ্ক্রোনাইজেশন। আপনি @Schedule ব্যবহার করে এটি নির্দিষ্ট সময় পরপর করতে পারেন এবং @Timeout ব্যবহার করে টাইমার পুরোপুরি ফাইনালাইজ করতে পারেন।
ব্যাকগ্রাউন্ড টাস্ক সিডিউল উদাহরণ:
import javax.ejb.Singleton;
import javax.ejb.Schedule;
import javax.ejb.Timeout;
import javax.ejb.Timer;
@Singleton
public class BackgroundTaskService {
@Schedule(hour = "*", minute = "*/5", second = "0", persistent = true)
public void scheduleBackgroundTask() {
System.out.println("Scheduled background task running every 5 minutes");
}
@Timeout
public void timeoutHandler(Timer timer) {
System.out.println("Timer triggered after scheduled timeout");
}
}
এখানে:
- @Schedule: প্রতিটি ৫ মিনিট পরপর ব্যাকগ্রাউন্ড টাস্ক রান করবে।
- @Timeout: টাইমআউট ঘটলে, টাইমার ইভেন্টটি ট্রিগার হবে।
সারাংশ
@Schedule এবং @Timeout Annotations EJB কন্টেইনারের মাধ্যমে টাইমার ইভেন্ট পরিচালনা করার জন্য অত্যন্ত শক্তিশালী টুল। @Schedule দিয়ে নির্দিষ্ট সময় বা সময়সূচী অনুযায়ী টাস্ক সিডিউল করা যায়, এবং @Timeout ব্যবহার করে টাইমার টাইমআউট হওয়ার পরে কোনো নির্দিষ্ট মেথড কল করা যায়। এছাড়া TimerService ব্যবহার করে আপনি প্রোগ্রাম্যাটিকভাবে টাইমার তৈরি ও পরিচালনা করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও দক্ষ ও কার্যকরী করে তোলে।
Read more