EJB (Enterprise JavaBeans) তে @Resource অ্যানোটেশনটি ব্যবহৃত হয় বিভিন্ন ধরনের রিসোর্স যেমন DataSource, ConnectionFactory, EJB Beans, Environment Entries, JMS Queues, Mail Sessions ইত্যাদি ইঞ্জেক্ট করার জন্য। @Resource অ্যানোটেশনটি Dependency Injection (DI) এর মাধ্যমে রিসোর্সগুলিকে EJB ক্লাসের মধ্যে ইনজেক্ট করে, যা কোডকে আরও পরিষ্কার এবং সহজবোধ্য করে তোলে।
EJB তে @Resource ব্যবহার করা মানে হল যে, আপনি আপনার EJB ক্লাসের মধ্যে নির্দিষ্ট রিসোর্স সরাসরি ইনজেক্ট করতে পারবেন এবং এগুলির মান সেট করার জন্য কোন নির্দিষ্ট কনফিগারেশন বা কোডিং করার প্রয়োজন নেই।
@Resource Annotation এর ব্যবহার:
@Resource অ্যানোটেশনটি একটি Java EE স্পেসিফিকেশন যা EJB বা সাধারণভাবে Java EE অ্যাপ্লিকেশনগুলিতে বিভিন্ন রিসোর্সের ইনজেকশন পরিচালনা করে। আপনি @Resource ব্যবহার করে অনেক ধরনের রিসোর্স ইনজেক্ট করতে পারেন, যেমন:
- DataSource (ডেটাবেস কানেকশন)
- EJB Beans
- JMS (Java Message Service)
- Mail Sessions
- Context Parameters
@Resource Annotation Syntax:
@Resource(name="resource-name")
private ResourceType resourceName;
- name: রিসোর্সের নাম।
- resourceType: রিসোর্সের ডাটা টাইপ (যেমন
DataSource,ConnectionFactoryইত্যাদি)।
EJB তে @Resource Annotation এর উদাহরণ
1. DataSource (ডেটাবেস কানেকশন) ইনজেক্ট করা
ধরা যাক, আপনি একটি DataSource রিসোর্স ইনজেক্ট করতে চান, যা ডাটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত হবে। আপনি @Resource অ্যানোটেশন ব্যবহার করে এই কাজটি করতে পারেন।
import javax.ejb.Stateless;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@Stateless
public class CustomerService {
// @Resource ব্যবহার করে DataSource ইনজেক্ট করা
@Resource(name="jdbc/myDataSource")
private DataSource dataSource;
public void getCustomerData() {
try (Connection connection = dataSource.getConnection()) {
// ডেটাবেসে সংযোগ এবং কার্যক্রম
System.out.println("Connected to the database!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
এখানে, @Resource অ্যানোটেশনটি DataSource রিসোর্স ইনজেক্ট করছে, যা ডেটাবেস কানেকশন পরিচালনা করবে। name প্যারামিটারটি JNDI (Java Naming and Directory Interface) লুকআপের জন্য ব্যবহৃত হয় এবং jdbc/myDataSource একটি পূর্বনির্ধারিত JNDI রিসোর্সের নাম।
2. JMS Queue (Java Message Service) ইনজেক্ট করা
আপনি যদি JMS Queue বা Topic ব্যবহার করতে চান, তাহলে @Resource অ্যানোটেশন দিয়ে সহজেই এটি ইনজেক্ট করতে পারেন।
import javax.ejb.Stateless;
import javax.annotation.Resource;
import javax.jms.Queue;
import javax.jms.JMSContext;
import javax.jms.JMSProducer;
@Stateless
public class MessageSenderService {
// @Resource ব্যবহার করে JMS Queue ইনজেক্ট করা
@Resource(name="jms/myQueue")
private Queue myQueue;
@Resource
private JMSContext context;
public void sendMessage(String message) {
JMSProducer producer = context.createProducer();
producer.send(myQueue, message);
System.out.println("Message sent to queue: " + message);
}
}
এখানে, @Resource অ্যানোটেশনটি JMS Queue ইনজেক্ট করছে, যা মেসেজ পাঠানোর জন্য ব্যবহৃত হবে। JMSContext ইনজেক্ট করা হচ্ছে যা মেসেজ সেন্ড এবং রিসিভের জন্য ব্যবহৃত হবে।
3. Mail Session ইনজেক্ট করা
@Resource ব্যবহার করে আপনি Mail Session (ইমেল সেশন) ইনজেক্ট করতে পারেন, যা JavaMail API দিয়ে ইমেল পাঠানোর জন্য ব্যবহৃত হয়।
import javax.ejb.Stateless;
import javax.annotation.Resource;
import javax.mail.Session;
@Stateless
public class EmailService {
// @Resource ব্যবহার করে Mail Session ইনজেক্ট করা
@Resource(name="mail/myMailSession")
private Session mailSession;
public void sendEmail(String to, String subject, String body) {
// ইমেল পাঠানোর কোড
System.out.println("Sending email to: " + to);
}
}
এখানে, @Resource অ্যানোটেশনটি Mail Session ইনজেক্ট করছে, যা JavaMail API ব্যবহারের জন্য প্রয়োজনীয় সেশন তৈরি করবে।
@Resource Annotation এর আরেকটি উদাহরণ:
4. EJB Beans ইনজেক্ট করা
আপনি যদি অন্য একটি EJB Bean ইনজেক্ট করতে চান, তবে @Resource অ্যানোটেশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, একটি Stateless EJB ইনজেক্ট করা হচ্ছে:
import javax.ejb.Stateless;
import javax.ejb.EJB;
@Stateless
public class OrderService {
// @EJB ব্যবহার করে অন্য একটি EJB ইনজেক্ট করা
@EJB
private PaymentService paymentService;
public void processOrder(int orderId) {
// Order প্রক্রিয়া সম্পন্ন করা
paymentService.processPayment(orderId);
}
}
এখানে, @EJB অ্যানোটেশনটি PaymentService EJB ইনজেক্ট করছে, যা OrderService ক্লাসে ব্যবহৃত হচ্ছে।
@Resource এবং @EJB এর মধ্যে পার্থক্য:
- @Resource: এটি সাধারণভাবে Java EE রিসোর্স ইনজেকশন করতে ব্যবহৃত হয়, যেমন DataSource, JMS, MailSession, EJB Beans ইত্যাদি।
- @EJB: এটি শুধুমাত্র EJB Beans ইনজেকশন করার জন্য ব্যবহৃত হয়, এবং এটি সাধারণত অন্য EJB Beans (Stateless, Stateful) ডিপেনডেন্সি ইনজেক্ট করতে ব্যবহৃত হয়।
সারাংশ:
- @Resource অ্যানোটেশনটি EJB বা Java EE অ্যাপ্লিকেশনে বিভিন্ন ধরনের রিসোর্স ইনজেক্ট করতে ব্যবহৃত হয়, যেমন DataSource, JMS Queue, Mail Sessions, এবং EJB Beans।
- Dependency Injection এর মাধ্যমে রিসোর্সগুলো ইনজেক্ট করা হয়, যা কোডের কনফিগারেশন সহজ করে এবং অ্যাপ্লিকেশন ডেভেলপমেন্টে অনেক সুবিধা প্রদান করে।
- @Resource অ্যানোটেশনটি রিসোর্স ইনজেক্ট করার জন্য একটি সাধারণ এবং সরল উপায় প্রদান করে যা JNDI (Java Naming and Directory Interface) থেকে রিসোর্সকে লুকআপ এবং অ্যাক্সেস করতে সহায়ক।
Read more