Skill

EJB Timer Service

ইজেবি (EJB) - Java Technologies

316

EJB Timer Service হল Java EE (এখন Jakarta EE) এর একটি গুরুত্বপূর্ণ সুবিধা যা টাইম-ড্রিভেন বা নির্দিষ্ট সময়ের পরে এক্সিকিউট হওয়া এমন কার্যাবলীর জন্য ব্যবহৃত হয়। এটি EJB (Enterprise JavaBeans) কন্টেইনার দ্বারা পরিচালিত হয় এবং ডেভেলপারদের নির্দিষ্ট সময় পর (বা নির্দিষ্ট সময় অনুসারে) অটোমেটেড কাজের জন্য সিস্টেম তৈরি করতে সহায়তা করে।

EJB Timer Service সাধারণত বিভিন্ন কাজে ব্যবহৃত হয়, যেমন:

  • নির্দিষ্ট সময় পর কার্যক্রম চালানো।
  • একাধিক সময়ের ব্যবধানে কিছু কাজ এক্সিকিউট করা।
  • ক্লাস্টারড পরিবেশে নির্দিষ্ট সময় অন্তর কাজ করা।

EJB Timer Service এর বৈশিষ্ট্য:

  1. Asynchronous Execution: EJB Timer Service কাজগুলি asynchronously এক্সিকিউট করে, যার মানে এটি আপনার অ্যাপ্লিকেশনের সাধারণ ফ্লো থেকে বিচ্ছিন্নভাবে কাজ করতে পারে। এই টাইমার ইভেন্টগুলি নির্দিষ্ট সময় বা নির্দিষ্ট সময় অন্তর সংঘটিত হতে পারে।
  2. Timers: EJB Timer Service বিভিন্ন ধরণের টাইমার তৈরি করতে সহায়তা করে:
    • Interval Timers: নির্দিষ্ট সময় অন্তর ইভেন্ট এক্সিকিউট করতে ব্যবহৃত হয়।
    • Absolute Timers: নির্দিষ্ট একটি সময় পর ইভেন্ট এক্সিকিউট করতে ব্যবহৃত হয়।
    • Calendar Timers: একটি নির্দিষ্ট ক্যালেন্ডার তারিখ বা সময়ের মধ্যে এক্সিকিউট হতে পারে।
  3. Durability: EJB Timer Service persistent timers সাপোর্ট করে, যার মানে হল যে টাইমার এর স্টেট সিস্টেমের মধ্যে সংরক্ষিত হয় এবং সার্ভার রিস্টার্ট বা পুনরায় চালু হওয়ার পরও টাইমার কাজ করবে।
  4. Automatic Scheduling: EJB Timer Service স্বয়ংক্রিয়ভাবে টাইমার কার্যক্রম সময়মতো সিডিউল করে এবং টাইমার থেকে ইভেন্ট তৈরি করে।
  5. Timer Management: EJB Timer Service কন্টেইনারের মধ্যে টাইমার তৈরি, স্টপ, রিসেট এবং ডিলিট করা যায়।

EJB Timer Service এর ব্যবহার:

EJB Timer Service এর জন্য, @Timeout অ্যানোটেশন ব্যবহার করে নির্দিষ্ট মেথডে টাইমার অ্যাকশন যোগ করা হয়। টাইমার ইভেন্টগুলি সাধারণত EJB Session Bean বা Singleton Bean এর মধ্যে ব্যবহৃত হয়।

EJB Timer Service উদাহরণ:

এখানে একটি সাধারণ Singleton EJB Timer Service এর উদাহরণ দেওয়া হলো, যা প্রতি 5 সেকেন্ড পর একটি কাজ এক্সিকিউট করবে।

Step 1: Timer Service Interface

package com.example.ejb;

import javax.ejb.Local;

@Local
public interface TimerService {
    void startTimer();
    void stopTimer();
}

Step 2: Timer Service Implementation (Singleton Bean)

package com.example.ejb;

import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import java.util.Date;
import javax.inject.Inject;

@Singleton
public class TimerServiceBean implements TimerService {

    @Inject
    private TimerService timerService;

    private Timer timer;

    // Start a timer with a fixed interval (5 seconds)
    @Override
    public void startTimer() {
        // Create a timer with an interval of 5 seconds
        timer = timerService.createTimer(5000, 5000); // Delay and Interval in milliseconds
    }

    // Stop the timer
    @Override
    public void stopTimer() {
        if (timer != null) {
            timer.cancel();
        }
    }

    // This method is invoked by the timer at the specified interval
    @Timeout
    public void onTimeout(Timer timer) {
        System.out.println("Timer triggered at: " + new Date());
    }
}
  • @Singleton: এখানে আমরা Singleton Bean ব্যবহার করেছি যাতে একটি একক ইনস্ট্যান্স থাকে যা পুরো অ্যাপ্লিকেশনজুড়ে শেয়ার করা যাবে।
  • @Timeout: এই অ্যানোটেশন দ্বারা আমরা টাইমার মেথডের জন্য একটি কাস্টম অ্যাকশন নির্ধারণ করেছি, যা প্রতি 5 সেকেন্ড পর এক্সিকিউট হবে।
  • TimerService: এটি EJB কন্টেইনারের টাইমার ব্যবস্থাপনা সিস্টেম। createTimer() মেথডটি টাইমার তৈরি করতে ব্যবহৃত হয়, এবং এটি প্রথম আর্গুমেন্ট হিসেবে একবার শুরু হওয়ার জন্য বিলম্ব (delay) এবং দ্বিতীয় আর্গুমেন্ট হিসেবে বিরতি (interval) নেয়।

Step 3: Using Timer Service

এখন, আপনি TimerServiceBean ব্যবহার করতে পারেন আপনার অ্যাপ্লিকেশন থেকে। উদাহরণস্বরূপ:

package com.example.client;

import javax.naming.Context;
import javax.naming.InitialContext;
import com.example.ejb.TimerService;

public class TimerClient {

    public static void main(String[] args) {
        try {
            // JNDI Lookup to access TimerServiceBean
            Context context = new InitialContext();
            TimerService timerService = (TimerService) context.lookup("java:global/myapp/TimerServiceBean!com.example.ejb.TimerService");

            // Start the timer
            timerService.startTimer();

            // Stop the timer after some time (optional)
            Thread.sleep(20000);  // Wait for 20 seconds
            timerService.stopTimer();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এই উদাহরণে, আমরা টাইমার শুরু করার জন্য startTimer() মেথড কল করেছি এবং ২০ সেকেন্ড পরে stopTimer() মেথড কল করে টাইমার বন্ধ করেছি।


EJB Timer Service এর বৈশিষ্ট্য এবং সুবিধা:

  1. অটোমেটেড সময় নির্ধারণ: EJB Timer Service ব্যবহার করে আপনি সময়ের ভিত্তিতে কিছু কার্যাবলি অটোমেটিকভাবে এক্সিকিউট করতে পারেন, যা সাধারণত যেকোনো সিস্টেম পরিচালনায় অত্যন্ত কার্যকরী।
  2. Persistent Timers: Timer Service persistent হতে পারে, অর্থাৎ সার্ভার রিস্টার্টের পরেও এটি আবার কাজ করবে। এটি EJB কন্টেইনারে স্টোর করা হয় এবং ক্লাস্টারড পরিবেশে একাধিক ইনস্ট্যান্সে ভাগ করা যায়।
  3. Scalability: EJB Timer Service বড় আর্কিটেকচারে ব্যবহৃত হতে পারে যেখানে একাধিক ক্লায়েন্টের জন্য টাইমার ইভেন্ট প্রয়োজন হয়, এবং এটি ক্লাস্টারড সার্ভার সিস্টেমে কাজ করে।
  4. Simplified Task Scheduling: কোডে সঠিকভাবে টাইমার কাজের জন্য কোনো অতিরিক্ত জটিল কনফিগারেশন বা থ্রেড ম্যানেজমেন্টের প্রয়োজন হয় না। এটি শুধু অ্যানোটেশন বা TimerService API ব্যবহার করে সহজেই পরিচালিত হয়।

সারাংশ:

EJB Timer Service হল একটি শক্তিশালী এবং সহজ টুল যা Java EE (Jakarta EE) এর মধ্যে টাইম-ড্রিভেন কার্যাবলী এবং অটোমেটেড কাজ পরিচালনা করতে ব্যবহৃত হয়। এটি আপনার অ্যাপ্লিকেশনকে সঠিক সময়ে নির্দিষ্ট কাজ করতে সাহায্য করে, যেমন প্রতি কিছু সময় অন্তর কাজ করা, বা একটি নির্দিষ্ট সময় পর কোনো কার্যাবলী এক্সিকিউট করা। Singleton EJB এবং @Timeout অ্যানোটেশন ব্যবহার করে সহজেই টাইমার তৈরি করা সম্ভব, এবং EJB TimerService সিস্টেমটি তার অবস্থা সংরক্ষণ করতে সক্ষম।

Content added By

Timer Service হল Java EE (এখন Jakarta EE) একটি গুরুত্বপূর্ণ ফিচার, যা Enterprise JavaBeans (EJB) এর অংশ হিসেবে ব্যবহৃত হয়। Timer Service এর মাধ্যমে আপনি নির্দিষ্ট সময়ে নির্দিষ্ট কার্যাবলী (tasks) চালাতে পারেন। এটি asynchronous প্রক্রিয়াগুলির জন্য উপযোগী, যেখানে আপনি নির্দিষ্ট সময় পরে কোনো কার্যাবলী সম্পাদন করতে চান।

Timer Service কি?

Timer Service হল একটি সার্ভিস যা আপনাকে EJB Beans এর মধ্যে নির্দিষ্ট সময় পরে (বা নির্দিষ্ট সময় অন্তর) কোনো কাজ বা কার্যক্রম চালানোর সুযোগ দেয়। Timer Service মূলত stateless এবং stateful EJB Beans এর মধ্যে সময়-ভিত্তিক কার্যাবলী পরিচালনার জন্য ব্যবহৃত হয়। এটি আপনার এন্টারপ্রাইজ অ্যাপ্লিকেশনকে সাময়িক কাজ (например, প্রতিদিন একাধিক বার প্রক্রিয়া চালানো, ডেলিভারি সময় নির্ধারণ করা, লগ আউট টাইমস সেট করা) সম্পাদন করতে সাহায্য করে।

Timer Service এর বৈশিষ্ট্য:

  1. এডভান্সড শিডিউলিং: Timer Service ব্যবহার করে আপনি নির্দিষ্ট সময়ের পরে একটি কার্য সম্পন্ন করতে পারেন।
  2. ব্যাকগ্রাউন্ড কার্যাবলী: Timer Service ব্যাকগ্রাউন্ডে নির্দিষ্ট সময়ে কার্যগুলি সম্পন্ন করতে সহায়তা করে।
  3. স্টেটফুল এবং স্টেটলেস EJB Beans এর মাধ্যমে টাইমার পরিচালনা করা যায়।

Timer Service ব্যবহার করা:

Timer Service এর মাধ্যমে EJB Beans তে আপনি বিভিন্ন ধরনের টাইমার কাজ করতে পারেন। উদাহরণস্বরূপ, একটি নির্দিষ্ট সময় পর বা নির্দিষ্ট সময় অন্তর কোনো কার্য সম্পন্ন করার জন্য টাইমার সেট করা।

Timer Service এর সাথে EJB ব্যবহার করার ধাপ:

  1. TimerService ইনজেকশন: TimerService কে EJB Bean এর মধ্যে ইনজেক্ট করতে হয়, যা টাইমার সেট করতে এবং সেগুলি পরিচালনা করতে সাহায্য করবে।
  2. Timer সেট করা: TimerService এর মাধ্যমে আপনি @Timeout অ্যানোটেশন ব্যবহার করে একটি মেথডে নির্দিষ্ট সময় পরে কাজ চালানোর জন্য টাইমার সেট করতে পারেন।

Timer Service উদাহরণ (Stateless EJB Bean):

এখানে আমরা একটি Stateless Session Bean তৈরি করব যা নির্দিষ্ট সময় পরে একটি কাজ সম্পন্ন করবে।

Step 1: Timer Service ব্যবহার করে Stateless Session Bean তৈরি করা
import javax.ejb.Stateless;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.annotation.Resource;

@Stateless
public class TimerExampleBean {

    // TimerService ইনজেক্ট করা
    @Resource
    private TimerService timerService;

    public void startTimer() {
        // 5 সেকেন্ড পরে কাজটি সম্পন্ন করতে টাইমার সেট করা
        timerService.createSingleActionTimer(5000, null);
        System.out.println("Timer has been started!");
    }

    // @Timeout অ্যানোটেশন ব্যবহার করে টাইমারকে কার্যকর করা
    @javax.ejb.Timeout
    public void timeoutMethod(Timer timer) {
        System.out.println("Timer has triggered!");
    }
}

এখানে, startTimer মেথডটি টাইমার তৈরি করে যা 5 সেকেন্ড পরে timeoutMethod মেথডটি কল করবে। @Timeout অ্যানোটেশন ব্যবহার করে আপনি টাইমারকে নির্দিষ্ট সময়ে ট্রিগার করতে পারেন।

Step 2: Timer সেটিংস এবং পরিচালনা
  1. createSingleActionTimer: একক টাইমার (যেটি একবার রান হবে) তৈরি করতে ব্যবহৃত হয়। এটি দুটি প্যারামিটার নেয়:
    • টাইমার চলানোর জন্য সময় (মিলিসেকেন্ডে)
    • টাইমার এর জন্য তথ্য (যদি কোনো তথ্য দরকার হয়)
  2. createCalendarTimer: নির্দিষ্ট ক্যালেন্ডার টাইমে টাইমার তৈরি করতে ব্যবহৃত হয়, যেমন নির্দিষ্ট দিনে বা নির্দিষ্ট সময়।
import javax.ejb.TimerConfig;
import javax.ejb.TimerHandle;
import java.util.Calendar;

public void scheduleTimer() {
    // ক্যালেন্ডার টাইমে টাইমার সেট করা (প্রতিদিন ১২:০০ PM)
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 12);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    timerService.createCalendarTimer(calendar.getTime(), new TimerConfig(null, false));
}

এখানে, createCalendarTimer একটি ক্যালেন্ডার টাইম তৈরি করবে যা প্রতিদিন দুপুর ১২:০০ এ কাজ করবে।

Step 3: Timer Expiry Management

একবার টাইমার কার্যকর হওয়ার পর, এটি timeout মেথডটিকে কল করবে। টাইমারটি যদি একাধিকবার ট্রিগার করতে হয়, তাহলে setRepeating() ব্যবহার করা যায়। টাইমার সম্পন্ন হওয়ার পরে আপনি এটিকে কিভাবে পরিচালনা করবেন তা আপনার কোডে উল্লেখ করতে হবে।

// পুনরাবৃত্তির জন্য টাইমার সেট করা
timerService.createCalendarTimer(calendar.getTime(), new TimerConfig(null, true)); // true => repeating timer

এখানে, পুনরাবৃত্তি টাইমারটি একাধিকবার ট্রিগার হবে, যতক্ষণ না এটি বাতিল করা না হয়।


Timer Service এর সুবিধা:

  1. সিম্পল এবং প্রাঙ্কটিকাল: EJB টাইমার সিস্টেমটি সহজেই টাইম-ভিত্তিক কাজ নির্ধারণ এবং চালানোর সুবিধা প্রদান করে।
  2. অ্যাসিঙ্ক্রোনাস প্রসেসিং: Timer Service ব্যবহারের মাধ্যমে আপনি কোডের কোনো অংশকে অবজেক্টের অবস্থা পরিবর্তন না করেই নির্দিষ্ট সময়ে কাজ করতে পাঠাতে পারেন।
  3. ব্যাকগ্রাউন্ড কাজ: এটি ব্যাকগ্রাউন্ড কাজ পরিচালনা করতে সহায়ক, যেমন ডাটাবেস ব্যাকআপ, রিমাইন্ডার ইমেইল পাঠানো, রিপোর্ট জেনারেশন ইত্যাদি।

সারাংশ:

  • EJB Timer Service হল একটি শক্তিশালী ফিচার যা EJB Beans এর মধ্যে সময় নির্ধারণ এবং নির্দিষ্ট সময় পরে কার্য সম্পন্ন করার জন্য ব্যবহৃত হয়।
  • টাইমার ব্যবহার করে আপনি সিঙ্গল এবং ক্যালেন্ডার টাইমার তৈরি করতে পারেন এবং @Timeout অ্যানোটেশন ব্যবহার করে টাইমার কার্যকর করতে পারেন।
  • EJB Timer Service সময়-ভিত্তিক কাজ যেমন ব্যাকগ্রাউন্ড কাজ, সিস্টেম রিমাইন্ডার ইমেইল পাঠানো, বা ডেলিভারি টাইম নির্ধারণ করতে সহায়তা করে।
  • Stateless এবং Stateful EJB Beans উভয়ের জন্য Timer Service ব্যবহার করা সম্ভব, যা সহজে সময় নির্ধারণ করতে সাহায্য করে।
Content added By

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নির্দিষ্ট সময় বা সময়সূচী অনুযায়ী ট্রিগার হয়যখন টাইমার টাইমআউট হয়, তখন ট্রিগার হয়
UsageEJB মেথডের মধ্যে নির্দিষ্ট সময়ে কাজ চালানো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 ব্যবহার করে আপনি প্রোগ্রাম্যাটিকভাবে টাইমার তৈরি ও পরিচালনা করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও দক্ষ ও কার্যকরী করে তোলে।

Content added By

Timer Service হল EJB (Enterprise JavaBeans)-এর একটি ফিচার যা নির্দিষ্ট সময়ে বা নির্দিষ্ট সময় পরপর মেথড কল করার জন্য ব্যবহৃত হয়। এটি Stateless এবং Singleton Beans-এ ব্যবহৃত হতে পারে, যেখানে আপনি ব্যাকগ্রাউন্ড কাজ বা নির্দিষ্ট সময়ের পরে কিছু কার্যক্রম চালাতে পারেন, যেমন ব্যাচ প্রসেসিং বা সময়ভিত্তিক টাস্ক।

এখানে আমরা দেখব Stateless এবং Singleton BeansTimer Service কিভাবে ব্যবহার করা যায় এবং এর উদাহরণ কীভাবে কোডে অন্তর্ভুক্ত করা হয়।


১. Timer Service Overview

Timer Service EJB container দ্বারা পরিচালিত হয় এবং এটি ক্লায়েন্টের অনুরোধ ছাড়াই একটি নির্দিষ্ট সময়ে নির্দিষ্ট মেথড কল করতে সাহায্য করে। TimerService এর সাহায্যে আপনি একটি one-time বা periodic টাইমার তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে নির্দিষ্ট সময়ে মেথড চালাবে।

Timer Service ব্যবহার করার জন্য, EJB Beans (যেমন Stateless অথবা Singleton) এ @Schedule অ্যানোটেশন বা প্রোগ্রামেটিকভাবে টাইমার তৈরি করা যায়।


২. Stateless Bean এ Timer Service ব্যবহার

Stateless Bean গুলি ক্লায়েন্টের সাথে কোনো অবস্থা সংরক্ষণ করে না এবং এর জীবনচক্র খুবই ছোট, একবার একটি মেথড কল করার পর সেটি ধ্বংস হয়ে যায়। তবে, Stateless Session BeanTimer Service ব্যবহার করে আপনি এক বা একাধিক নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়ের পরে মেথড কল করতে পারেন।

Stateless Bean Example:

import javax.ejb.Stateless;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.annotation.Resource;
import javax.ejb.Timeout;

@Stateless
public class MyTimerStatelessBean {

    @Resource
    private TimerService timerService;

    public void startTimer() {
        // One-time timer that triggers after 10 seconds
        timerService.createTimer(10000, "One-time Timer");
    }

    @Timeout
    public void timeoutMethod(Timer timer) {
        // This method will be called when the timer triggers
        System.out.println("Timer triggered at: " + timer.getTime());
    }
}

ব্যাখ্যা:

  • @Stateless: এটি একটি Stateless Session Bean নির্দেশ করে।
  • TimerService: এটি TimerService ইনস্ট্যান্সের মাধ্যমে টাইমার তৈরি এবং পরিচালনা করা হয়।
  • startTimer(): একটি টাইমার তৈরি করে যা ১০ সেকেন্ড পরে ট্রিগার হবে।
  • @Timeout: এই অ্যানোটেশনটি সেই মেথডকে নির্দেশ করে যা টাইমার ট্রিগার হলে কল হবে।

৩. Singleton Bean এ Timer Service ব্যবহার

Singleton Bean হল EJB Beans এর একটি বিশেষ ধরনের যা একটি single instance তৈরি করে এবং পুরো অ্যাপ্লিকেশনে শুধুমাত্র একবার রানের জন্য থাকে। Singleton BeansTimer Service ব্যবহার করে আপনি একাধিক টাইমার সেট করতে পারেন যা নির্দিষ্ট সময়ে অথবা নির্দিষ্ট সময় পরপর কাজ করবে।

Singleton Bean Example:

import javax.ejb.Singleton;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.annotation.Resource;
import javax.ejb.Schedule;

@Singleton
public class MyTimerSingletonBean {

    @Resource
    private TimerService timerService;

    public void startTimers() {
        // Periodic timer that triggers every 30 seconds
        timerService.createTimer(0, 30000, "Periodic Timer");
    }

    @Schedule(hour = "*", minute = "*/1", persistent = false)
    public void scheduledMethod() {
        // This method will be called every minute
        System.out.println("Scheduled method triggered every minute.");
    }

    @Timeout
    public void timeoutMethod(Timer timer) {
        // This method will be called when the timer triggers
        System.out.println("Periodic Timer triggered at: " + timer.getTime());
    }
}

ব্যাখ্যা:

  • @Singleton: এটি Singleton Bean নির্দেশ করে, যার একক ইনস্ট্যান্স অ্যাপ্লিকেশন জুড়ে ব্যবহার হবে।
  • TimerService: এটি TimerService ইনস্ট্যান্সের মাধ্যমে টাইমার তৈরি এবং পরিচালনা করা হয়।
  • @Schedule: এই অ্যানোটেশনটি সময় নির্ধারণ করে, যা নির্দিষ্ট সময়ে নির্দিষ্ট মেথড কল করবে (এখানে প্রতি এক মিনিটে)।
  • @Timeout: এটি টাইমার ট্রিগার হলে কল হবে এমন মেথড।

৪. Timer Service এর বিভিন্ন ধরনের ব্যবহার

Timer Service এর সাহায্যে আপনি বিভিন্ন ধরনের টাইমার তৈরি করতে পারেন:

  • One-time Timer: একবার টাইমার শুরু হলে সেটি একবারই কল করবে। (উপরের উদাহরণে ১০ সেকেন্ড পরে)
  • Periodic Timer: নির্দিষ্ট সময় পরপর মেথড কল করবে। যেমন, প্রতি ৩০ সেকেন্ডে বা প্রতি মিনিটে।
  • Persistent Timer: এটি পুনরায় চালু হওয়ার পরে ডাটাবেসে সংরক্ষিত হবে, এবং EJB Container পুনরায় শুরু হলে এটি পুনরায় চালু হবে।

Persistent Timer Example:

import javax.ejb.Singleton;
import javax.ejb.TimerService;
import javax.annotation.Resource;
import javax.ejb.Schedule;
import javax.ejb.Timeout;
import javax.ejb.Timer;

@Singleton
public class PersistentTimerBean {

    @Resource
    private TimerService timerService;

    public void createPersistentTimer() {
        timerService.createTimer(10000, 20000, "Persistent Timer");
    }

    @Timeout
    public void onTimeout(Timer timer) {
        // This method is called when the timer triggers
        System.out.println("Persistent Timer triggered at: " + timer.getTime());
    }
}

এখানে, createTimer(10000, 20000, "Persistent Timer") প্রথমে ১০ সেকেন্ড পরে শুরু হবে এবং পরবর্তী ২০ সেকেন্ড পর পর পুনরায় ট্রিগার হবে।


৫. Timer Service ব্যবহার করার সুবিধা

  1. Automated Task Scheduling: আপনি কোন কাজকে নির্দিষ্ট সময়ে বা নির্দিষ্ট সময় পরপর অটোমেটিকভাবে সম্পাদন করতে পারেন।
  2. Background Processing: ব্যাকগ্রাউন্ডে নির্দিষ্ট সময়ের পরে কাজ করার জন্য এটি উপকারী। উদাহরণস্বরূপ, ব্যাচ প্রসেসিং বা টাইম-সেন্সিটিভ কাজ।
  3. Asynchronous Operation: Timer Service asynchronousভাবে কাজ করে, তাই এটি সার্ভার বা অ্যাপ্লিকেশন ব্যবহারকারীর সাথে যোগাযোগ না করেও কাজ চালিয়ে যেতে পারে।
  4. Stateful and Stateless Beans এর জন্য উপযোগী: আপনি Stateless এবং Singleton Beans উভয়েই Timer Service ব্যবহার করতে পারেন, তবে Stateful Beans এ Timer ব্যবহার নিষিদ্ধ।

সারাংশ

Timer Service হল একটি শক্তিশালী ফিচার যা Stateless এবং Singleton Beans তে নির্দিষ্ট সময়ে বা নির্দিষ্ট সময় পরপর মেথড কল করার জন্য ব্যবহৃত হয়। এটি ব্যাকগ্রাউন্ড কাজের জন্য উপকারী এবং মেসেজ-চালিত অ্যাপ্লিকেশনগুলির জন্য আদর্শ। Eclipse তে EJB Timer Service কনফিগার করে আপনি একাধিক টাইমার তৈরি এবং পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা বৃদ্ধি করে এবং নির্দিষ্ট সময়ে কার্যক্রম সম্পন্ন করতে সাহায্য করে।

Content added By

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 ব্যবহার করে আপনি:

  1. Scheduled tasks তৈরি করতে পারেন, যেগুলি নির্দিষ্ট সময়ের পর বা নির্দিষ্ট ইন্টারভাল পরে চালানো হবে।
  2. Asynchronous tasks চালাতে পারেন যা অ্যাপ্লিকেশন থ্রেডের বাইরে চলে।
  3. 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
    }
}

কোডের ব্যাখ্যা:

  1. @Singleton: এটি একটি Singleton EJB যা পুরো অ্যাপ্লিকেশনজুড়ে একটিমাত্র ইনস্ট্যান্স থাকবে।
  2. @Schedule: এই অ্যানোটেশনটি নির্দিষ্ট সময় পর পর একটি মেথড চালাতে ব্যবহৃত হয়। উদাহরণস্বরূপ, এখানে */5 মিনিটের জন্য সিডিউল করা হয়েছে, অর্থাৎ প্রতি ৫ মিনিট পর পর এই মেথডটি চালানো হবে।
  3. performCleanup(): এই মেথডটি প্রতি ৫ মিনিট পর পর ডেটাবেসের পুরোনো ডেটা বা অন্যান্য কাজগুলো পরিস্কার করার জন্য কার্যকর হবে।
  4. @Timeout: এই অ্যানোটেশনটি Timer API এর মাধ্যমে নির্দিষ্ট 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
    }
}

কোডের ব্যাখ্যা:

  1. TimerService: এখানে TimerService ইনস্ট্যান্স ব্যবহার করা হয়েছে, যা Timer তৈরি করতে সাহায্য করে।
  2. createTimer(): এই মেথডে, আমরা একটি টাইমার তৈরি করেছি যা ১০ সেকেন্ড পরে @Timeout মেথডটি কল করবে।
  3. 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 এর কিছু কার্যকরী ব্যবহার:

  1. Periodically Cleanup:
    • পুরোনো ডেটা ডিলিট করা বা সিস্টেম রিসোর্স (যেমন লগ ফাইল) পরিস্কার করা।
  2. Scheduled Reports:
    • নির্দিষ্ট সময় অন্তর রিপোর্ট তৈরি করা বা ডাটা প্রক্রিয়া করা।
  3. Send Notifications:
    • নির্দিষ্ট সময় পর পর ব্যবহারকারীকে ই-মেইল বা অন্যান্য নোটিফিকেশন পাঠানো।
  4. Trigger Backup:
    • সার্ভারের ব্যাকআপ করা, ডাটাবেসের ব্যাকআপ নেওয়া বা অন্য কোন ব্যাকগ্রাউন্ড কাজ।

সারাংশ:

Timer Service হল Jakarta EE বা EJB প্ল্যাটফর্মে scheduled tasks বা নির্দিষ্ট সময় পর পর কাজ সম্পাদন করার জন্য ব্যবহৃত একটি শক্তিশালী ফিচার। এটি @Schedule এবং @Timeout অ্যানোটেশন ব্যবহার করে স্বয়ংক্রিয়ভাবে টাইমার পরিচালনা করে এবং TimerService ব্যবহার করে প্রোগ্রাম্যাটিক্যালি টাইমার তৈরি করা যায়। EJB-তে Timer Service ব্যবহারের মাধ্যমে আপনি ব্যাকগ্রাউন্ড টাস্কগুলো সঠিক সময়ে এবং অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...