জেএনডিআই এর উদ্দেশ্য কী


91

আপনি কীভাবে জেএনডিআই ব্যবহার বুঝতে পারবেন, যদি সম্ভব হয় তবে একটি উদাহরণ সহ?


4
আপনি ব্যবহারের ক্ষেত্রে ব্যক্তিগত ব্লগ পোস্টটি চেক করতে পারেন: tshikatshikaaa.blogspot.com/2013/01/…
Jérôme ভার্সট্রিঞ্জ

সম্পর্কিত এলডিএপি, জেসিএ এবং সিসিআই সম্পর্কে কথা বলে এমন একটি নিবন্ধের দিকে ইঙ্গিত করার জন্য @ জেভিস্ট্রি +1।
অজয়

পরীক্ষা করে দেখুন এই তাই থ্রেড
Aniket ঠাকুর

উত্তর:


110

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

উদাহরণস্বরূপ, আপনি যদি জাভা EE ধারকটিতে চলমান কোডটি লিখছেন, আপনি JNDI নাম "ডাটাবেস" সহ ডেটা উত্স ধরে রাখতে এটি লিখতে পারেন:


DataSource dataSource = null;
try
{
    Context context = new InitialContext();
    dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
    // Couldn't find the data source: give up
}

নোট করুন এখানে ডাটাবেস ড্রাইভার, বা ব্যবহারকারীর নাম, বা পাসওয়ার্ড সম্পর্কে কিছুই নেই। এটি ধারকটির ভিতরে কনফিগার করা আছে।

জেএনডিআই কেবল ডাটাবেসে (জেডিবিসি) সীমাবদ্ধ নয়; সমস্ত ধরণের পরিষেবাগুলির নাম দেওয়া যেতে পারে। আরও তথ্যের জন্য, আপনার ওরাকল এর টিউটোরিয়ালটি পরীক্ষা করা উচিত ।


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

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

4
ভাল, জেএনডিআই এখানে কীভাবে সহায়তা করে?
অজয়

4
এটিতে জেএনডিআই সম্পর্কে আপনার যা যা জানা দরকার তা থাকা উচিত, J2EE প্রসঙ্গে বা জাভাএসই প্রসঙ্গে হোক। javaworld.com/javaworld/jw-04-2002/jw-0419-jndi.html
নিকো

4
নিবন্ধন করুন আমি জেএনডিআই সম্পর্কে শিখছি। এটি একটি ভাল উত্তর, তবে আপনি "জেএনডিআই এর ব্যবহার বুঝতে পারবেন কীভাবে?" প্রশ্নটি লক্ষ্য করলে? তারপরে এটি অসম্পূর্ণ দেখাচ্ছে। আপনি বিকাশকারীর দৃষ্টিকোণ থেকে উপলব্ধির বর্ণনা দিয়েছেন। কীভাবে মোতায়েনকারীর দৃষ্টিভঙ্গি?
lxknvlk

31

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

অবশ্যই, একমাত্র ইস্যুতে আসলে একটি জেএনডিআই পরিষেবা সরবরাহকারী রয়েছে; এই সম্পর্কে দুর্দান্ত জিনিস হ'ল এটি আপনার নিজের রোল করা আশ্চর্যজনকভাবে সহজ। সব পরে আপনি এনকোড করতে কোন জাভা উদাহরণস্বরূপ মধ্যে XMLJavaBeans ব্যবহার XMLEncoderএবং XMLDecoder: যদি আপনি একটি অ্যাপ্লিকেশন সার্ভার মধ্যে চলমান উপর নির্ভর করতে হবে না!

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


এটি এখন পর্যন্ত সর্বাধিক বৃত্তাকারী স্পষ্টতা - অক্সবো_লাক্সকে ধন্যবাদ! বিটিডব্লিউ, আপনি কি কোড পয়েন্টার পাবেন যেখানে আপনার পরামর্শ অনুসারে কোনও জাভা উদাহরণ এনকোড করা আছে?
রোহান কুমার

13

জেএনডিআই হ'ল একটি এপিআই যা ডিরেক্টরি এবং নামকরণ পরিষেবাদি অ্যাক্সেস করতে ব্যবহৃত হয় (অর্থাত্ উপায়গুলির সাথে নামগুলির সাথে সম্পর্কিত হয়)। কোনও অবজেক্টের সাথে নামের সংযুক্তি একটি বাধ্যতামূলক বলে called

নামকরণ পরিষেবার একটি প্রাথমিক উদাহরণ হ'ল ডিএনএস যা মেশিনের নামগুলি আইপি ঠিকানাগুলিতে ম্যাপ করে।

জেএনডিআই ব্যবহার করে অ্যাপ্লিকেশনগুলি যেকোন প্রকারের নামযুক্ত জাভা অবজেক্টগুলি সঞ্চয় এবং পুনরুদ্ধার করতে পারে।

জাভা প্রসঙ্গে এটি কনফিগারেশন ফাইলগুলিতে ব্যবহার করা যেতে পারে যেখানে আপনি হার্ড-কোড পরিবেশ নির্দিষ্ট ভেরিয়েবলগুলি চান না।

বসন্ত উদাহরণ:

বসন্ত প্রসঙ্গে ফাইল

<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
    <jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
    <jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />    
</property>

টমক্যাট প্রসঙ্গ ফাইল

<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>

3

জেএনডিআই কেবলমাত্র একটি নামে একটি সংস্থান তৈরির সরলীকরণের অনুমতি দেয় । সুতরাং, সুবিধার্থে / সুরক্ষা / ইত্যাদির জন্য এটি অনেক বিশদ গোষ্ঠী 1। (ওরফে বিমূর্ত স্তর)

অনুধাবন করার জন্য: একটি বৈশিষ্ট্য তালিকা সেট করুন যা জেন্ডি প্রসঙ্গ ইন্টারফেসে পূর্বনির্ধারিত ক্ষেত্রগুলির সাথে মিলে যায়। (এই বৈশিষ্ট্যগুলি jndi সম্পাদনের জন্য সেটিংস নির্দিষ্ট করে; তবে * অনুসন্ধানের নাম নয়)

Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial
    //field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case

Context ctx = new InitialContext(props);
    Object o = ctx.lookup("*name of resource*");

আদর্শভাবে, আপনার প্রতিষ্ঠানে এলডিএপি ডিরেক্টরি, ডিএনএস, ইত্যাদি বজায় রাখার জন্য একটি বিশেষ ক্রিয়াকলাপ উপস্থিত থাকবে (সুতরাং একটি ইউনিফাইড একক ম্যাপিং সেট পরিষেবাগুলি, তাত্পর্য হ্রাস করে)

জেএনডিআই পরিষেবা সরবরাহকারীদের তালিকা: https://www.ibm.com/support/ জ্ঞানসেন্টার/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_S सर्विस_প্রাইভাইডার_ইচটিএম

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