সবার আগে আমাকে কিছু স্পষ্টতা দিন:
পরিচালিত শিমের সংজ্ঞা : সাধারণত একটি পরিচালিত শিম এমন একটি বস্তু যা এর জীবনচক্র (নির্মাণ, ধ্বংস ইত্যাদি) একটি ধারক দ্বারা পরিচালিত হয়।
জাভা ইতে আমাদের কাছে অনেকগুলি ধারক রয়েছে যা তাদের বস্তুর জীবনচক্র পরিচালনা করে, যেমন জেএসএফ ধারক, ইজেবি ধারক, সিডিআই ধারক, সার্ভলেট ধারক ইত্যাদি manage
এই সমস্ত কন্টেইনারগুলি স্বতন্ত্র ধরনের কাজ করে, তারা অ্যাপ্লিকেশন সার্ভার ইনিশিয়ালেশন বুট করে এবং স্থাপনার সময় জার, ইজবি-জার, যুদ্ধ এবং কানের ফাইলগুলি সহ সমস্ত নিদর্শনগুলির ক্লাস স্ক্যান করে এবং সেগুলি সম্পর্কে কিছু মেটাডেটা সংগ্রহ করে সংরক্ষণ করে, তারপরে যখন আপনার কোনও বস্তুর প্রয়োজন হয় রানটাইমের সময় একটি ক্লাসের তারা আপনাকে সেই ক্লাসগুলির উদাহরণ দেবে এবং কাজ শেষ করার পরে তারা তাদের ধ্বংস করবে।
সুতরাং আমরা বলতে পারি যে আমাদের রয়েছে:
- জেএসএফ পরিচালিত মটরশুটি
- সিডিআই মটরশুটি পরিচালিত
- EJB মটরশুটি পরিচালিত
- এমনকি সার্লেলেটগুলি মটরশুটিই পরিচালিত হয় কারণ সেগুলি একটি ধারক দ্বারা তাত্ক্ষণিকভাবে এবং ধ্বংস হয়, যা একটি সার্লেট পাত্রে।
সুতরাং আপনি যখন পরিচালিত বিন শব্দটি দেখেন তখন আপনার প্রসঙ্গ বা প্রকারের বিষয়ে জিজ্ঞাসা করা উচিত ((জেএসএফ, সিডিআই, ইজেবি, ইত্যাদি)
তারপরে আপনি জিজ্ঞাসা করতে পারেন যে আমাদের কাছে এই কন্টেনারগুলির অনেকগুলি কেন রয়েছে: আফাইক, জাভা ই ই ছেলেরা নির্ভরতা ইনজেকশন কাঠামো পেতে চেয়েছিল তবে তারা ভবিষ্যতে প্রয়োজনীয়তাগুলি ভবিষ্যদ্বাণী করতে না পারায় তারা একটি নির্দিষ্টকরণে সমস্ত প্রয়োজনীয়তা সংগ্রহ করতে পারেনি এবং তারপরে তারা EJB 1.0 তৈরি করে এবং ২.০ এবং তারপরে ৩.০ এবং এখন ৩.১ তবে ইজেবির লক্ষ্যমাত্র ছিল কেবলমাত্র কিছু প্রয়োজনীয়তার জন্য (লেনদেন, বিতরণ উপাদানগুলির মডেল ইত্যাদি)।
একই সময়ে (সমান্তরালভাবে) তারা বুঝতে পেরেছিল যে তাদেরও জেএসএফ সমর্থন করতে হবে, তারপরে তারা জেএসএফ পরিচালিত মটরশুটি এবং জেএসএফ শিমের জন্য অন্য একটি ধারক তৈরি করেছিল এবং তারা এটিকে একটি পরিপক্ক ডিআই কনটেইনার হিসাবে বিবেচনা করেছিল, কিন্তু এখনও এটি সম্পূর্ণ এবং পরিপক্ক ধারক ছিল না।
এর পরে গ্যাভিন কিং এবং আরও কিছু চমৎকার লোক;) সিডিআই তৈরি করেছেন যা আমি দেখেছি যে সবচেয়ে পরিপক্ক ডিআই কনটেইনার। সিডিআই (সিউম 2, গুইস এবং স্প্রিং দ্বারা অনুপ্রাণিত) জেএসএফ এবং ইজেবি এবং পোজো ইনজেকশন, প্রযোজক পদ্ধতি, ইন্টারসেপ্টর, সাজসজ্জার, ইন্টিগ্রেশন এসপিআই, খুব নমনীয় ইত্যাদি ইত্যাদির মধ্যে শূন্যস্থান পূরণ করার জন্য তৈরি করা হয়েছিল এবং এটি এমনকি করতে পারে EJB এবং জেএসএফ পরিচালিত মটরশুটিগুলি তখন কী করছে তা আমাদের কাছে কেবল একটি পরিণত এবং শক্তিশালী ডিআই কন্টেইনার থাকতে পারে। তবে কিছু পশ্চাদপদ সামঞ্জস্যতা এবং রাজনৈতিক কারণে জাভা ইই ছেলেরা তাদের ধরে রাখতে চায় !!!
এখানে আপনি এই প্রতিটি ধরণের জন্য পার্থক্যটি খুঁজে পেতে এবং কেসগুলি ব্যবহার করতে পারেন:
জেএসএফ পরিচালিত মটরশুটি, সিডিআই মটরশুটি এবং ইজেবি
জেএসএফ প্রাথমিকভাবে তার নিজস্ব পরিচালিত শিম এবং নির্ভরতা ইনজেকশন প্রক্রিয়া দ্বারা বিকাশ করা হয়েছিল যা জেএসএফ ২.০ এর জন্য এনোটেশন ভিত্তিক মটরশুটি অন্তর্ভুক্ত করার জন্য বাড়ানো হয়েছিল। সিডিআই যখন জাভা ইই 6 এর সাথে প্রকাশিত হয়েছিল তখন এটিকে সেই প্ল্যাটফর্মের জন্য পরিচালিত শিমের কাঠামো হিসাবে বিবেচনা করা হত এবং অবশ্যই ইজেবিগুলি তাদের দশকে পুরনো করেছিল এক দশকেরও বেশি সময় ধরে।
কোনটি ব্যবহার করা উচিত এবং কখন তাদের ব্যবহার করা উচিত তা অবশ্যই সমস্যা।
আসুন সরল, জেএসএফ পরিচালিত মটরশুটি দিয়ে শুরু করা যাক।
জেএসএফ পরিচালিত মটরশুটি
সংক্ষেপে, আপনি যদি জাভা EE 6 এর জন্য বিকাশ করছেন এবং সিডিআই ব্যবহার করছেন তবে সেগুলি ব্যবহার করবেন না। তারা ওয়েব পৃষ্ঠাগুলির জন্য নির্ভরতা ইনজেকশন এবং ব্যাকিং শিমের সংজ্ঞা দেওয়ার জন্য একটি সহজ প্রক্রিয়া সরবরাহ করে তবে তারা সিডিআই মটরশুটির তুলনায় অনেক কম শক্তিশালী।
@javax.faces.bean.ManagedBean
এগুলিকে এনটোটেশন ব্যবহার করে সংজ্ঞায়িত করা যেতে পারে যা একটি alচ্ছিক নাম প্যারামিটার নেয়। এই নামটি জেএসএফ পৃষ্ঠা থেকে শিম রেফারেন্স করতে ব্যবহার করা যেতে পারে।
javax.faces.bean
অনুরোধ, সেশন, অ্যাপ্লিকেশন, দর্শন এবং কাস্টম স্কোপস অন্তর্ভুক্ত প্যাকেজে সংজ্ঞায়িত বিভিন্ন স্কোপের একটি ব্যবহার করে শিমের সাথে স্কোপ প্রয়োগ করা যেতে পারে ।
@ManagedBean(name="someBean")
@RequestScoped
public class SomeBean {
....
....
}
জেএসএফ শিম কোনও ধরণের ম্যানুয়াল কোডিং ব্যতীত অন্য ধরণের বিনের সাথে মিশ্রিত করা যায় না।
সিডিআই বিনস
সিডিআই হ'ল শিম ব্যবস্থাপনা এবং নির্ভরতা ইনজেকশন কাঠামো যা জাভা ইই 6 এর অংশ হিসাবে প্রকাশিত হয়েছিল এবং এতে একটি সম্পূর্ণ, বিস্তৃত পরিচালিত শিমের সুবিধা রয়েছে। সিডিআই মটরশুটি সাধারণ জেএসএফ পরিচালিত মটরশুটি থেকে অনেক বেশি উন্নত এবং নমনীয়। তারা ইন্টারসেপ্টর, কথোপকথনের সুযোগ, ইভেন্টস, টাইপ নিরাপদ ইনজেকশন, সজ্জকার, স্টেরিওটাইপস এবং প্রযোজক পদ্ধতি ব্যবহার করতে পারে।
সিডিআই মটরশুটি স্থাপন করতে, আপনাকে অবশ্যই ক্লাসপথে একটি মেটা-আইএনএফ ফোল্ডারে বিনস.এক্সএমএল নামে একটি ফাইল স্থাপন করতে হবে। একবার আপনি এটি করেন, তারপরে প্যাকেজের প্রতিটি বিন একটি সিডিআই বিন হয়ে যায়। সিডিআইতে প্রচুর বৈশিষ্ট্য রয়েছে, এখানে আচ্ছাদন করার মতো অনেকগুলি বিষয় রয়েছে, তবে জেএসএফ-এর মতো বৈশিষ্ট্যগুলির জন্য দ্রুত রেফারেন্স হিসাবে, আপনি javax.enterprise.context
প্যাকেজটিতে সংজ্ঞায়িত স্কোপের একটি ব্যবহার করে সিডিআই বিনের স্কোপটি সংজ্ঞায়িত করতে পারেন (যথা, অনুরোধ, কথোপকথন) , সেশন এবং অ্যাপ্লিকেশন স্কোপ)। আপনি যদি কোনও জেএসএফ পৃষ্ঠা থেকে সিডিআই বিন ব্যবহার করতে চান তবে javax.inject.Named
টীকাটি ব্যবহার করে এটি একটি নাম দিতে পারেন । অন্য শিমের সাথে একটি শিম ইনজেকশনের জন্য, আপনি javax.inject.Inject
এন্টোটেশন দিয়ে ক্ষেত্রটি বেনিফিট করুন।
@Named("someBean")
@RequestScoped
public class SomeBean {
@Inject
private SomeService someService;
}
উপরোক্ত সংজ্ঞায়িত মত স্বয়ংক্রিয় ইনজেকশনটি কোয়ালিফায়ার ব্যবহারের মাধ্যমে নিয়ন্ত্রণ করা যেতে পারে যা আপনি ইনজেকশন করতে চান এমন নির্দিষ্ট শ্রেণীর সাথে মেলে সহায়তা করতে পারে। আপনার যদি একাধিক অর্থপ্রদানের প্রকার থাকে, তবে এটি অ্যাসিনক্রোনাস কিনা তা আপনি একটি যোগ্যতা যুক্ত করতে পারেন। আপনি যখন @Named
এফটেশনটি একটি বাছাইকারী হিসাবে ব্যবহার করতে পারেন তবে এটি আপনাকে ইলিতে মটরশুটি বের করার জন্য সরবরাহ করা উচিত নয়।
প্রক্সি ব্যবহারের মাধ্যমে সিডিআই মেলানো স্কোপগুলির সাথে মটরশুটির ইঞ্জেকশন পরিচালনা করে। এ কারণে আপনি একটি অনুরোধ স্কোপড শিমকে একটি সেশন স্কোপড শিমের মধ্যে ইনজেকশন করতে পারেন এবং প্রতিটি অনুরোধের জন্য রেফারেন্সটি এখনও বৈধ থাকবে কারণ প্রতিটি অনুরোধের জন্য, প্রক্সিটি অনুরোধ স্কোপড শিমের লাইভ ইভেন্টে পুনরায় সংযোগ স্থাপন করে।
সিডিআইতে ইন্টারসেপ্টর, ইভেন্টগুলি, নতুন কথোপকথনের সুযোগ এবং আরও অনেকগুলি বৈশিষ্ট্যের জন্য সমর্থন রয়েছে যা এটি জেএসএফ পরিচালিত মটরশুটিগুলির তুলনায় আরও ভাল পছন্দ করে তোলে।
EJB
ইজেবিগুলি সিডিআই মটরশুটি প্রাক্কলিত করে এবং কোনও উপায়ে সিডিআই মটরশুটির অনুরূপ এবং অন্যান্য উপায়ে খুব আলাদা। প্রাথমিকভাবে, সিডিআই মটরশুটি এবং ইজেবিগুলির মধ্যে পার্থক্য হ'ল ইজেবিগুলি হ'ল:
- লেনদেনগত
- দূরবর্তী বা স্থানীয়
- সংস্থান মুক্ত রাষ্ট্রীয় মটরশুটি প্যাসিভেট করতে সক্ষম
- টাইমার ব্যবহার করতে সক্ষম
- অ্যাসিক্রোনাস হতে পারে
দুই ধরণের ইজেবিকে রাষ্ট্রহীন এবং রাষ্ট্রীয় বলা হয়। স্টেটলেস ইজেবিগুলিকে থ্রেড নিরাপদ একক-ব্যবহার মটরশুটি হিসাবে ভাবা যেতে পারে যা দুটি ওয়েব অনুরোধের মধ্যে কোনও রাজ্য বজায় রাখে না। রাষ্ট্রীয় ইজেবিগুলি রাষ্ট্র ধরে রাখে এবং এগুলি নিষ্পত্তি না করা অবধি যতক্ষণ প্রয়োজন হয় ততক্ষণ তৈরি করা যায় এবং বসে থাকতে পারে।
একটি ইজেবি সংজ্ঞায়িত করা সহজ, আপনি কেবল ক্লাসে একটি javax.ejb.Stateless
বা javax.ejb.Stateful
টিকা যুক্ত করুন ।
@Stateless
public class BookingService {
public String makeReservation(Item Item, Customer customer) {
...
...
}
}
রাজ্যহীন শিমের অবশ্যই একটি নির্ভরযোগ্য সুযোগ থাকতে হবে যখন একটি রাষ্ট্রীয় অধিবেশন শিমের কোনও সুযোগ থাকতে পারে। ডিফল্টরূপে এগুলি লেনদেন হয় তবে আপনি লেনদেনের বৈশিষ্ট্য টীকাটি ব্যবহার করতে পারেন।
যদিও ইজেবি এবং সিডিআই মটরশুটি বৈশিষ্ট্যের দিক থেকে খুব আলাদা, কোডগুলি তাদের সংহত করার জন্য লিখনগুলি খুব মিল কারণ সিডিআই মটরশুটি ইজেবিতে ইনজেক্ট করা যায় এবং ইজেবিগুলি সিডিআই মটরশুটিতে ইনজেকশন দেওয়া যেতে পারে। একে অপরকে ইনজেকশন দেওয়ার সময় কোনও পার্থক্য করার দরকার নেই। আবার প্রক্সি ব্যবহারের মাধ্যমে বিভিন্ন স্কোপগুলি সিডিআই দ্বারা পরিচালিত হয়। এর একটি ব্যতিক্রম হ'ল সিডিআই দূরবর্তী ইজেবিগুলির ইনজেকশন সমর্থন করে না তবে এটির জন্য একটি সহজ প্রযোজক পদ্ধতি লিখে এটি প্রয়োগ করা যেতে পারে।
javax.inject.Named
টীকা সেইসাথে কোয়ালিফায়ার একটি EJB ব্যবহার করা যেতে পারে একটি ইনজেকশন বিন্দু এটা মেলে।
কখন কোন শিম ব্যবহার করবেন
আপনি কখন কীভাবে শিম ব্যবহার করবেন তা জানবেন? সহজ।
আপনি সার্লেট পাত্রে কাজ না করা এবং টমকটে সিডিআই কাজ করার চেষ্টা করতে না চাইলে জেএসএফ পরিচালিত মটরশুটি কখনই ব্যবহার করবেন না (যদিও এর জন্য কিছু ম্যাভেন আরকিটাইপস রয়েছে তাই কোনও অজুহাত নেই)।
সাধারণভাবে, আপনার সিডিআই মটরশুটি ব্যবহার করা উচিত যদি না আপনার লেনদেনীয় ফাংশনগুলির মতো ইজেবিতে উপলব্ধ উন্নত কার্যকারিতা প্রয়োজন হয়। সিডিআই মটরশুটিকে লেনদেনের জন্য আপনি নিজের ইন্টারসেপ্টারটি লিখতে পারেন তবে এখনকার জন্য, সিডিআই লেনদেনের সিডিআই বিনগুলি পাওয়া না হওয়া পর্যন্ত কোনও ইজেবি ব্যবহার করা সহজ which আপনি যদি কোনও সার্লেট পাত্রে আটকে থাকেন এবং সিডিআই ব্যবহার করছেন, তবে হাতে লিখিত লেনদেন বা আপনার নিজস্ব লেনদেনের ইন্টারসেপ্টর হ'ল ইজেবি ব্যতীত একমাত্র বিকল্প।
আপনার যদি @ViewScoped
সিডিআই ব্যবহার করতে হয় তবে আপনার উচিত
- ব্যবহার স্তর-মুখ বা MyFaces CODI মডিউল। এর মধ্যে একটিকে আপনার ক্লাসপথে যুক্ত করুন এবং সিডিআইতে
@ViewScoped
কাজ করবেন। মাইফিজস সিওডি-তে @ ভিউস্কোপেডের আরও দৃ solid় সমর্থন রয়েছে
- মাইফিসস সিওডি ব্যবহার করুন
@ViewAccessScoped
, এটি অ্যাপাচি দ্বারা সিডিআইয়ের উপরে লেখা একটি এক্সটেনশন, কেবল এটি ডাউনলোড করুন এবং @ViewAccessScoped
পরিবর্তে টীকাটি ব্যবহার করুন @ViewScoped
।
- সিডিআই ব্যবহার করুন
@ConversationScoped
এবং এটি দীর্ঘ চলমান করুন। আরও তথ্যের জন্য এখানে দেখুন ।
- ওমনিফেসগুলি @ ভিউস্কোপড টীকাটি ব্যবহার করুন
কিছু অংশ এখান থেকে চালিত হয়েছিল ।