AsynchronousContext এবং তার মেথডের ব্যবহার

Servlet এর জন্য Asynchronous Processing - সার্ভলেটস (Servlets) - Java Technologies

306

Java Servlets-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো অ্যাসিনক্রোনাস প্রসেসিং, যা AsynchronousContext এর মাধ্যমে পরিচালিত হয়। এটি Servlet 3.0 থেকে চালু হয়েছে এবং একটি Servlet-এ দীর্ঘ-চলমান কাজগুলির জন্য খুবই কার্যকর।

AsynchronousContext কী?

AsynchronousContext এমন একটি ইন্টারফেস যা সার্ভলেট অ্যাসিনক্রোনাস প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি সার্ভলেটের রিকোয়েস্ট এবং রেসপন্স প্রসেসিং আলাদা থ্রেডে সরিয়ে নেয়, ফলে সার্ভার ব্লকিং এড়ায় এবং কার্যকারিতা বাড়ায়।

AsynchronousContext মেথডসমূহ এবং তাদের ব্যবহার

নিম্নে AsynchronousContext এর গুরুত্বপূর্ণ মেথডসমূহ এবং তাদের ব্যবহার ব্যাখ্যা করা হলো:

1. start(Runnable run)

  • একটি নতুন থ্রেডে কোড চালানোর জন্য ব্যবহৃত হয়।
  • উদাহরণ:

    asyncContext.start(() -> {
        try {
            // কিছু দীর্ঘ-চলমান কাজ
            Thread.sleep(5000);
            asyncContext.getResponse().getWriter().write("Async processing completed!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            asyncContext.complete(); // কাজ শেষে সম্পূর্ণ করা
        }
    });
    

2. dispatch() এবং dispatch(String path)

  • অ্যাসিনক্রোনাস কাজ সম্পন্ন হওয়ার পরে রিকোয়েস্টটি অন্য সার্ভলেট বা JSP-তে ফরোয়ার্ড করতে ব্যবহৃত হয়।
  • উদাহরণ:

    asyncContext.dispatch("/result.jsp");
    

3. complete()

  • অ্যাসিনক্রোনাস প্রসেসিং শেষ করে। এটি ব্যবহার না করলে রিকোয়েস্ট অপারেশন বন্ধ হবে না।
  • উদাহরণ:

    asyncContext.complete();
    

4. getRequest() এবং getResponse()

  • রিকোয়েস্ট এবং রেসপন্স অবজেক্ট ফেরত দেয়। এই অবজেক্টগুলি অ্যাসিনক্রোনাস প্রসেসিং চলাকালে ব্যবহৃত হয়।
  • উদাহরণ:

    HttpServletRequest req = (HttpServletRequest) asyncContext.getRequest();
    HttpServletResponse res = (HttpServletResponse) asyncContext.getResponse();
    

5. setTimeout(long timeout)

  • টাইমআউট সেট করে, যা অ্যাসিনক্রোনাস প্রসেসিং সম্পন্ন হতে সময় নেবে।
  • উদাহরণ:

    asyncContext.setTimeout(10000); // ১০ সেকেন্ড
    

6. addListener(AsyncListener listener)

  • অ্যাসিনক্রোনাস প্রসেসিংয়ের বিভিন্ন ইভেন্ট (যেমন, টাইমআউট, সম্পূর্ণ) হ্যান্ডেল করার জন্য লিসেনার যোগ করা হয়।
  • উদাহরণ:

    asyncContext.addListener(new AsyncListener() {
        @Override
        public void onComplete(AsyncEvent event) throws IOException {
            System.out.println("Async process completed");
        }
    
        @Override
        public void onTimeout(AsyncEvent event) throws IOException {
            System.out.println("Async process timed out");
        }
    
        @Override
        public void onError(AsyncEvent event) throws IOException {
            System.out.println("Error occurred in async process");
        }
    
        @Override
        public void onStartAsync(AsyncEvent event) throws IOException {
            System.out.println("Async process started");
        }
    });
    

অ্যাসিনক্রোনাস প্রসেসিং-এর উদাহরণ

import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/asyncServlet", asyncSupported = true)
public class AsyncServletExample extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // অ্যাসিনক্রোনাস প্রসেসিং শুরু
        AsyncContext asyncContext = request.startAsync();

        asyncContext.setTimeout(5000); // টাইমআউট সেট (মিলিসেকেন্ডে)

        asyncContext.start(() -> {
            try {
                // দীর্ঘ কাজ
                Thread.sleep(3000);
                asyncContext.getResponse().getWriter().write("Async Task Completed!");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                asyncContext.complete(); // কাজ শেষে সম্পন্ন করা
            }
        });
    }
}

কেন AsynchronousContext গুরুত্বপূর্ণ?

  • দীর্ঘ-চলমান কাজ (যেমন, ডেটাবেস অপারেশন, থার্ড-পার্টি API কল) সম্পাদনের সময় সার্ভলেট থ্রেড মুক্ত রাখতে সাহায্য করে।
  • থ্রেড ব্যবহারে কার্যকারিতা বাড়ায় এবং সার্ভারের রেসপন্স টাইম উন্নত করে।

এইভাবে, AsynchronousContext এর ব্যবহার বড় অ্যাপ্লিকেশনগুলির কার্যকারিতা এবং স্কেলেবিলিটি নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...