সিডিআই এবং ইজেবি কীভাবে তুলনা করতে পারে? ইন্টারঅ্যাক্ট?


106

দু'জন কীভাবে ইন্টারঅ্যাক্ট করে এবং কোথায় তাদের মধ্যে সীমানাটি রয়েছে তা বোঝার জন্য আমার বেশ কষ্ট হচ্ছে। তারা কি ওভারল্যাপ করে? তাদের মধ্যে কি অপ্রয়োজনীয়তা আছে?

আমি জানি যে উভয়ের সাথে সম্পর্কিত টীকা রয়েছে, তবে আমি সংক্ষিপ্ত বিবরণ দিয়ে উভয়ের জন্য একটি সম্পূর্ণ তালিকা খুঁজে পাচ্ছি না। নিশ্চিত না যে এটি কীভাবে তাদের পার্থক্য বা কোথায় ওভারল্যাপ করে তা পরিষ্কার করতে সহায়তা করবে।

সত্যিই শুধু বিভ্রান্ত। আমি (মনে করি) আমি ইজেবিকে যুক্তিসঙ্গতভাবে ভালভাবে বুঝতে পারি, আমার ধারণা, সিডিআই কীভাবে টেবিলে নিয়ে আসে এবং ইজেবি ইতিমধ্যে কী সরবরাহ করে বা কীভাবে বাড়িয়ে তোলে তা বুঝতে আমার খুব কষ্ট হচ্ছে time


3
এই প্রশ্নের গুগলের "EJB CDI পার্থক্য" অনুসন্ধান শীর্ষ বাছাই করে, কিন্তু আমি এ উত্তর পাওয়া stackoverflow.com/questions/13487987/... পরিষ্কার
অনুজ্জ্বল freake

উত্তর:


50

সিডিআই: এটি নির্ভরতা ইনজেকশন সম্পর্কে। এর অর্থ হ'ল আপনি যে কোনও জায়গায় ইন্টারফেস বাস্তবায়ন করতে পারেন। এই অবজেক্টটি যে কোনও কিছু হতে পারে, এটি ইজেবির সাথে সম্পর্কিত হতে পারে না। সিডিআই ব্যবহার করে র্যান্ডম জেনারেটরটি কীভাবে ইনজেক্ট করা যায় তার একটি উদাহরণ এখানে । ইজেবি সম্পর্কে কিছুই নেই। আপনি সিডিআই ব্যবহার করতে যাচ্ছেন যখন আপনি নন-ইজেবি পরিষেবাগুলি, বিভিন্ন বাস্তবায়ন বা অ্যালগরিদমগুলি ইনজেকশন করতে চান (যাতে আপনার এখানে ইজেবি লাগবে না)।
ইজেবি: আপনি বুঝতে পারেন, এবং সম্ভবত আপনি @EJBটীকা দ্বারা বিভ্রান্ত হয়ে পড়েছেন - এটি আপনাকে আপনার পরিষেবায় বা যাই হোক না কেন বাস্তবায়নের জন্য ইনজেক্ট করতে দেয়। মূল ধারণাটি সেই শ্রেণীর, যেখানে আপনি ইনজেক্ট করেন, ইজেবি ধারক দ্বারা পরিচালনা করা উচিত। দেখে মনে হচ্ছে যে সিডিআই বুঝতে পারে ইজেবি কী, তাই জাভা ইই 6 কমপ্লায়েন্ট সার্ভারে, আপনার সার্লেলে আপনি উভয়ই লিখতে পারেন

@EJB EJBService ejbService;

এবং

@Inject EJBService ejbService;

এটাই আপনাকে বিভ্রান্ত করতে পারে, তবে সম্ভবত এটিই হ'ল ইজেবি এবং সিডিআইয়ের মধ্যে সেতু।

যখন আমরা সিডিআই সম্পর্কে কথা বলছি, আপনি অন্যান্য বস্তুগুলিকে সিডিআই পরিচালিত ক্লাসগুলিতে ইনজেক্ট করতে পারেন (সেগুলি কেবল সিডিআই সচেতন ফ্রেমওয়ার্ক দ্বারা তৈরি করা উচিত)।

সিডিআই আর কী অফার করে ... উদাহরণস্বরূপ, আপনি স্ট্রুটস 2 কে এমভিসি ফ্রেমওয়ার্ক হিসাবে ব্যবহার করেন (উদাহরণস্বরূপ) এবং আপনি এখানে সীমাবদ্ধ এমনকি এমন কি এজেবি ৩.১ ব্যবহার করে - আপনি @EJBস্ট্রটস অ্যাকশনে টিকা ব্যবহার করতে পারবেন না , এটি ধারক দ্বারা পরিচালিত হয় না। আপনি যখন স্ট্রুটস 2-সিডিআই প্লাগইন যুক্ত করবেন তখন আপনি সেখানে @Injectএকই জিনিসটির জন্য টীকা লিখতে পারেন (সুতরাং আর জেএনডিআই দেখার প্রয়োজন নেই)। এইভাবে এটি ইজেবি শক্তি বাড়ায়, তবে আমি আগেই বলেছি, আপনি সিডিআই দিয়ে কী ইনজেক্ট করেন - এটি ইজেবির সাথে সম্পর্কিত কিনা তা বিবেচ্য নয় এবং এটিই এর শক্তি।

পুনশ্চ. উদাহরণের সাথে আপডেট হওয়া লিঙ্ক


@ ইজেবি এবং @ ইনজেক্টগুলি কি কার্যত কার্যকরীভাবে সমান? আমি মনে করি এটি সিডিআই এবং জাভা EE সংক্ষিপ্ত বিবরণ স্যুপের কিছু অংশের মধ্যে ইঞ্জেকশন পদ্ধতির ওভারল্যাপ ছিল যা আমাকে বিভ্রান্ত করেছিল। আরও পঠন থেকে মনে হয় যে টীকাগুলি সারিবদ্ধ করার আশা রয়েছে।
টিম

@ ম্যাক্সিম আপনি যখন @ ইনজেক্ট ব্যবহার করেন, আপনি কীভাবে নিশ্চিত করতে পারেন যে @ স্টেটলেস বা ইজেবি-র কোনও সার্ভার সাইড উপাদান এখনও পাত্রিং দ্বারা প্রস্তাবিত পুলিং বা কনক্যুরেন্সির মতো বৈশিষ্ট্যগুলি ব্যবহার করে। আমি আশা করি এটি ঠিক সিডিআই দিয়ে দেওয়া হয়নি?
বালা

1
@ বালা: সিডিআই পুলিংয়ের প্রস্তাব দেয় না ... ইডিবি 3.1 এর সাথে বা ছাড়াই সিডিআই দেখুন , আশা করি এটি আপনার প্রশ্নের জবাব দিয়েছে ..
ম্যাক্সিম

@ কোরেটগুয়ে: সিডিআই একটি জাভা ইই বৈশিষ্ট্য, সুতরাং যে কোনও জাভা ইই comp কমপ্লায়েন্ট সার্ভারে এটি রয়েছে (গ্লাস ফিশ 3.0.০.১+ ভুল করা হয়নি, জেবস ++ ইত্যাদি) আপনি জেবস ওয়েল্ড, একটি রেফারেন্স সিডিআই বাস্তবায়ন যা একবার আপনি দেখতে পারেন উদাহরণস্বরূপ টমক্যাট ব্যবহার করতে পারেন ...
ম্যাক্সিম

191

জাভা ইইতে এখন একাধিক উপাদান মডেল থাকার কারণে এটি বর্তমানে কিছুটা বিভ্রান্তিকর। তারা হ'ল সিডিআই , ইজেবি 3 এবং জেএসএফ পরিচালিত মটরশুটি

সিডিআই ব্লকের নতুন বাচ্চা। সিডিআই মটরশুটি বৈশিষ্ট্য dependency injection, scopingএবং একটি event bus। ইনজেকশন এবং স্কোপিংয়ের ক্ষেত্রে সিডিআই মটরশুটিগুলি সবচেয়ে নমনীয়। ইভেন্ট বাসটি খুব হালকা এবং খুব সহজ ওয়েব অ্যাপ্লিকেশনগুলির জন্য খুব উপযুক্ত suited এগুলি ছাড়াও, সিডিআই একটি অতি উন্নত বৈশিষ্ট্যটিও প্রকাশ করে portable extensionsযা বিক্রেতাদের জন্য জাভা ইইয়ের অতিরিক্ত কার্যকারিতা সরবরাহের জন্য এক ধরণের প্লাগ-ইন প্রক্রিয়া যা সমস্ত বাস্তবায়নে (গ্লাসফিশ, জেবস এএস, ওয়েবস্পিয়ার ইত্যাদি) উপলব্ধ করা যায় is ।

EJB3 মটরশুটি পুরাতন উত্তরাধিকার EJB2 উপাদান মডেল * থেকে পুনরুদ্ধার করা হয়েছিল এবং একটি টীকা দ্বারা মটরশুটি পরিচালিত জাভা EE এর প্রথম মটরশুটি ছিল। EJB3 মটরশুটি বৈশিষ্ট্য dependency injection, declarative transactions, declarative security, pooling, concurrency control, asynchronous executionএবং remoting

EJB3 মটরশুটি মধ্যে নির্ভরতা ইনজেকশন সিডিআই মটরশুটি হিসাবে হিসাবে নমনীয় নয় এবং EJB3 মটরশুটি স্কোপিং এর কোন ধারণা নেই। তবে, ইজেবি 3 শিমগুলি লেনদেন এবং ডিফল্ট ** দ্বারা পুল করা হয় , দুটি অত্যন্ত ব্যবহারযোগ্য জিনিস যা সিডিআই ইজেবি 3 এর ডোমেনে রেখে যেতে বেছে নিয়েছে। উল্লিখিত অন্যান্য আইটেমগুলি সিডিআইতেও পাওয়া যায় না। EJB3 এর নিজস্ব কোনও ইভেন্ট বাস নেই, তবে এটি বার্তা শোনার জন্য একটি বিশেষ ধরণের বিন রয়েছে; বার্তা চালিত শিম। এটি জাভা মেসেজিং সিস্টেম বা অন্য কোনও সিস্টেমের একটি জেসিএ রিসোর্স অ্যাডাপ্টারের বার্তা গ্রহণ করতে ব্যবহার করা যেতে পারে। সিডিআই ইভেন্ট বাসের তুলনায় সাধারণ ইভেন্টগুলির জন্য পূর্ণ প্রস্ফুটিত মেসেজিং ব্যবহার করা অনেক বেশি ভারী ওজন এবং ইজেবি 3 কেবল শ্রোতার সংজ্ঞা দেয়, প্রযোজক এপিআই নয়।

জেএসএফ পরিচালিত শিমগুলি জেএসএফ অন্তর্ভুক্ত হওয়ার পর থেকেই জাভা ইইতে বিদ্যমান ছিল। তারা খুব বৈশিষ্ট্য dependency injectionএবং scoping। জেএসএফ পরিচালিত মটরশুটি ঘোষিত স্কোপিংয়ের ধারণাটি চালু করে। মূলত স্কোপগুলি বরং সীমাবদ্ধ ছিল এবং জাভা ইই একই সংস্করণে যেখানে ইজেবি 3 শিম ইতিমধ্যে টীকা দ্বারা ঘোষিত হতে পারে, জেএসএফ পরিচালিত মটরশুটি এখনও এক্সএমএলে ঘোষণা করতে হয়েছিল। জেএসএফ পরিচালিত শিমের বর্তমান সংস্করণটি অবশেষে একটি টীকা দ্বারা ঘোষিত হয় এবং স্কোপগুলি একটি দেখার সুযোগ এবং কাস্টম স্কোপগুলি তৈরি করার ক্ষমতা দিয়ে প্রসারিত হয়। দেখার সুযোগ, যা একই পৃষ্ঠায় অনুরোধগুলির মধ্যে ডেটা মনে রাখে তা জেএসএফ পরিচালিত শিমের একটি অনন্য বৈশিষ্ট্য।

দেখার সুযোগ বাদে, জাভা ইই 6 তে জেএসএফ পরিচালিত মটরশুটিগুলি এখনও খুব কম চলছে CD. সিডিআই-তে অনুপস্থিত দৃশ্যর সুযোগটি দুর্ভাগ্যজনক, যেহেতু অন্যথায় সিডিআই জেএসএফ পরিচালিত শিমের অফারের একটি নিখুঁত সুপার সেট হত set আপডেট : জাভা ইই 7 / জেএসএফ 2.2 এ একটি সিডিআই সুসংগত @ ভিউস্কোপড যুক্ত হয়েছে, সিডিআই প্রকৃতপক্ষে সেই নিখুঁত সুপার সেট করে making আপডেট 2 : জেএসএফ 2.3 এ জেএসএফ পরিচালিত মটরশুটিগুলি সিডিআই পরিচালিত শিমের পক্ষে অবমূল্যায়ন করা হয়েছে।

ইজেবি 3 এবং সিডিআইয়ের সাথে পরিস্থিতিটি সেই পরিষ্কার কাটা নয়। EJB3 উপাদান মডেল এবং এপিআই সিডিআই অফার করে না এমন প্রচুর পরিষেবা সরবরাহ করে, তাই সাধারণত ইজেবি 3 সিডিআই দ্বারা প্রতিস্থাপন করা যায় না। অন্যদিকে, সিডিআই ইজেবি 3 এর সাথে সংমিশ্রণে ব্যবহার করা যেতে পারে - যেমন ইজেবিগুলিতে স্কোপ সমর্থন যুক্ত করা।

বিশেষজ্ঞ গ্রুপ সদস্য এবং ক্যানডিআই নামে একটি সিডিআই বাস্তবায়ন বাস্তবায়নকারী রেজা রহমান প্রায়শই ইঙ্গিত করেছেন যে ইজেবি 3 উপাদান মডেলের সাথে সম্পর্কিত পরিষেবাগুলি সিডিআই টীকাগুলির সেট হিসাবে পুনঃনির্মাণ করা যেতে পারে। যদি এটি ঘটে থাকে তবে জাভা EE এর সমস্ত পরিচালিত মটরশুটি সিডিআই মটরশুটি হতে পারে। এর অর্থ এই নয় যে ইজেবি 3 অদৃশ্য হয়ে যায় বা অপ্রচলিত হয়ে যায়, তবে কেবল এটির কার্যকারিতাটি ইডিবি এর মাধ্যমে @ স্ট্যাটলেস এবং @ ইজেবি-র মতো নিজস্ব টীকাগুলির পরিবর্তে সিডিআইয়ের মাধ্যমে প্রকাশ করা হবে।

হালনাগাদ

টমইই ও ওপেনইজেবি খ্যাতির ডেভিড ব্ল্যুইনস সিডিআই এবং ইজেবি-র মধ্যে পার্থক্য এবং মিলগুলি তার ব্লগে খুব ভালভাবে ব্যাখ্যা করেছেন: সিডিআই, কখন ইজেবি বেরোবে

* যদিও এটি সংস্করণ সংখ্যায় কেবল একটি বৃদ্ধি, ইজেবি 3 শিম বেশিরভাগ অংশের জন্য ছিল সম্পূর্ণ ভিন্ন ধরণের শিম: একটি সাধারণ পোজো যা একটি সাধারণ এক টীকা প্রয়োগ করে "ম্যানেজড শিম" হয়ে ওঠে, ইজেবি 2-তে মডেল যেখানে ভারী ওজন এবং অতিরিক্ত শাবক এক্সএমএল ডিপ্লোমেন্ট ডেস্কিপটর ​​প্রতিটি শিমের জন্য প্রয়োজন ছিল, শিমের পাশাপাশি বিভিন্ন অত্যন্ত হেভিওয়েট এবং বেশিরভাগ অংশ অর্থহীন উপাদান ইন্টারফেসের জন্য প্রয়োগ করা প্রয়োজন।

** স্টেটলেস সেশন মটরশুটি সাধারণত চালিত হয়, রাষ্ট্রীয় অধিবেশন মটরশুটি সাধারণত হয় না (তবে তারা হতে পারে)। উভয় প্রকারের জন্য পুলিং এইভাবে optionচ্ছিক এবং ইজেবি স্পেক এটি কোনওভাবেই আদেশ দেয় না।


3
আপনার বক্তব্যগুলি সম্পর্কে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি যে "ইজেবি 3 শিমের স্কোপিংয়ের কোনও ধারণা নেই" এবং এটি "ইজেবি 3 এর নিজস্ব কোনও ইভেন্ট বাস নেই যদিও"। কেমন করে দিয়ে এই হইয়া ডেভিড Blevin এর দাবি করেন যে, "EJBs হয় CDI মটরশুটি আছে সব CDI সুবিধাগুলো এবং সেইজন্য"? আপনি যখন নিজের উত্তরটি লিখেছিলেন এবং ডেভিড কখন তার ব্লগ এন্ট্রি লিখেছিলেন তার মধ্যে এই বিষয়ে কিছু পরিবর্তন হয়েছে?
ক্রিস

5
এটি সম্ভবত কিছুটা বিভ্রান্তিকর ধারণার কারণেই এটি আসলে "সিডিআই মটরশুটি" নেই, তবে পরিচালিত মটরশুটিগুলিতে পরিষেবা রয়েছে। আলোচনার খাতিরে লোকেরা (এবং আমার এভাবে) এগুলি "সিডিআই মটরশুটি" হিসাবে উল্লেখ করেন। সিডিআইয়ের আগে, ইজেবি শিমের কোনও স্পষ্ট স্কোপিং ছিল না। ডেভিড ব্যাখ্যা করার সাথে সাথে স্টেটফুল স্পষ্টভাবে কোনও সুযোগ (এবং এইভাবে বিশেষভাবে কোনও সুযোগ নেই)। এখন । CDI সাথে উপলব্ধ, EJB মটরশুটি CDI বৈশিষ্ট ছাড়া সুবিধা গ্রহণ করতে পারেন এর CDI সুযোগ প্রদান করা, যাতে যখন একমাত্র EJB বৈশিষ্ট দিকে তাকিয়ে, কোন স্পষ্ট সুযোগ থাকে না।
Arjan Tijms

1
"পরিচালিত মটরশুটিগুলিতে পরিষেবাগুলি প্রয়োগ করা হয়" এর অর্থ আপনি কী ব্যাখ্যা করতে পারেন? এর অর্থ কি আসলে সিডিআই শিমের মতো কোনও জিনিস নেই? এটি কেবলমাত্র কোনও POJO - EJB - বা জেএসএফ পরিচালিত শিমের অতিরিক্ত বৈশিষ্ট্য সরবরাহ করছে? কোনও জেএসএফ পরিচালিত বিনে ইনজোট টীকাটি ব্যবহার করতে সক্ষম হওয়া পছন্দ করে?
Koray Tugay

3
@ ক্রিস একটি ইজেবি সুনির্দিষ্ট দৃষ্টিকোণ থেকে আরও স্পষ্ট করার জন্য আমরা সিডিআই শুরু হতে ইচ্ছাপূর্বক সিদ্ধান্ত নিয়েছিলাম যে EJB বাস্তবায়ন অবশ্যই EJBগুলিতে সেট করা সিডিআই বৈশিষ্ট্যের 100% সমর্থন করবে। সিডিআইয়ের প্রতিটি বিষয় স্কোপগুলি ব্যতীত ইজেবিগুলিতে কাজ করে যা আমাদের কেবল স্টেটফুল শিমের মধ্যে সীমাবদ্ধ করতে হয়েছিল।
ডেভিড ব্লাভিনস

1
নোট করুন যে জেএসএফ ২.২ এখন জাভ্যাক্স.ফেসস.ভিউ.ভিউস্কোপড সরবরাহ করে, একটি সিডিআই এক্সটেনশন যা মূলত সিডিআইকে জেএসএফ দেখার সুযোগের বন্দর। এটির সাহায্যে সিডিআই হ'ল জেএসএফ পরিচালিত মটরশুটিগুলির জন্য একটি সম্পূর্ণ ড্রপ-ইন প্রতিস্থাপন।
jdessey

-1

আলবার্ট আইনস্টাইন: If you can't explain it simply, you don't understand it well enough

এজজস এবং সিডিআই বুঝতে খুব সহজ।

Ejbs:

  1. স্কোপ কোয়ালিফায়ার দ্বারা সর্বদা বিশ্লেষণ করা হবে, উদাহরণস্বরূপ, @ স্টেটলেস, @ স্ট্যাটফুল, @ রিকুয়েস্ট ইত্যাদি
  2. ইজবাসের দৃষ্টান্তগুলি জাভা ইই কাঠামো দ্বারা নিয়ন্ত্রিত হয় এবং পুল হয়। গ্রাহকের জন্য দৃষ্টান্ত সরবরাহ করা ইই কাঠামোর দায়িত্ব।

@Stateless

 public class CarMaker(){
    public void createCar(Specification specs){
        Car car = new Car(specs);
    }
}

কার মেকার নির্দিষ্ট ইজবস স্কোপ সহ এনটেটেড, অতএব, এটি ইজবি

CDI:

  1. EE কাঠামোর দ্বারা পুরোপুরি পরিচালিত নয়, দৃষ্টান্তগুলি নিজের দ্বারা তৈরি করতে হবে।
  2. এটি সর্বদা নির্ভরশীল। উদাহরণ সহকারে আমাকে "নির্ভরশীল" ব্যাখ্যা করতে দাও:

    class Specification { private String color; private String model; //- Getter and Setter }

Specificationযেহেতু এটি Ejb সুযোগ সঙ্গে সটীক করা হয় না এবং এই আপনার কোড না ই ই ফ্রেমওয়ার্ক দ্বারা সক্রিয়া হয়েছে বর্গ, CDI হয়। এখানে একটি বিষয় লক্ষণীয় যে আমরা যেহেতু Specificationক্লাসটি অ্যানোটেটেড করি নি তাই এটি পূর্বনির্ধারিতভাবে টীকা দ্বারা টীকাযুক্ত @Dependent

@Dependent  <- By default added 
class Specification { ... }

Further reading: আপনাকে ইজবস স্কোপ টিকাটি এবং সিডিআই স্কোপ এনোটোটেশনের মধ্যে আরও অধ্যয়ন করতে হবে যা ধারণাটি আরও সাফ করবে


আইনস্টাইন আরও বলেছিলেন: "সবকিছুই করা উচিত যতটা সম্ভব সরল, তবে সহজ নয়" আপনি এখানে "ব্যাখ্যা" দিয়ে 'তৈরি' প্রতিস্থাপন করতে পারেন।
কুকলতজে 9'18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.