জাভা কি করে: কমপ / এনভি / / করে?


116

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

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>

আমি আসলে এটি লিখেছিলাম ...

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/loc"/>
</bean>

আমি অনুমান করি যে java:comp/env/সম্ভবত কিছু পরিবেশের পরিবর্তনশীল উল্লেখ করা হয়েছে এবং এটি এমন করে তোলে যাতে, শেষ পর্যন্ত আমার প্রসঙ্গ ফাইলটি লক্ষ্য করা যায়। পার্থক্য একটাই java:comp/env/। একটি বিশেষজ্ঞের মুখ থেকে, এটি কি করে?

java:comp/env/মানটির উপসর্গ ছাড়া , আমি একটি ত্রুটি পেয়েছি যা বলেছিল যে "নাম জেডিবিসি এই প্রসঙ্গে আবদ্ধ নয়"


3
আপনি প্রথমে কোনটি ব্যবহার করেছেন? আপনার প্রশ্নের ইঙ্গিত দেয় যে আপনি ভুলভাবে দ্বিতীয় উদাহরণটি ব্যবহার করেছিলেন ( jdbc/locএবং এইভাবে java:comp/env/jdbc/locসঠিক), যখন চেরোভিমের উত্তর থেকে বোঝা যায় যে আপনি ভুলভাবে প্রথম উদাহরণটি ব্যবহার করছেন ( java:comp/env/jdbc/locএবং এভাবে jdbc/locসঠিক)। নির্বিশেষে, আসল উত্তরটি: এটি বর্তমান প্রসঙ্গে নির্ভর করে।
বালুস সি

1
যেটি কাজ করে নি সে প্রকৃতপক্ষে জাভাটি অনুপস্থিত ছিল: ইম্প্রেটিভ হিসাবে, কম্পিউটার / এনভি / জেডিবিসি / লোক। যে কনটেক্সট ফাইলটিতে ইঙ্গিত করা হয়েছিল তাতে "লোক" সংস্থান অন্তর্ভুক্ত রয়েছে। "বর্তমান" প্রসঙ্গে সম্ভাব্যতা কী?
ড্যানি

উত্তর:


100

Https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tt//t///isc/policy.html উদ্ধৃত করা হচ্ছে

নেমস্পেসের মূল প্রসঙ্গে হ'ল "কমপ" নামের একটি বাধ্যতামূলক, যা উপাদান-সম্পর্কিত বাইন্ডিংয়ের জন্য সংরক্ষিত একটি সাবট্রির সাথে আবদ্ধ। "কমপ" নামটি উপাদানটির জন্য সংক্ষিপ্ত। মূল প্রসঙ্গে অন্য কোনও বাইন্ডিং নেই। যাইহোক, মূল প্রসঙ্গটি নীতিটির ভবিষ্যতের প্রসারণের জন্য বিশেষত সংস্থানগুলির সাথে নয় তবে ব্যবহারকারী বা বিভাগের মতো অন্যান্য ধরণের সত্তার সাথে সংযুক্ত এমন সংস্থানগুলির নামকরণের জন্য সংরক্ষিত। উদাহরণস্বরূপ, ভবিষ্যতের নীতিগুলি আপনাকে "জাভা: ব্যবহারকারী / এলিস" এবং "জাভা: org / ইঞ্জিনিয়ারিং" এর মতো নাম ব্যবহার করে ব্যবহারকারী এবং সংস্থা / বিভাগগুলির নাম দেওয়ার অনুমতি দিতে পারে।

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

সুতরাং আপনি যে বাঁধাইটি বসন্ত থেকে করেছেন বা উদাহরণস্বরূপ, টমক্যাট প্রসঙ্গে বর্ণনাকারীর দ্বারা জাভাটির অধীনে ডিফল্টরূপে চলেছেন: কমপ / এনভি /

উদাহরণস্বরূপ, যদি আপনার কনফিগারেশনটি হয়:

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="foo"/>
</bean>

তারপরে আপনি এটি ব্যবহার করে সরাসরি অ্যাক্সেস করতে পারবেন:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");

অথবা আপনি একটি মধ্যবর্তী পদক্ষেপ নিতে পারেন যাতে আপনার পুনরুদ্ধার করা প্রতিটি সংস্থার জন্য আপনাকে "java: comp / env" নির্দিষ্ট করতে হবে না:

Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");

আমি ভেবেছিলাম আমি এটি সঠিকভাবে বুঝতে পেরেছি, তবে আরও মন্তব্য আমাকে বুঝতে পেরেছিল যে আমি এত পিছিয়ে পড়েছি। টমকাট প্রসঙ্গে বর্ণনাকারী যদি জাভা: কমপ / এনভিভের অধীনে ডিফল্টরূপে যায়, তার মানে কি এই নয় যে আমি মানটি থেকে জাভা: কমপ / এনভিভ বাদ দিতে পারি? আমার ক্ষেত্রে, "নাম জেডিবিসি এই প্রসঙ্গে আবদ্ধ নয়" ত্রুটিটি দূরে সরে যেতে এটি যুক্ত করতে হয়েছিল।
ড্যানি

4
আপনি "foo" ব্যবহার করে এবং "java: comp / env / foo" ব্যবহার করে বাঁধেন। কটাক্ষপাত আছে blog.cherouvim.com/javax-sql-datasource-exposed-through-jndi
cherouvim

3
উপরের লিঙ্কটি স্ট্যান্ড अোনাল জেএনডিআই টিউটোরিয়াল থেকে এসেছে, যা মূলত: ডকস.ওরকল / জাভাসে / জেন্ডি / টিউটোরিয়াল / বিবিড / মিস / পোলিসি এইচটিএমএল- তে উপলব্ধ ।
ড্যানিলো পিয়াজলুঙ্গা

যদি আপনার অনুসন্ধানে আরও / -es থাকে? পছন্দ: "জাভা: com / env / foo / bar", আপনার jndiName মান "foo / বার" বা "foo.bar"?
পিটার ডি বিয়

সঠিক jndiName মানটি "foo / bar" @PieterDeBrie করবে।
tftdias

37

স্ট্রিংটি ইতিমধ্যে উপস্থিত না থাকলে স্বয়ংক্রিয়ভাবে স্ট্রিংটি পুনরায় চাপতে ব্যবহার করার জন্য সেট করা থাকলে resourceRefএর একটি বৈশিষ্ট্যও রয়েছে।JndiObjectFactoryBeantruejava:comp/env/

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/loc"/>
  <property name="resourceRef" value="true"/>
</bean>

3

টমকেটের সোর্স কোডে বেশ কয়েকটি প্রচেষ্টা এবং গভীর গভীরতার পরে আমি জানতে পেরেছিলাম যে সাধারণ সম্পত্তি ব্যবহারের নামকরণ = "মিথ্যা" কৌশলটি করেছে! এখন টমক্যাট জাভা: / লাইভারের পরিবর্তে জাভা: কমপ / এনভি / লাইফ্রেয়ের নামগুলি সমাধান করে


আপনি সংস্থান সংজ্ঞা সহ একটি সম্পূর্ণ উদাহরণ প্রদান করতে পারেন? টমক্যাট ৮.৫ দিয়ে আমি এটি সফলভাবে সেট আপ করার ব্যবস্থা করিনি - এর আরও বিস্তৃত উদাহরণ আমাকে আমার ভুলটি দেখতে সহায়তা করবে, সম্ভবত।
রবার্টজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.