@ অ্যাপ্লিকেশনস্কোপড এবং সিডিআইতে @ সিঙ্গেলটন স্কোপের মধ্যে পার্থক্য কী?


96

সিডিআইতে @ApplicationScopedএবং ( javax.inject) @Singletonসিউডো-স্কোপ রয়েছে। তাদের মধ্যে পার্থক্য কী? সত্য যে এ ছাড়া @ApplicationScopedপ্রক্সি করা হয়, এবং @Singletonনয়।

আমি কি শুধু আমার @Singletonশিমকে পরিবর্তন করতে পারি @ApplicationScoped? পারি @ApplicationScopedশিম দুই (বা তার বেশি) দৃষ্টান্ত আছে?


12
আপনি কি ওয়েল্ড রেফারেন্স পড়েছেন ? এর বিভাগ 5.4 (p। 36) এর মধ্যে @ApplicationScopedএবং এর মধ্যে ব্যবহারিক পার্থক্য সম্পর্কে কিছু ব্যাখ্যা রয়েছে @Singleton
ব্র্যান্ডিজি

4
আপনি কোন সিঙ্গেলনের সুযোগটি উল্লেখ করছেন - javax.ejb বা javax.inject?
জন অ্যামেন্ট

উত্তর:


30

@Singletonসিডিআই নির্দিষ্টকরণের অংশ নয়। এটি ইজেবি এবং javax.inject(জেএসআর -330) এর অংশ। এটির আচরণটি কী তা নির্দিষ্ট করে তা উল্লেখ করা হয়নি, তাই আপনি কেবল ওয়েল্ড ডকুমেন্টেশনে যা লিখেছেন তার উপর নির্ভর করতে পারেন।


11
এটা সত্যি না. রয়েছে টীকা javax.inject.Singleton। এটি সিডিআইয়ের একটি অংশ। এখানে চেক করুন: ডকস.জবোস.আর
ওয়েল্ড

4
@ এমরফিস - আমার সামনে সিডিআই স্পেক আছে। এমনকি আমি এর কিছু অংশ প্রয়োগ করেছি এবং এটি সম্পর্কে কোনও উল্লেখ করা হয়নি @Singleton। এটি কোনও ব্যাখ্যা ছাড়াই কেবল একটি উদাহরণে দেখানো হয়েছে। এটি সত্য যে সিডিআই নির্ভর করে javax.inject, তবে কঠোরভাবে বলা এটি সিডিআই অনুচ্ছেদের অংশ নয়। এই বলেছিল, আমি আমার উত্তরটি কিছুটা সংশোধন করেছি।
বোঝো

17

সংক্ষেপে: আপনি এটি ( @Singletonএবং @ApplicationScoped) মেশাতে পারেন এবং এটি কিছু পরিস্থিতিতে বোধগম্য হয়। (এবং খনিতে প্রত্যাশার মতো কাজ করে!)

অন্যান্য উত্তরগুলির সাথে এখন অবধি আমি বাস্তব বিশ্বের পরিস্থিতিগুলিতে স্পষ্টতার জন্য আরও কিছু পয়েন্ট যুক্ত করতে চাই।

আমার জন্য এই প্রশ্নটি উদ্ভূত হয়েছিল কীভাবে আমি একটি অ্যাপ্লিকেশন-স্কোপ করা শিম অ্যাপ্লিকেশন শুরু করার সময় ইনস্ট্যান্ট করতে বাধ্য করব? কিছু আলোচনায় আমি এটি বলেছিলাম এবং এখন পর্যন্ত এর বিরুদ্ধে কোনও বৈধ যুক্তি খুঁজে পাচ্ছি না:

বাস্তব জীবনের অনেক পরিস্থিতিতে / সেটআপগুলিতে আমি বলতে চাই এটি অবশ্যই বলা মুশকিল - একটি বিমূর্ত / মডেলিং দৃষ্টিকোণ থেকে - কিছু ইজেবি (বা এমনভাবে হয়ে উঠবে / যেমন হবে) একটি ইজেবি বা অ্যাপ্লিকেশন-স্কোপযুক্ত মটরশুটি be

(বিতর্কযোগ্য তবে চূড়ান্ত নয়) এর বিরুদ্ধে এখন পর্যন্ত যুক্তিগুলি (আমার দৃষ্টিকোণ থেকে): (@ বালাসসি এবং অন্যান্য সকল: আমি এগুলি চূড়ান্ত হতে দেখছি, তবে যদি তা না হয় তবে উপরেরটি সত্য হতে পারে এবং তবুও যুক্তিগুলি হতে পারে তবুও পাঠককে পার্থক্য / সুবিধা / অসুবিধাগুলি / খারাপ / ভাল অভ্যাসগুলি পেতে সহায়তা করুন)

ইজেবি বনাম পরিচালিত বিন

বালুসসি : এটি একটি ইজেবি হ'ল পরিচালিত শিম নয়, যা একেবারেই আলাদা। ইজেবিগুলি ব্যাকএন্ডে চালিত হয় এবং সম্মুখভাগে মটরশুটি পরিচালনা করে। ইজেবিগুলি লেনদেনের প্রসঙ্গেও চালিত হয়। [...] আপনি কেবল পরিচালিত মটরশুটি দিয়ে এন্টারপ্রাইজ বিনগুলি বিভ্রান্ত করেছেন এবং আমি কেবল এটি নির্দেশ করেছিলাম।

তবে:

আমি : আমি মনে করি আপনি যথেষ্ট সঠিক এবং অর্থ / ব্যবহারকে অতিরিক্ত বিবেচনা করছেন না এবং এটি আমার কাছে বিতর্কযোগ্য বলে মনে হচ্ছে। http://en.wikedia.org/wiki/Enterprise_JavaBeans

এন্টারপ্রাইজ জাভাবিয়ানস (ইজেবি) এন্টারপ্রাইজ সফ্টওয়্যার মডুলার নির্মাণের জন্য একটি পরিচালিত, সার্ভার সফ্টওয়্যার, এবং বেশ কয়েকটি জাভা এপিআইয়ের একটি is ইজেবি হ'ল একটি সার্ভার-সাইড সফ্টওয়্যার উপাদান যা কোনও অ্যাপ্লিকেশনটির ব্যবসায়িক লজিককে আবদ্ধ করে।

এন্টারপ্রাইজ বিনের প্রকার

সেশন বিন [3] যা "স্টেটফুল", "স্টেটলেস" বা "একক" হতে পারে [...]

মেসেজ চালিত মটরশুটি [...]

... যা এখনও আমার ক্ষেত্রে সত্য।

সিঙ্গলটন ইজেবি বনাম অ্যাপ্লিকেশন স্কোপড বিন an

লকিং

বালুসসি : একটি সিঙ্গলটন ইজেবি অ্যাপ্লিকেশন স্কোপড শিমের মতো নয়। একটি সিঙ্গলটন ইজেবিটি পড়ার / লেখার তালাবদ্ধ এবং এইভাবে আপনার মনে যে কাজটি ছিল সেটির জন্য সম্ভাব্যরূপে অদক্ষ / অতিরিক্ত বিবেচিত। দীর্ঘ গল্প সংক্ষিপ্ত: একটি ভাল জাভা EE বইটি ধরুন এবং কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করতে শিখুন। একটি উপায় অবশ্যই অন্য উপায় নয়। এটি যে কাজ করে তার অর্থ এটি সঠিক সরঞ্জাম নয়। একজন স্লেজহ্যামার একটি স্ক্রু বেঁধে রাখতে সক্ষম তবে এটি অবশ্যই সঠিক সরঞ্জাম নয় :)

তবে:

(আমি হাতুড়িবিশেষ এখানে দেখতে পাচ্ছি না - দুঃখিত ...) এটা ভালো লকিং অক্ষমতা জানেন যে (আমি এটা সচেতন ছিল না), কিন্তু আবার এই ভুল হবে বলে মনে হয়: ওরাকল জাভা EE 6 টিউটোরিয়াল উপর একটি সমসাময়িক অ্যাক্সেস ম্যানেজিং একক সেশন বিন

সিঙ্গেলটন সেশন বিন তৈরি করার সময়, সিঙ্গলটনের ব্যবসায়িক পদ্ধতিতে একযোগে অ্যাক্সেস দুটি উপায়ে নিয়ন্ত্রণ করা যেতে পারে: ধারক-পরিচালিত সমঝোতা এবং শিম-পরিচালিত সম্মতি। [...]

যদিও ডিফল্টরূপে, সিঙ্গেলনগুলি কনটেইনার-পরিচালিত সম্মতি ব্যবহার করে, একত্রে ক্লাস লেভেলে স্পষ্টভাবে চুক্তি পরিচালনার ধরন নির্ধারণ করতে @ কনকুরেন্সিম্যানেজমেন্ট (কনটেনার) টিকা যুক্ত করা যেতে পারে


মিশ্রণটি দিয়ে ওয়েল্ডটি বিস্মিত নয়: অ্যাপ্লিকেশনটি লোড করার সময় ব্যতিক্রম: সিডিআই সংজ্ঞা ব্যর্থতা: ওয়েল্ড -000046: সর্বাধিক একটি স্কোপ [এনহ্যান্সড অ্যানোটেটেড টাইপআইএমপি] সর্বজনীন অ্যাপ্লিকেশনস্ক্যাপড সিঙ্গলটন মাইক্লাসে নির্দিষ্ট করা যেতে পারে। Javax.inject.Singleton ব্যবহার করা হচ্ছে।
স্যাজফ্ল্ট

12

সাধারণত যখন আপনি কোনও অবজেক্টের কেবলমাত্র একটি উদাহরণ পেতে চান আপনার সম্ভবত @ApplicationScopedটীকাটি ব্যবহার করা উচিত - এ জাতীয় অবজেক্টটি প্রক্সড হয় এবং এইভাবে বাক্সের বাইরে সঠিকভাবে সিরিয়াল করা যায়।

অন্যদিকে, এমন অনেকগুলি কেস রয়েছে, যেখানে আপনি ক্লাসের কেবলমাত্র একটি উদাহরণ চান, তবে এই ধরণের শ্রেণিটি অনুমান করা যায় না (উদাহরণস্বরূপ চূড়ান্ত হওয়ার কারণে) - তবে @Singletonএটি উদ্ধারযোগ্য। কারণ Singletonএটি একটি সিউডো স্কোপ এবং কোনও "সাধারণ" স্কোপের মতোই প্রক্সি করা হচ্ছে না।


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

4
এটি বলেছিল, আমি জানি ইজেবিগুলি প্রক্সাইড হয়েছে। আমার বিভ্রান্তি আংশিক আপনি যে সিগলেটনের জন্য করছেন তার পার্থক্যকে ঘিরে।
ডেভিডএস

9

@Singletonজেএসআর -৯৯৯-এ সিঙ্গেলটন সেশন বিনগুলি বোঝায় javax.ejb.Singleton, ( নয় javax.inject.Singleton), জেএসআর -৯৯৯ সিঙ্গেলটন নামে একটি বিল্ট-ইন স্কোপে ম্যানেজ করা মটরশুটি নয়।

আপনি আপনার সার্ভারে এটি পেতে পারেন যা @ApplicationScopedপ্রতি এক ইয়ার বা এক-প্রতি ওয়ার ওয়ার্ড / ইজেবি-জেআর হিসাবে নির্দিষ্টকরণে স্পষ্ট নয়, তবে আপনি অবশ্যই এটি জেভিএম প্রতি এক হওয়ার আশা করবেন না।


7

এর মধ্যে আরও একটি পার্থক্য রয়েছে: @Singletonবিনটি টীকা সংজ্ঞায়িত করা নয়, কারণ Singletonস্কোপটি কোনও সাধারণ সুযোগ নয়। তারপরে @ApplicationScopedশিমটি টীকা সংজ্ঞায়িত করা হয়।

সিডিআই ১.১ স্পেস সহ: যখন আবিষ্কার-মোডে অ্যাপ্লিকেশন = টিকা দেওয়া থাকে, ওয়েল্ড এটি দিয়ে মটরশুটি সনাক্ত করে না @Singletonএবং এটি লোড করা হয়নি


2

আপনি ডিফল্ট কনস্ট্রাক্টরের সাথে আপনার ক্লাসটি লিখতে পারেন এমন একটি প্রধান পার্থক্যগুলির মধ্যে একটি ব্যবহারের সময় ব্যক্তিগত অ্যাক্সেস মডিফায়ার রয়েছে javax.inject.Singletonতবে ব্যবহারের সময় আপনার ক্লাসে কমপক্ষে ডিফল্ট অ্যাক্সেস মডিফায়ার সহ ডিফল্ট কনস্ট্রাক্টর থাকা উচিত javax.enterprise.context.ApplicationScopedএবং এটি JBOSS 6.1 GA Finalবাস্তবায়ন হয়


আপনি কি "ডিফল্ট কনস্ট্রাক্টর" বলতে চান?
ট্রিফিশ ঝাং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.