EJB এর - কখন দূরবর্তী এবং / অথবা স্থানীয় ইন্টারফেস ব্যবহার করবেন?


180

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

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

কোন ব্যাখ্যা এবং পরামর্শের জন্য ধন্যবাদ।

উত্তর:


186

আমি জাভা ইইতে খুব নতুন এবং আমি স্থানীয় ইন্টারফেস এবং রিমোট ইন্টারফেসের ধারণাটি বোঝার চেষ্টা করছি।

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

পরে, সান বুঝতে পেরেছিল যে বেশিরভাগ ব্যবসায়িক অ্যাপ্লিকেশনগুলি আসলে আলাদা স্তরে ইজেবি বিতরণ করছে না এবং তারা স্থানীয় ইন্টারফেসের ধারণাটি প্রবর্তন করে (EJB 2.0 তে) ঠিক করেছিল যাতে ক্লায়েন্টরা ইজেবি ধারক সহ একই ভার্চুয়াল মেশিনে সংঘবদ্ধ হয়ে ইজেবিগুলিকে কল করতে পারে সরাসরি পদ্ধতি প্রার্থনা, সম্পূর্ণরূপে আরএমআই শব্দার্থবিজ্ঞান (এবং সম্পর্কিত ওভারহেড) বাইপাস করে।

আমাকে বলা হয়েছে যে জাভা ইই এর একটি বড় সুবিধা হ'ল স্কেল করা সহজ (যার অর্থ আমি বিশ্বাস করি আপনি বিভিন্ন সার্ভারে বিভিন্ন উপাদান স্থাপন করতে পারেন)

জাভা EE স্কেল করতে পারে, তবে এর অর্থ অগত্যা উপাদানগুলি বিতরণ করা উচিত নয় । আপনি ওয়েব টিয়ার এবং ইজেবি স্তরকে আলাদা না করে কোনও ক্লাস্টারে একটি ওয়েব + ইজেবি অ্যাপ্লিকেশন চালাতে পারেন।

আপনি যদি নিজের অ্যাপ্লিকেশনটির বিভিন্ন সার্ভারে বিভিন্ন উপাদান রাখার প্রত্যাশা করেন তবে আপনার কি রিমোট ইন্টারফেস ব্যবহার করার কথা রয়েছে? এবং যদি আপনার অ্যাপ্লিকেশনটি কেবল একটি সার্ভারে বাস করে তবে লোকাল ইন্টারফেসগুলি ব্যবহার করবেন?

আমি এটি এর মতো বাক্যাংশটি বলব: ক্লায়েন্ট একই ਜੇভিএম না থাকলে দূরবর্তী ইন্টারফেস ব্যবহার করুন (এর অর্থ এটি কেবলমাত্র একটি সার্ভার / জেভিএম ব্যবহার করা হয় না)।

(...) স্থানীয় ইন্টারফেস ব্যবহার করে শুরু করুন, এবং যেখানে প্রযোজ্য সেখানে দূরবর্তী ইন্টারফেসগুলিতে ধীরে ধীরে আপগ্রেড করবেন?

আমি সম্ভবত স্থানীয় ইন্টারফেস ব্যবহার করে শুরু করব। এবং ইতিমধ্যে ইঙ্গিত হিসাবে, দূরবর্তী ইন্টারফেসে স্যুইচ করা সর্বদা বাধ্যতামূলক নয় (আপনি একটি সংঘবদ্ধ কাঠামো ক্লাস্টার করতে পারেন )।

আমি নীচে উল্লিখিত সংস্থানগুলি পরীক্ষা করার পরামর্শ দিই (২ টি প্রথম জন বেশ পুরানো তবে এখনও প্রাসঙ্গিক, 2 জন আরও সাম্প্রতিক)।

সম্পদ


2
আমি এই প্রশ্ন আকর্ষণীয় মনে। "দূরবর্তী ইন্টারফেসগুলিতে স্যুইচ করা একেবারে বাধ্যতামূলক নয়" এর অর্থ কী? এর অর্থ কি যখন আপনি একই জেভিএম এর বাইরে কোনও নতুন ক্লায়েন্ট যুক্ত করেন, আপনাকে কোনও দূরবর্তী ইন্টারফেস তৈরি করতে হবে না?
মোহামিদা

2
@ জোসেক ধন্যবাদ, আপনি এটি পছন্দ করেছেন বলে @মোহিমদা আমি শব্দটিতে কিছুটা পরিবর্তন করেছি। আমি যা বোঝাতে চেয়েছি তা হ'ল আপনি একটি সংঘবদ্ধ কাঠামো গুচ্ছ করতে পারেন।
পাস্কেল থিভেন্ট

1
উত্তর এবং অতিরিক্ত সংস্থানগুলির জন্য ধন্যবাদ, তারা খুব সহায়ক হয়েছে। দেখে মনে হচ্ছে কোনও ওয়েব অ্যাপ্লিকেশনকে স্কেলিংয়ের কয়েকটি উপায় রয়েছে ... অর্থাত্ সংস্থাগুলি বিতরণ করা (যা আমি এটি বিভিন্ন জেভিএম এর বিভিন্ন স্তর ভাঙ্গার হিসাবে গ্রহণ করি?) বা লোড ব্যালেন্সিং ব্যবহার করে (যা পুরো অ্যাপ্লিকেশনটিতে থাকবে) অসংখ্য সার্ভার?) এবং আমি মনে করি আপনি উভয়ের সংমিশ্রণটি ব্যবহার করতে পারেন? আপনি কি এই বিষয়টিতে ভাল বই জানেন? আবার ধন্যবাদ!
ব্রায়ান ডিকাসা

2
@ ব্রায়ান It seems like there are a couple ways of scaling a web application (...) and I suppose you could use a combination of both?হ্যাঁ, এটি ঠিক। Do you, by chance know of good books on this topic?দুঃখের বিষয়, না, আমি জানি না "ZE" পরম উত্স, যদি সেখানে থাকে। যদিও কিছু রেফারেন্স সহ আমি আরও সংস্থান যুক্ত করেছি।
পাস্কেল থিভেন্ট

প্রথম সংস্থান লিঙ্কটি মারা গেছে
ভাইচাসলভ ডব্রোমিস্লাভ

48

যদিও আমি উপরে লেখা বেশিরভাগের সাথে একমত, আমি "কীভাবে শুরু করব" ধারণাগুলি কিছুটা পরিমার্জন করতে চাই।

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

এইভাবে, আপনি সহজেই দূরবর্তী এবং স্থানীয় বাস্তবায়নগুলির মধ্যে স্যুইচ করতে পারেন - এবং যদি আপনি স্প্রিংয়ের মতো কোনও আইওসি পাত্রে ব্যবহার করেন তবে আপনি এটি কেবলমাত্র কনফিগারেশনের মাধ্যমে করতে পারেন।

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

আপনার নকশা যদি পাস-ইন অবজেক্টগুলিকে পরিবর্তন করার জন্য ইজেবি পদ্ধতির উপর নির্ভর করে, তবে আপনার পরে "রিমোটে স্যুইচ" করা কঠিন হবে; সম্ভবত অসম্ভব।

শুভকামনা।


2
কার্যকর জাভা প্রতি পরিব্যক্তি হ্রাস করার আরও একটি কারণ বলে মনে হচ্ছে। এটি কি EJB এর সাথে আরএমআই টাইপ ইন্টারফেসের জন্য "রিমোটে স্যুইচ করতে" নমনীয়তায় সহায়তা করবে?
থুফির

19

ইজেবি স্পেস ৩.২ অনুসারে একটি ইজেবি স্থানীয় বা দূরবর্তী হতে পারে । একটি ব্যবসায়ের ইন্টারফেস একই সাথে স্থানীয় এবং দূরবর্তী উভয়ই হতে পারে।

@Local বিজ্ঞপ্তিযুক্ত বিনগুলি কেবল একই অ্যাপ্লিকেশনটিতে থাকলেই অ্যাক্সেস করা যায়।

@Remote বর্ণিত মটরশুটি বিভিন্ন jvms বা অ্যাপ্লিকেশন সার্ভার জুড়ে বিভিন্ন অ্যাপ্লিকেশন জুড়ে অ্যাক্সেস করা যায়।

তাই মনে রাখা গুরুত্বপূর্ণ বিষয়গুলি হ'ল:

  1. যদি কোনও বিন বিন শ্রেণিতে @Remoteটীকা থাকে তবে সমস্ত প্রয়োগকৃত ইন্টারফেসগুলি দূরবর্তী হতে হবে।
  2. যদি শিম শ্রেণিতে কোনও টিকা থাকে না বা @Localটিকাটি নির্দিষ্ট করা থাকে তবে সমস্ত প্রয়োগকৃত ইন্টারফেস স্থানীয় বলে ধরে নেওয়া হয়।
  3. কোনও ইন্টারফেস যা স্পষ্টভাবে শিমের জন্য সংজ্ঞায়িত করা হয়েছে যার কোনও ইন্টারফেস নেই তা অবশ্যই @ লোকাল হিসাবে ঘোষণা করতে হবে।
  4. EJB 3.2 প্রকাশের ক্ষেত্রে স্থানীয় এবং দূরবর্তী ইন্টারফেসগুলি স্পষ্টভাবে সংজ্ঞায়িত করা দরকার যেখানে আরও গ্রানুলারিটি সরবরাহ করে।

1
প্রশ্ন: আপনি কি @Localঅন্য একটি অ্যাপ্লিকেশন (জেআর, ওয়ার, ইআর), তবে একই জেভিএম-তে একটি ইজেবি আহ্বান করতে ব্যবহার করতে পারেন ?
কার্লিটোস ওয়ে

@ প্রীতমবাণার্জি কার্লিটোস ওয়া সম্পর্কে কোনও ধারণা, আমিও একই সমস্যার মুখোমুখি হই। ইজেবি বিভিন্ন ক্লাস্টারে এবং ক্লায়েন্ট সার্লেট অ্যাপ্লিকেশনটি একের মধ্যে রয়েছে।
গভী এস

স্থাপিত টুইট দুঃখিত :(
প্রীতম ব্যানার্জি

7

এটি আপনার উদ্বেগের জবাব দিতে পারে:

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

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

সূত্র: http://www.onjava.com/pub/a/onjava/2004/11/03/localremote.html?page=last&x-showcontent=text

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