হ্যাঁ, আপনি অবাধে সিডিআই এবং ইজেবি উভয়কে মিশ্রিত করতে পারেন এবং দুর্দান্ত ফলাফল অর্জন করতে পারেন। মনে হচ্ছে আপনি ব্যবহার করছেন @WebService
এবং @Schedule
, যা মিশ্রণে ইজেবি যুক্ত করার ভাল কারণ are
সেখানে প্রচুর বিভ্রান্তি রয়েছে, সুতরাং ইজেবি এবং সিডিআই সম্পর্কিত কিছু সাধারণ তথ্য যেমন তারা একে অপরের সাথে সম্পর্কিত।
ইজেবি> = সিডিআই
লক্ষ্য করুন EJBs হয় CDI মটরশুটি এবং সেইজন্য CDI সব সুবিধা আছে। বিপরীতটি সত্য নয় (এখনও)। সুতরাং অবশ্যই "EJB বনাম সিডিআই" ভাবার অভ্যাসে উঠবেন না কারণ যুক্তিটি সত্যই "EJB + CDI বনাম সিডিআই" তে অনুবাদ করে, যা একটি বিজোড় সমীকরণ।
জাভা EE এর ভবিষ্যতের সংস্করণগুলিতে আমরা সেগুলি সারিবদ্ধ করে রাখব। মানে কি সমতলতা, মানুষ কি তারা ইতিমধ্যে কি করতে পারেন না, যার ফলে শুধু ছাড়া @Stateful
, @Stateless
অথবা @Singleton
উপরের টীকা।
বাস্তবায়ন শর্তাদি EJB এবং সিডিআই
শেষ পর্যন্ত, EJB এবং CDI প্রক্সি উপাদানগুলির একই মৌলিক নকশা ভাগ করে। আপনি যখন কোনও ইজেবি বা সিডিআই বিনের রেফারেন্স পাবেন, এটি আসল বিন নয়। বরং আপনাকে দেওয়া বস্তুটি একটি নকল (প্রক্সি)। আপনি যখন এই জাল বস্তুটিতে কোনও পদ্ধতির আবেদন করেন, কলটি সেই ধারকটিতে যায় যিনি ইন্টারসেপ্টর, সাজসজ্জা ইত্যাদির মাধ্যমে কলটি প্রেরণ করবেন পাশাপাশি কোনও লেনদেন বা সুরক্ষা চেকের যত্ন নেবেন। সব কিছু হয়ে গেলে, কলটি শেষ পর্যন্ত আসল অবজেক্টে চলে যায় এবং ফলাফল প্রক্সি দিয়ে কলারের কাছে ফিরে যায়।
পার্থক্যটি কেবল তখনই আসে যখন কীভাবে অনুরোধ করা হবে তার সমাধান করা হয়। "সমাধান করা" দ্বারা আমরা কেবল বোঝাতে পারি, কোথায় এবং কীভাবে ধারক প্রকৃত দৃষ্টান্তটি দেখতে চাইবে।
সিডিআইতে ধারকটি একটি "স্কোপ" এ দেখায় যা মূলত একটি হ্যাশম্যাপ হবে যা নির্দিষ্ট সময়ের জন্য বেঁচে থাকে (প্রতি অনুরোধ অনুযায়ী @RequestScoped
, এইচটিটিপি সেশন অনুযায়ী @SessionScoped
, প্রতিটি অ্যাপ্লিকেশন @ApplicationScoped
, জেএসএফ কথোপকথন @ConversationScoped
বা আপনার কাস্টম স্কোপ বাস্তবায়নের জন্য)।
ইজেবিতে ধারকটি শিমটি টাইপ করা হলে একটি হ্যাশম্যাপেও দেখায় @Stateful
। একটি @Stateful
শিমও স্কোপে থাকা সমস্ত অন্যান্য মটরশুটিগুলির সাথে এটি বেঁচে থাকার এবং মরে যাওয়ার জন্য উপরোক্ত স্কোপ এনটোটেশনগুলির কোনও ব্যবহার করতে পারে। ইজেবিতে @Stateful
মূলত "যে কোনও স্কোপড" শিম রয়েছে। @Stateless
মূলত একটি দৃষ্টান্ত পুকুর - আপনি এক আবাহন চলাকালীন পুকুর থেকে একটি দৃষ্টান্ত পেতে। @Singleton
মূলত@ApplicationScoped
সুতরাং একটি মৌলিক স্তরে, "ইজেবি" শিমের সাথে আপনি যে কোনও কিছু করতে পারেন আপনার "সিডিআই" শিমের সাথে করা উচিত। আচ্ছাদনগুলির নীচে এগুলি আলাদা করে বলা খুব শক্ত। সমস্ত নদীর গভীরতানির্ণয় উদাহরণগুলি কীভাবে সমাধান করা হয় তার ব্যতিক্রম the
এই প্রক্সিংটি করার সময় ধারকরা যে পরিষেবাগুলি সরবরাহ করবে সেগুলির ক্ষেত্রে তারা বর্তমানে একই নয় তবে আমি যেমনটি বলেছি আমরা এটি জাভা ইই স্পেস লেভেলে কাজ করছি।
পারফরম্যান্স নোট
আপনার কাছে থাকা কোনও "হালকা" বা "ভারী" মানসিক চিত্রকে উপেক্ষা করুন। এটাই সব বিপণন। তাদের বেশিরভাগ অংশের জন্য একই অভ্যন্তরীণ নকশা রয়েছে। সিডিআই ইনস্ট্যান্স রেজোলিউশন সম্ভবত কিছুটা জটিল কারণ এটি কিছুটা বেশি গতিশীল এবং প্রসঙ্গগত। EJB উদাহরণ রেজোলিউশন তুলনামূলকভাবে মোটামুটি স্থির, বোবা এবং সহজ।
আমি আপনাকে টমইই-র একটি বাস্তবায়নের দৃষ্টিকোণ থেকে বলতে পারি, একটি ইজেবি বনাম একটি সিডিআই বিনের ডাক দেওয়ার মধ্যে শূন্য পারফরম্যান্সের পার্থক্য রয়েছে।
ডিফল্ট POJOs, তারপরে CDI, তারপরে EJB
অবশ্যই কোনও সুবিধা না থাকলে সিডিআই বা ইজেবি ব্যবহার করবেন না। আপনি যখন ইনজেকশন, ইভেন্ট, ইন্টারসেপ্টর, সজ্জকার, লাইফাইসাইকেল ট্র্যাকিং এবং এর মতো জিনিসগুলি পেতে শুরু করেন তখন সিডিআইতে নিক্ষেপ করুন। এটাই বেশিরভাগ সময়।
সেই বুনিয়াদি ছাড়াও, বেশ দরকারী ধারক পরিষেবার একটি সংখ্যা আপনি শুধুমাত্র ব্যবহার করতে বিকল্প আছে যদি আপনি আপনার CDI শিম এছাড়াও যোগ করে একটি EJB করা হয় @Stateful
, @Stateless
অথবা @Singleton
এটা।
আমি যখন ইজেবিগুলি ভেঙে ফেলি তার একটি সংক্ষিপ্ত তালিকা এখানে।
জ্যাক্স-ডাব্লুএস ব্যবহার করে
একটি জ্যাক্স-ডাব্লুএস প্রকাশ করা হচ্ছে @WebService
। আমি অলস. যখন @WebService
এটিও একটি ইজেবি হয়, আপনাকে এটিকে তালিকাভুক্ত করতে হবে না এবং এটি web.xml
ফাইলের মধ্যে একটি সার্লেট হিসাবে ম্যাপ করতে হবে না । এটাই আমার কাছে কাজ। প্লাস আমি নীচে উল্লিখিত অন্য যে কোনও কার্যকারিতা ব্যবহার করার বিকল্প পেয়েছি। সুতরাং এটি আমার জন্য কোনও বুদ্ধিমান নয়।
@Stateless
এবং @Singleton
শুধুমাত্র উপলব্ধ ।
জ্যাকস-আরএস ব্যবহার করে
এর মাধ্যমে একটি জ্যাক্স-আরএস সংস্থান উন্মোচন করা হচ্ছে @Path
। আমি এখনও অলস। যখন রেস্টস্টুল সার্ভিসটিও একটি ইজেবি হয়, আবার আপনি স্বয়ংক্রিয় আবিষ্কার পাবেন এবং এটিকে জ্যাক্স-আরএস Application
সাবক্লাস বা এর মতো কিছুতে যুক্ত করতে হবে না। আমি @WebService
যদি নীচে উল্লিখিত দুর্দান্ত কার্যকারিতাটি ব্যবহার করতে বা ব্যবহার করতে চাই তবে আমি ঠিক একই শিমটি প্রকাশ করতে পারি ।
@Stateless
এবং @Singleton
শুধুমাত্র উপলব্ধ ।
প্রারম্ভিক যুক্তি
মাধ্যমে স্টার্টআপ লোড করুন @Startup
। সিডিআইতে বর্তমানে এর সমতুল্য নেই। কোনওভাবে আমরা AfterStartup
ধারক লাইফসাইলে কোনও ইভেন্টের মতো কিছু যুক্ত করতে মিস করেছি । যদি আমরা এটি করে থাকি তবে আপনার কাছে এমন @ApplicationScoped
শিম থাকতে পারে যা এটি শুনেছিল এবং এটি কার্যকরভাবে একই @Singleton
সাথে হবে @Startup
। এটি সিডিআই 1.1 এর তালিকায় রয়েছে।
@Singleton
শুধুমাত্র উপলব্ধ ।
সমান্তরালে কাজ করা
@Asynchronous
পদ্ধতি প্রার্থনা। থ্রেড শুরু করা কোনও সার্ভার-পার্শ্ববর্তী পরিবেশে হ'ল না। অনেক বেশি থ্রেড থাকা গুরুতর পারফরম্যান্স হত্যাকারী। এই টীকাটি আপনাকে কনটেইনার থ্রেড পুল ব্যবহার করে করা জিনিসগুলিকে সমান্তরাল করতে দেয়। এটা সত্যিই দারুন.
উপলব্ধ @Stateful
, @Stateless
এবং @Singleton
।
নির্ধারিত কাজ
@Schedule
বা ScheduleExpression
মূলত একটি ক্রোন বা Quartz
কার্যকারিতা। এছাড়াও খুব দুর্দান্ত। বেশিরভাগ পাত্রে কেবল এর জন্য কভার্টজ ব্যবহার করে। তবে বেশিরভাগ লোকই জানেন না যে জাভা ইই-র শিডিয়ুলিংয়ের কাজটি লেনদেনের! আপনি যদি একটি ডেটাবেস আপডেট করেন তবে কিছু কাজের সময় নির্ধারণ করুন এবং তার মধ্যে একটি ব্যর্থ হয়, উভয়ই স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যাবে। যদি EntityManager
অবিরাম কল ব্যর্থ হয় বা ফ্লাশ করতে সমস্যা দেখা দেয় তবে কাজটি আন-শিডিয়ুল করার দরকার নেই। হ্যাঁ, লেনদেন
@Stateless
এবং @Singleton
শুধুমাত্র উপলব্ধ ।
জেটিএ লেনদেনে সত্ত্বা ব্যবস্থাপক ব্যবহার করে
অবশ্যই লেনদেনের উপরের নোটটি আপনাকে একটি JTA
পরিচালিত ব্যবহারের প্রয়োজন EntityManager
। আপনি এগুলিকে সাধারণ "সিডিআই" দিয়ে ব্যবহার করতে পারেন, তবে ধারক-পরিচালিত লেনদেন ছাড়াই এটি সত্যই একঘেয়ে হতে পারে UserTransaction
প্রতিশ্রুতি / রোলব্যাক যুক্তির নকল করে ।
CDI, JSF সহ সব জাভা EE উপাদান উপলব্ধ @ManagedBean
, @WebServlet
, @WebListener
, @WebFilter
, ইত্যাদি @TransactionAttribute
টীকা অবশ্য প্রাপ্তিসাধ্য হয় @Stateful
, @Stateless
এবং @Singleton
শুধুমাত্র।
জেটিএ পরিচালিত হচ্ছে EntityManager
EXTENDED
পরিচালিত EntityManager
আপনি একটি রাখার অনুমতি দেয় EntityManager
মধ্যে খোলা JTA
লেনদেন এবং না হারান ক্যাশে করা ডেটা। সঠিক সময় এবং স্থানের জন্য ভাল বৈশিষ্ট্য। দায়িত্বপূর্ণভাবে ব্যবহার করুন :)
@Stateful
শুধুমাত্র উপলব্ধ ।
সহজ সিঙ্ক্রোনাইজেশন
যখন আপনার সিঙ্ক্রোনাইজেশন দরকার হয়, @Lock(READ)
এবং @Lock(WRITE)
টীকাগুলি বেশ দুর্দান্ত। এটি আপনাকে নিখরচায় একযোগে অ্যাক্সেস পরিচালনা করতে দেয়। সমস্ত রেন্ট্রেন্টরিডড্রাইটলক প্লাম্বিং এড়িয়ে যান। একই বালতিতে এটি @AccessTimeout
আপনাকে বলতে দেয় যে হাল ছেড়ে দেওয়ার আগে বিনের দৃষ্টান্তটিতে অ্যাক্সেস পেতে কোনও থ্রেডের কতক্ষণ অপেক্ষা করা উচিত।
@Singleton
শুধুমাত্র শিমের জন্য উপলব্ধ ।